2016-06-01 12 views
5

Zobaczmy co to jestJak dodać moduł git do repozytorium git jako normalnego katalogu?

  • utworzyć dwa git repo sub & test
 
mkdir test sub 
cd test && git init && touch README && git add README && git commit -m "initialize the git repo" && cd .. 
cd sub && git init && touch README && git add README && git commit -m "initialize the sub git repo" && cd .. 
  • Przesuń sub repo do test
 
mv sub test 
cd test 
git add sub 
git commit -m "add sub directory" 

Chcę traktować je jako jedno repozytorium git i przesyłać je zdalnie, ale teraz nie można włączyć plików z katalogu sub?

Jak mogę to osiągnąć w prosty sposób, jak traktować sub jako normalny katalog?

przypadków użycia tego

próbuję dodać mój folder danych Jenkins (JENKINS_HOME) na obrazy Döcker korzystających Dockerfile dla demo. (ADD JEKINS_HOME /opt/jenkins)

JENKINS_HOME 
Dockerfile 

Moja Jenkin ma scriptler plugin który zawiera repo git do jego celu. Następnie istnieje w moim dokowanym obrazie git repo jak poniżej:

 
$ find jenkins-docker 
./.git 
./.git/.. (skipped 
./Dockerfile 
./JENKINS_HOME 
./JENKINS_HOME/scriptler 
./JENKINS_HOME/scriptler/scripts 
./JENKINS_HOME/scriptler/scripts/.git 
./JENKINS_HOME/scriptler/scripts/.git/... (skipped) 
./JENKINS_HOME/scriptler/scripts/Sample.groovy 
./JENKINS_HOME/... (skipped) 
./README 

Odpowiedz

1

Wygląda na to, że nie możesz tego zrobić. Nazwa .git jest zakodowane w kodzie źródłowym: https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

Prawdopodobnie jeden sposób to zrobić skrypt, który zmienia nazwę .git do czegoś innego iz powrotem przed i po dodaniu go do repo jak

W katalogu roboczego pod scripts

mv .git hidden-git 

W Dockerfile

RUN mv $JENKINS_HOME/scriptler/scripts/hidden-git  
$JENKINS_HOME/scriptler/scripts/.git 

Alter natywnie prawdopodobnie możliwe jest przekazanie zmiennej środowiskowej GIT_DIR do wtyczki, aby mogła używać innej nazwy.

+0

byłoby dobrze zmienić behavier tej wtyczki. skrypt prawdopodobnie nie jest taki zły. –

+0

@LarryCai Jeśli poprawnie odczytam ten kod, nie obsługuje on dostosowywania GIT_DIR ... więc nie można tego zrobić, chyba że zmodyfikować kod. https://github.com/jenkinsci/git-server-plugin/blob/42393f76d7f5678f9ca49f8a76252be2cfa244c2/src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java#L53 Należy mieć 'setGitDir' z pewnym konfigurowalny wartości , ale nic tutaj. – kan

+0

nie, więc użyję skryptu, aby go obsłużyć. –

0
git add sub 
git commit -m "add sub directory" 

chcę traktować je jako jeden git repo i wcisnąć je zdalnie, ale teraz pliki w podkatalogu nie mogą być włączone?

Nie są one uwzględnione, ponieważ test widzi repo subas nested git repo, and records only its gitlink, or SHA1, a nie jego adres URL, ponieważ mogłaby jeśli sub został dodany jako modułem.

Najpierw należy przenieść sub do zdalnego adresu URL, a następnie dodać je jako moduł pod numer test, aby wyświetlić pliki sub.

cd test 
git submodule add -- /url/to/sub 

Albo będzie trzeba to use a subtree

cd test 
git subtree --prefix sub /url/to/sub master --squash 
+0

dziękuję, a przypadek użycia nie pasuje do tego rozwiązania –

Powiązane problemy