Ich habe ein Bare-Repo erstellt, um mein Repository zu veröffentlichen, kann jedoch nicht herausfinden, wie das Bare-Repo mit dem aktuellen Status des Haupt-Repositorys aktualisiert werden kann.
Ich habe ein Bare-Repo erstellt, um mein Repository zu veröffentlichen, kann jedoch nicht herausfinden, wie das Bare-Repo mit dem aktuellen Status des Haupt-Repositorys aktualisiert werden kann.
Antworten:
Wenn Sie alle Objekte aus dem Haupt-Repo duplizieren möchten, tun Sie dies im Haupt-Repo:
git push --all <url-of-bare-repo>
Alternativ können Sie auch im nackten Repo abrufen:
git fetch <url-of-main-repo>
Sie können keinen Pull machen, weil ein Pull mit ihm verschmelzen möchte HEAD, was ein nacktes Repo nicht hat.
Sie können diese als Fernbedienungen hinzufügen, um sich in Zukunft das Tippen zu ersparen:
git remote add <whatever-name> <url-of-other-repo>
Dann können Sie einfach tun
git push --all <whatever-name>
oder
git fetch <whatever-name>
je nachdem , was Repo sind Sie in. Wenn <whatever-name>ist origin, können Sie es sogar ganz weglassen.
Haftungsausschluss: Ich bin kein Git-Guru. Wenn ich etwas Falsches sagte, würde ich gerne erleuchtet werden!
Update: Lesen Sie die Kommentare!
git-fetch --allinnerhalb des nackten Repositorys erstellt habe, habe ich keine Aktualisierungen gesehen, die ich am Haupt-Repo vorgenommen habe, aber wenn git push --all <url-of-bare-repo>ich sie aus dem Haupt-Repo mit verschoben habe, werden die Aktualisierungen in angezeigt git log. Vermutlich gibt es dafür eine einfache Erklärung - kann jemand das erklären?
git logdass diese Updates nicht im Bare Repo angezeigt werden. (Weder noch git log --allein funktionierendes Repo, das durch Klonen des Bare-Repo erstellt wurde - entweder über git log --alloder durch einfaches Betrachten neuer Dateien, die dort angezeigt werden sollen). Es ist ein ziemlich schneller Test, um sich selbst davon zu überzeugen. Meistens bin ich nur neugierig, was mir fehlt.
git fetch -q origin master:masterin Ihrem lokalen Bare-Repo tun . Dadurch werden die neuen Inhalte aus dem Hauptzweig von github abgerufen und Ihr lokaler Hauptzweig darauf aktualisiert.
master:masterist es erforderlich, HEAD vorwärts zu dem des Remote- Repos zu bewegen. In meinem Fall konnte ich aufgrund eines Problems keine Verbindung mehr zu unserem Bare Repo herstellen, da Git fehlte. Bis es gelöst ist, mache ich einen umgekehrten Tunnel und hole mit: zum zentralen Repo git fetch ssh://localhost:8765/... master:masterund es funktioniert wie ein Zauber. Vielen Dank!
git fetch origin *:*
Ich habe ein Repository mit dem folgenden Befehl erstellt
git clone --bare <remote_repo>
Dann habe ich versucht, den nackten Klon mit der Antwort von Thomas zu aktualisieren, aber es hat bei mir nicht funktioniert. Um das nackte Repository zu aktualisieren (was Let_Me_Be meiner Meinung nach gefragt hat), musste ich ein Spiegel-Repository erstellen:
git clone --mirror <remote_repo>
Dann könnte ich den folgenden Befehl im gespiegelten Repository ausführen, um die Aktualisierungen des Hauptrepositorys abzurufen:
git fetch --all
Ich bin auf diese Lösung gestoßen, indem ich Mirror a Git Repository By Pulling gelesen habe
[remote "origin"]Abschnitt hinzufügen fetch = +refs/*:refs/*undmirror = true
Die einzige Lösung neben der Neuerstellung mit git clone --mirrorist von Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Dann können Sie git fetchund Sie werden die Updates sehen. Das Seltsame ist, dass vorher, obwohl es eine remotekonfigurierte gibt, keine Zweige darin aufgelistet sind git branch -a.
git remote updatedie Arbeit erledigen können.
--forceund --prunejeweils an die git fetchLinie.
Angenommen:
$ git clone --bare https://github.com/.../foo.git
Holen Sie mit:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Hinweis: --git-dir=foo.gitist nicht erforderlich, wenn Sie zuerst cdin das Verzeichnis wechseln.
originkönnen Sie das originTeil jederzeit durch den Pfad / die URL zu Ihrem ursprünglichen Repository ersetzen , wenn dies nicht definiert ist . zB$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Nach langem Herumspielen habe ich festgestellt, dass dies für mich funktioniert.
Einmal:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Jedes Mal, wenn ich synchronisieren möchte:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') ist der Schlüssel. Gute Antwort, danke!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'die Antwort. Nachdem ich diesen Befehl gedrückt habe, kann ich einfach git fetchund das Repo wird mit dem Remote synchronisiert.
Fügen Sie das nackte Repository als Remote-Repository hinzu und verwenden Sie es dann git push.
Bei mir hat diese Kombination funktioniert:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
Der Parameter -u für den Abruf war erforderlich, andernfalls wird die Fehlermeldung angezeigt: "Verweigern des Abrufs in die aktuellen Zweigstellenreferenzen / Köpfe / Master des nicht nackten Repositorys" (siehe auch https://stackoverflow.com/a/19205680/4807875 )