2016-04-06 16 views
0

Warum mache ich das? Es gibt einen Ordner in einem separaten Repository, mit dem ich auf einfachste Weise synchronisieren möchte.Ist es möglich, einen vorhandenen Baum zum Index hinzuzufügen

Basierend auf Git Internals Git Objects Kapitel hatte ich unter Eindruck, dass Ordner nur Teilbäume in Git sind. Und angenommen, dass es möglich wäre, ein Verzeichnis zu erstellen, das auf einen bereits existierenden Baum verweist. Diese

ist, was ich habe versucht:

git update-index --add --cacheinfo 040000 b5fd8e9305 rc 

b5fd8e9305 ist id des Baumes. Dieser Ansatz hat nur ein leeres Verzeichnis erstellt. Also die Frage wäre: ist es möglich, Teilbaum zu Tee mit Git Update-Cache-Befehl hinzufügen?


Ich habe auch versucht, Verfahren in Git subtree merging: low level plumbing Artikel beschrieben. Es funktioniert gut, obwohl es immer noch Frage ist, warum update-index nicht wie erwartet funktioniert.

Antwort

1

Während Baumobjekte mehr Bäume enthalten können, die Index ist etwas Besonderes, und normalerweise hat keine (Verweise auf) Baumobjekte darin.

Es ist möglich, Bäume hineinzuschieben, aber sie verhalten sich nicht gut (sie können magically change into gitlink entries).

Wenn Git ein neues Commit von einem Index durchführt, erstellt es jedes neue Tree-Objekt im laufenden Betrieb. Das heißt, der Index enthält die IDs (SHA-1s) von Blobs, die bereits zu diesem Zeitpunkt dem Repository hinzugefügt wurden, und die Pfadnamen, unter denen sie beibehalten werden sollen. und git commit -oder genauer git write-tree -konstruiert den Satz von Bäumen benötigt auf der Grundlage der Pfadnamen (und +x oder -x Modus-Bit) im Index. Der Festschreibungscode kann dann das Festschreiben selbst vornehmen, was sich auf den Baum der obersten Ebene bezieht.

(Die untere Zeile, sozusagen, ist, dass Sie den Index mit jeder Blob-ID aktualisieren müssen, anstatt mit der Struktur.)

Verwandte Themen