2015-12-05 27 views
10

Ho un repository dotfiles. Voglio unire un altro con i sottomoduli (prezto) al suo interno, così posso comodamente avere tutto in un unico repository senza l'inconveniente dei sottomoduli.Come unire un repository git con i sottomoduli in un altro con l'unione secondaria?

Come è possibile suddividere in join il prezto nel repository di dotfiles con tutti i suoi sottomoduli?

Posso usare i sottomoduli, posso dividere e unire sottostrutture sia con il metodo "vecchio stile" sia con lo strumento più recente della sottostruttura di git.

Solo non so come fare questo caso specifico.

+0

Perché non mantenere ciascun modulo come una sottostruttura nel repository dotfile? – dan

+0

sì, questo è quello che voglio fare. Voglio eliminare i sottomoduli e mantenere un solo repository nel suo complesso. – kissgyorgy

risposta

2

Alexander Mikhailian ha creato un script per convertire tutti i sottomoduli in sottoalberi, dovresti essere in grado di adattarlo al tuo caso.

Presentando qui i passi:

cat .gitmodules |while read i 
do 
    if [[ $i == \[submodule* ]]; then 
    mpath=$(echo $i | cut -d\" -f2) 
    read i; read i; 
    murl=$(echo $i|cut -d\ -f3) 
    mcommit=`eval "git submodule status ${mpath} |cut -d\ -f2"` 
    mname=$(basename $mpath) 
    echo -e "$name\t$mpath\t$murl\t$mcommit" 
    git submodule deinit $mpath 
    git rm -r --cached $mpath 
    rm -rf $mpath 
    git remote add $mname $murl 
    git fetch $mname 
    git branch _$mname $mcommit 
    git read-tree --prefix=$mpath/ -u _$mname 
fi 
done 
git rm .gitmodules 

penso che la via più facile per voi sarebbe quella di applicare lo script sul prezto pronti contro termine e poi fare il repo una sottostruttura nel repository dotfiles.

Dopo aver eseguito lo script nel repository prezto si utilizzerà la seguente steps per creare la sottostruttura:

  1. Aggiungi un nuovo URL remoto che punta al prezto repo nella dotfiles.

    git remote add -f prezto [email protected]:path/prezto.git 
    
  2. Unire il progetto prezto nel progetto locale dotfiles. Questo non cambia nessuno dei tuoi file localmente, ma prepara Git per il prossimo passo.

    git merge -s ours --no-commit prezto/master 
    
  3. Creare una nuova directory chiamata prezto-subdir (o quello che vuoi), e copiare la storia del progetto Git prezto in esso.

    git read-tree --prefix=prezto-subdir/ -u prezto/master 
    
  4. confermare le modifiche per tenerli al sicuro.

    git commit -m "Subtree merged in prezto"