2016-06-01 12 views
5

Vediamo di cosa si trattacome posso aggiungere git submodule a git repo come directory normale?

  • creare due 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 .. 
  • Spostare il sub pronti contro termine in test
 
mv sub test 
cd test 
git add sub 
git commit -m "add sub directory" 

Voglio trattarli come un unico repository e inviarli da remoto, ma ora i file sotto la directory sub non possono essere inclusi?

Come posso ottenere questo in modo semplice come trattare sub come directory normale?

Caso d'uso per questa

provo ad aggiungere la mia cartella dei dati Jenkins (JENKINS_HOME) in immagini della finestra mobile utilizzando Dockerfile per demo. (ADD JEKINS_HOME /opt/jenkins)

JENKINS_HOME 
Dockerfile 

mio Jenkin ha scriptler plugin che contiene il repository git per il suo scopo. Poi esiste nella mia finestra mobile git repo come sotto

 
$ 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 

risposta

1

Sembra che tu non possa farlo. Il nome .git è hard-coded nel codice sorgente: https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

Probabilmente un modo è quello di fare uno script che rinomina .git a qualcos'altro e ritorno, prima e dopo l'aggiunta in pronti contro termine come

nella directory di lavoro sotto scripts

mv .git hidden-git 

In Dockerfile

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

Alter in modo nativo, probabilmente è possibile passare la variabile di ambiente GIT_DIR nel plug-in, quindi potrebbe utilizzare un altro nome.

+0

sarebbe bene cambiare il behavier di quel plugin. lo script probabilmente non è poi così male. –

+0

@LarryCai Se leggo correttamente questo codice, non supporta la personalizzazione GIT_DIR ... quindi non è possibile farlo a meno che non si modifichi il codice. https://github.com/jenkinsci/git-server-plugin/blob/42393f76d7f5678f9ca49f8a76252be2cfa244c2/src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java#L53 Esso dovrebbe avere 'setGitDir' con qualche valore personalizzabile , ma niente qui. – kan

+0

no, quindi userò lo script per gestirlo. –

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

voglio trattarli come un repo git e spingerli a distanza, ma ora i file sotto directory sub non possono essere inclusi?

Essi non sono inclusi perché test vede repo subas nested git repo, and records only its gitlink, or SHA1, e non il suo URL, che avrebbe se sub era stato aggiunto come modulo.

È necessario inserire prima l'URL sub in un URL remoto, quindi aggiungerlo come sottomodulo per test per visualizzare i file sub.

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

Oppure si avrebbe bisogno to use a subtree

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

grazie, e il caso d'uso non si adatta bene a questa soluzione –