Wie aktualisiere ich einen Git-Klon - Spiegel?

144

Ich habe ein Git-Repository erstellt, um eine Live-Site zu spiegeln (bei der es sich um ein nicht nacktes Git-Repository handelt):

git clone --mirror ssh://[email protected]/path/to/repo

Welchen Befehl oder welche Befehle muss ich verwenden, um diesen Spiegelklon mit allen Änderungen von seinem entfernten Ursprung auf dem neuesten Stand zu halten?

Ich möchte alles auf dem neuesten Stand halten: Commits, Refs, Hooks, Zweige usw.

Vielen Dank!

J. Bruni
quelle

Antworten:

213

Dies ist der Befehl, den Sie auf dem Spiegel ausführen müssen:

git remote update
ralphtheninja
quelle
@ Magnus Skog: Großartig. Vielen Dank! Ist das alles? Benötige ich noch einen Befehl git fetch? Oder git remote updateallein wird das alles tun?
J. Bruni
11
Ich würde auch gerne wissen, was der Unterschied zu Git Fetch ist.
Thorbjørn Ravn Andersen
1
@ Thorbjörn (du hast mit einem schwedischen ö zu tun :)): Git fetch aktualisiert nur dein Repository mit Remote-Referenzen von der Remote. Dieser Befehl aktualisiert alles im gespiegelten Repository.
Ralphtheninja
4
Hier ist eine gute Antwort, die mehr erklärt: stackoverflow.com/questions/3959924/…
ralphtheninja
16
'git remote update --prune' erledigt dies alles, entfernt jedoch Zweige, wenn sie aus dem ursprünglichen Repository entfernt werden.
teeks99
8

In Bezug auf Commits, Refs, Zweige und " usw. " funktioniert Magnus Antwort einfach ( git remote update).

Aber leider gibt es keine Möglichkeit zu clone/ spiegeln / update die Haken , wie ich wollte ...

Ich habe diesen sehr interessanten Thread zum Klonen / Spiegeln der Hooks gefunden:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Ich habe gelernt:

  • Die Hooks werden nicht als Teil des Repository-Inhalts betrachtet.

  • Es gibt mehr Daten, wie den .git/descriptionOrdner, der nicht geklont wird, genau wie die Hooks.

  • Die Standard-Hooks, die im hooksVerzeichnis angezeigt werden, stammen aus demTEMPLATE_DIR

  • Es gibt dieses interessante templateFeature auf Git.

Daher kann ich entweder dieses "Clone the Hooks-Ding" ignorieren oder eine rsyncStrategie wählen, die den Zwecken meines Spiegels entspricht (Backup + Quelle nur für andere Klone).

Nun ... ich werde einfach das Klonen von Haken vergessen und mich an den git remote updateWeg halten.

  • Sehe hat gerade darauf hingewiesen, dass nicht nur "Hooks" nicht vom clone/ update-Prozess verwaltet werden, sondern auch Stashes, Rerere usw. Für ein striktes Backup rsyncoder ein gleichwertiges Backup wäre dies also der richtige Weg. Da dies in meinem Fall nicht wirklich notwendig ist (ich kann es mir leisten, keine Haken, Verstecke usw. zu haben), werde ich mich, wie gesagt, an die halten remote update.

Vielen Dank! Ein bisschen von meinem eigenen "Git-Fu" verbessert ... :-)

J. Bruni
quelle
5

Siehe hier: Git klont nicht alle Zweige auf nachfolgenden Klonen?

Wenn Sie dies wirklich wollen, indem Sie stattdessen Äste ziehen push --mirror, können Sie hier einen Blick darauf werfen:

"fetch --all" in einem Git Bare Repository synchronisiert keine lokalen Zweige mit den entfernten

Diese Antwort enthält detaillierte Schritte, wie dies relativ einfach erreicht werden kann:

sehe sehen
quelle
1
pushist für mich keine Option, da ich dies auf der Empfangsseite tun muss (von wo aus sich der Klon befindet); pullist auch keine Option, da ein Spiegel-Repository ein nacktes Repository ist (kein funktionierender Baum, also kein "Ziehen") - es scheint git remote updatetatsächlich alles zu tun (viel einfacher als die Antwort, auf die verwiesen wird) ... Wie auch immer, danke! Sicherlich gibt es wertvolle Informationen in den verknüpften Fragen / Antworten.
J. Bruni
1
ok, ich meinte ziehen wie im üblichen Sprachgebrauch. Push and Pull-Technologie. Es gibt kaum ein anderes Wort als das unsinnige "Holen Sie sich die Daten von einer Fernbedienung aktiv auf den Client", das kein Wort überspielen würde, das für Git- oder DVCS-Systeme von Bedeutung ist :) Der zweite Link enthält die gewünschten Details. Beachten Sie , dass ‚git remote update‘ ist nicht in der Tat halten die ‚Spiegel‘ Status ohne die zusätzlichen Operationen erwähnt gibt
sehe
1
hmm ... sorry (HTH) - es scheint, dass ein "absoluter" Spiegel leichter durch ein einfaches "rsync" des ursprünglichen Repo-Ordners erreicht werden kann ... nicht das, was ich wollte, aber ... ich habe gerade einige Tests durchgeführt ... und nichts scheint die Haken zu kopieren - die mich besonders interessieren ...
J. Bruni
1
Zu Ihrer Information, die Zwecke dieses Spiegels sind nur folgende: 1) vollständige Sicherung, von der aus ich wiederherstellen kann, wenn die Daten auf dem ursprünglichen Repo-Server verloren gehen; 2) irgendwo, von wo aus andere klonen und ein lokales Arbeits-Repo erhalten können, ohne Zugriff auf das ursprüngliche Quell-Repo zu haben
J. Bruni
1
Wenn Sie Haken und alles wollen, könnte Gitosis (ich erinnere mich nicht gut) das haben, was Sie brauchen, aber ich würde mitmachen rsync in diesem Fall . Ich gehe auch davon aus, dass Sie Verstecke vergessen (siehe hier ) und Informationen erneut eingeben ...?
sehe