2010-08-01 5 views
93

Ich habe eine leere Repo erstellt, um mein Repository zu veröffentlichen, aber ich kann nicht herausfinden, wie das leere Repo mit dem aktuellen Status des Haupt-Repository aktualisiert werden.Wie aktualisiere ich mein leeres Repo?

+2

Siehe diese Antwort: http://StackOverflow.com/Questions/315911/Git-for-Beginners-the-definitive-Praktical-Guide/2964397#2964397 –

Antwort

57

Wenn Sie alle Objekte aus der Haupt-Repo duplizieren wollen, tun dies innerhalb des Haupt Repo:

git push --all <url-of-bare-repo> 

Alternativ innerhalb des nackten Repo eine Abruf tun:

git fetch <url-of-main-repo> 

Sie können nicht Mach einen Pull, weil ein Pull mit HEAD verschmelzen will, was ein bare Repo nicht hat.

Sie können diese als Fernbedienungen hinzufügen, sich in Zukunft etwas Tipp zu sparen:

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> 

auf welche Repo je Sie sind in. Wenn <whatever-name>origin ist, können Sie es sogar Altogeget lassen r.

Haftungsausschluss: Ich bin kein Git Guru. Wenn ich etwas falsches gesagt habe, möchte ich erleuchtet sein!

Update: Lesen Sie die Kommentare!

+0

Der Push scheint gut zu funktionieren, thx für den Hinweis, ich denke, dass ich in der Lage sein werde, dies zu integrieren ein Haken oder etwas ähnliches. –

+4

Wenn ich ein 'git-fetch --all' im blossen Repository gemacht habe, habe ich keine Updates gesehen, die ich am Hauptrepo gemacht habe, aber wenn ich sie aus dem Hauptrepo mit' git push --all 'Ich sehe die Updates in' git log'. Vermutlich gibt es dafür eine einfache Erklärung - kann jemand das erklären? – pho79

+0

Was meinst du mit "nicht gesehen"? Ich bin mir nicht sicher, wie 'git log' sich in einem bloßen Repo verhält; Vielleicht versuchen Sie 'git log --all'? – Thomas

3

Fügen Sie das leere Repository als Remote-Repository hinzu und verwenden Sie dann git push.

+0

Also, wenn ich dies tun möchte, ohne zu drücken kann ich nicht Verwenden Sie ein bloßes Repository und verwenden Sie einen symbolischen Link oder etwas ähnliches? –

+0

Pushing ist die normale Methode zum Übertragen von Repository-Inhalten in ein blankes Repository. Sie müssen es nicht vermeiden. – Philipp

+0

Sie können nicht immer drücken. Zum Beispiel, wenn das bare in einem privaten Netzwerk ist, und das Hauptrepos ist ein öffentliches (zum Beispiel auf GitHub) – fanf42

53

habe ich ein Repository den folgenden Befehl

mit

git clone --bare <remote_repo>

Dann für mich Ich versuchte, den nackten Klon mit der Antwort von Thomas zu aktualisieren, aber es hat nicht funktioniert. Um die nackten Repository zu erhalten zu aktualisieren (das ist, was ich denke Let_Me_Be bat), hatte ich einen Spiegel-Repository zu erstellen:

git clone --mirror <remote_repo> 

Dann könnte ich den folgenden Befehl in dem gespiegelten Repository laufen die wichtigsten Repository Updates zu greifen :

git fetch --all 

ich auf diese Lösung kam von Mirror a Git Repository By Pulling

+11

Um ein vorhandenes blankes Repo in einen Spiegel zu verwandeln, müssen Sie lediglich 2 Zeilen zur git config-Datei unter .git/config hinzufügen. Fügen Sie 'fetch = + refs/*: refs/*' und 'mirror = true' in den Abschnitt" [remote "Ursprung"] 'ein. –

31

Die einzige Lösung liest neben mit git clone --mirror neu zu erstellen ist from Gregor:

git config remote.origin.fetch 'refs/heads/*:refs/heads/*' 

dann können Sie git fetch und Sie werden die Updates sehen. Das Seltsame ist, dass vorher, obwohl es ein remote konfiguriert ist, es keine Zweige in git branch -a aufgeführt hat.

+1

Das hat mir wirklich geholfen! Capistrano Projekt/Repo verwendet diese Einstellung auch, um ein einliniges "Git Remote Update" zu ermöglichen. –

+0

Wenn die Gegenstelle Zweige aktualisiert oder gelöscht hat (und Sie diese Änderungen widerspiegeln möchten), müssen Sie der Zeile 'git fetch' gegebenenfalls' --force' und '--prune' hinzufügen. –

4

Nach viel Herumspielen habe ich festgestellt, dass dies für mich funktioniert.Sobald

:

git clone --mirror ssh://[email protected]:2000/repo 
git remote add remote_site ssh://[email protected]_site.address/repo 
git config remote.origin.fetch 'refs/heads/*:refs/heads/*' 

Jedesmal, wenn ich synchronisieren möchten:

cd /home/myhome/repo.git 
git --bare fetch ssh://[email protected]:2000/repo 
git fetch ssh://[email protected]:2000/repo 
git push --mirror remote_site 
+1

Die dritte Zeile ('git config remote.origin.fetch 'refs/heads/*: refs/heads/*'') ist der Schlüssel. Gute Antwort, danke! – peterh

26

Unter der Annahme:

$ git clone --bare https://github.com/.../foo.git 

Fetch mit:

$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune 

Hinweis: --git-dir=foo.git ist nicht erforderlich, wenn Sie cd zuerst an das Verzeichnis senden.

+2

Seltsam, dass diese Antwort nicht an der Spitze ist. Zumindest funktioniert es hier ... –

+0

Ich habe einen nackten Klon gemacht, und es gibt keinen Ursprung ... – Kieveli

+2

Obwohl ich nicht weiß, wann das passiert, wenn 'Herkunft' nicht definiert ist, können Sie immer den 'Ursprung' ersetzen Teil mit dem Pfad/URL zu Ihrem ursprünglichen Repository. z.B. '$ git --git-dir = foo.git holen https://github.com/.../foo.git + refs/heads/*: refs/heads/*' – antak

Verwandte Themen