Diese drei Codes erleichtern das Leben.

Heute zeigen wir euch, wie man in kurzer Zeit viele Commits oder Branches zwischen zwei Repositories austauschen kann.

Der Vorschlag lautet: Git Bundles. Die beiden Repositories müssen dabei nicht untereinander erreichbar sein. Praktisch, wenn aufgrund von Zugriffsbeschränkungen – zum Beispiel beim Kunden aus Sicherheitsgründen – oder durch einen Netzwerkausfall, ein direkter Pull nicht möglich ist. Die Bundles können so nach Erstellung beispielsweise per Email ausgetauscht werden.

So funktioniert das Konvertieren eure Commits oder Branches zu einem Bundle:

Der Befehl

git bundle create  ..

erstellt ein Bundle mit dem angegebenen Namen. Enthalten sind alle Commits vom Start-Hash bis zum Ziel-Hash. Ein Beispiel:

git bundle create sample.master.bundle 60c3d5834324ca6863cde231ee4d4eb5d4583282..master

Wichtig: Die beiden Punkte nicht weglassen, sonst wird alles bis zum angegebenen Hash-Wert ins Bundle gepackt und es wird unter Umständen sehr groß.

In dem oben genannten Beispiel wären alle Commits ab dem Hash 60c3d5834324ca6863cde231ee4d4eb5d4583282 bis zum aktuellen Master in ein Bundle gepackt. Btw: Das Bundle befindet sich im Verzeichnis, in dem der Git-Befehl ausgeführt wurde.

Mit folgendem Befehl kann auch der gesamte Master-Branch in das Bundle gepackt werden. Hierfür einfach den Start-Hash weglassen:

git bundle create sample.master.bundle master

Und so importiert ihr die Änderungen aus einem Bundle:

Vor dem Import sollte der Einfachheit halber, das Bundle in das Ziel Git Repository kopiert werden. Dadurch müssen keine Pfade angegeben werden. Zuerst sollte nun geprüft werden, ob das Bundle gültig und passend zum aktuellen Repo ist:

git bundle verify sample.master.bundle

Als Ergebnis erhält man zum Beispiel folgende Ausgabe:

The bundle contains this ref:

c14778c005226ae401f3e12c42a68772b155beef refs/heads/master

The bundle requires this ref:

7003ade7b17fb2d57f431022681c40fbaca69f46

sample.master.bundle is okay

Die Meldung „sample.master.bundle is okay“ bestätigt euch, dass alles funktioniert hat und es importiert werden kann. Der Befehl dafür lautet:

git pull sample.master.bundle master

Die Syntax hierfür:

git pull  

Benötigt ihr nicht alle Features aus dem Bundle, könnt ihr es auch zuerst in ein eigenes Repo klonen:

git clone 

Anschließend können aus diesem z. B. per cherry-pick die gewünschten Commits entnommen werden.

Now you know.

Have fun. Enjoy coding.
Your INNO coding team.