2015-12-05 15 views
10

Ich habe ein dotfiles Repository. Ich möchte einen weiteren mit Submodulen (prezto) darin einfügen, so dass ich bequem alles in einem Repository ohne die Unannehmlichkeiten von Submodulen haben kann.Wie füge ich ein Git-Repository mit Untermodulen in ein anderes mit Teilbaum-Zusammenführung ein?

Wie kann ich Teilbaum prezto in mein dotfiles-Repository mit all seinen Submodulen zusammenführen?

Ich kann Submodule verwenden, ich kann Teilbäume entweder "altmodisch" oder mit dem neueren git Teilbaumwerkzeug teilen und zusammenführen.

Ich weiß einfach nicht, wie man diesen speziellen Fall macht.

+0

Warum nicht jedes Modul als Unterbaum im dotfiles Repository pflegen? – dan

+0

Ja das möchte ich machen. Ich möchte Submodule loswerden und nur ein Repository als Ganzes verwalten. – kissgyorgy

Antwort

2

Alexander Mikhailian erstellt script, um alle Submodule in Teilbäumen zu konvertieren, sollten Sie in der Lage sein, es an Ihren Fall anzupassen.

hier präsentieren die Schritte:

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 

Ich denke, der einfachste Weg wäre für Sie das Skript auf dem prezto Repo anzuwenden und dann die repo einen Teilbaum im dotfiles Repository machen.

Nachdem das Skript im prezto Repository ausführen werden Sie die steps folgenden verwenden, um die Baumansicht zu erstellen:

  1. eine neue Remote-URL In den prezto Repo in die dotfiles zeigt.

    git remote add -f prezto [email protected]:path/prezto.git 
    
  2. Merge das prezto Projekt in das lokale dotfiles Projekt. Dies ändert keine Ihrer Dateien lokal, aber es bereitet Git auf den nächsten Schritt vor.

    git merge -s ours --no-commit prezto/master 
    
  3. Erstellen Sie ein neues Verzeichnis prezto-subdir (oder was auch immer Sie mögen), und kopieren Sie die Git Geschichte des prezto Projekt hinein genannt.

    git read-tree --prefix=prezto-subdir/ -u prezto/master 
    
  4. die Änderungen Commit sie sicher zu halten.

    git commit -m "Subtree merged in prezto"