Wie synchronisiere ich zwei entfernte Git-Repositorys?

Ich habe zwei Repository-URLs und möchte sie so synchronisieren, dass beide dasselbe enthalten. In Mercurial versuche ich Folgendes zu tun:

hg pull {repo1}
hg pull {repo2}
hg push -f {repo1}
hg push -f {repo2}

Dies führt zu zwei Köpfen in beiden Repos (ich weiß, dass es nicht üblich ist, zwei Köpfe zu haben, aber ich mache dies zur Synchronisation und es muss nicht interaktiv sein. Die Köpfe werden manuell von einem der Repos und dann zusammengeführt die Synchronisierung wird erneut ausgeführt).

Ich würde gerne dasselbe in Git machen. ZB ohne Benutzerinteraktion alle Änderungen in beide Repos übertragen, mit mehreren Zweigen / Köpfen / was auch immer, die später zusammengeführt werden sollen. Ich versuche, dies mithilfe von URLs in den Befehlen zu tun, anstatt Remotes (?) Hinzuzufügen, da möglicherweise eine Reihe von Repos beteiligt sind. Wenn ich Aliase für alle habe, wird mein Skript nur komplizierter.

Ich klone gerade das Repo mitgit clone --bar {repo1} Ich kämpfe jedoch darum, es zu "aktualisieren". ich habe es versuchtget fetch {repo1} aber das scheint meine Veränderungen nicht zu beeinträchtigen;git log zeigt das in repo1 hinzugefügte Changeset immer noch nicht an.

Ich habe auch versucht mit--mirror in meinempush undclone, aber das schien entfernte Changesets von repo2 zu sein, die lokal nicht existierten, wohingegen ich die Änderungen von beiden Repos behalten muss: /

Wie geht das am besten?

Bearbeiten: Um es ein wenig klarer zu machen, was ich versuche zu tun ...

Ich habe zwei Repositorys (z. B. BitBucket und GitHub) und möchte, dass die Leute zu beiden pushen können (letztendlich wird einer Git sein, einer wird Mercurial, aber nehmen wir an, dass beide Git sind, um die Dinge zu vereinfachen). Ich muss in der Lage sein, ein Skript auszuführen, das die beiden Repos so "synchronisiert", dass sie beide Änderungssätze enthalten und möglicherweise später manuell zusammengeführt werden müssen.

Letztendlich bedeutet dies, dass ich nur mit einem der Repos interagieren kann (z. B. dem Mercurial), und mein Skript wird in regelmäßigen Abständen Git-Änderungen übernehmen, die ich einbinden kann, und sie werden dann zurückgeschoben.

In Mercurial ist diestrivial! Ich ziehe einfach aus beiden Repos und drücke mit-f/--force zu erlauben, mehrere Köpfe zu schieben. Dann kann jeder einen der Repos klonen, die Köpfe zusammenführen und zurückschieben. Ich möchte wissen, wie man das ähnlichste in Git macht. Es muss zu 100% nicht interaktiv sein und muss beide Repos in einem Zustand halten, in dem der Prozess unendlich oft wiederholt werden kann (das bedeutet, dass der Verlauf nicht umgeschrieben / Änderungen vorgenommen werden müssen usw.).

Antworten auf die Frage(5)

Ihre Antwort auf die Frage