Ich versuche, eine leere Kopie eines Git-Repository beizubehalten und einige Probleme zu haben, die Remote-Tracking-Zweigstellen auf dem neuesten Stand zu halten. Ich erstelle die Remote-Tracking-Zweige wie folgt:Wie erhalte ich einen Remote-Tracking-Zweig, um in einem leeren Git-Repository auf dem neuesten Stand zu bleiben?
Dies scheint zu tun, was ich für diesen Zeitpunkt tun muss. Wenn ich jedoch Änderungen an origin
mache und dann mit dem bloßen Repo abrufe, beginnen die Dinge auseinander zu fallen. Mein Workflow sieht wie folgt aus:
git fetch origin
Es sieht aus wie alle Commits an diesem Punkt kommen, aber meine lokale Kopie von 0,1 wird nicht aktualisiert. Ich kann sehen, dass die Änderungen in das Repository gebracht wurden, indem Sie folgendermaßen vorgehen:
git diff 0.1 refs/remotes/origin/0.1
Was muß ich tun, um meinen Tracking-Zweig mit der Updates der Fernbedienung aktualisiert zu bekommen? Ich fühle mich, als müsste ich irgendwo einen Schritt oder eine Flagge verpassen.
Aktualisiert: Zusätzliche Klärung
Normalerweise würde man in einem kahlen Repository schieben, anstatt laufen git aus ihm holen. Wenn Sie das arrangieren können, wird das Leben viel einfacher.
Hier ist ein wenig Klarheit über den Workflow.
Das öffentliche Git-Repository des Projekts wird auf GitHub gehostet. Ich verwalte das Projekt (Wiki, Ausgaben, Foren) mit Redmine. Redmine benötigt ein lokales, bloßes Repository, um zu funktionieren. Wenn GitHub Änderungen empfängt, pingt es Redmine. Redmine versucht dann, Änderungen von seinem Ursprung (GitHub) abzurufen.
Das funktioniert gut, wenn ich nur mit Master arbeite, aber es funktionierte nicht mit meinen Tracking-Filialen. Die Änderungen wurden importiert, wurden jedoch nicht im Redmine-Repository-Browser in der Verzweigung aufgeführt, da die lokalen Zweige nicht aktualisiert wurden.
Ich bin mir sicher, dass ich das anders hätte machen können, aber eine (generische) Lösung zu finden, die Tracking-Zweige zum Laufen zu bringen, war definitiv meine Vorliebe, da die meisten git-bezogenen Plugins für Redmine Dinge wie "git fetch" annehmen Herkunft "ist alles, was getan werden muss.
Siehe akzeptierte Antwort für die vollständige Lösung. Die --mirror
Lösung scheint genau das zu sein, was in diesem Fall benötigt wird.
'git merge' erfordert immer einen funktionierenden Baum, Sie müssen' git update-ref' stattdessen in einem blanken Repository verwenden.Ich denke, Sie haben Recht, dass ein Spiegel eine bessere Lösung klingt. Es kann sich lohnen, ein nicht über 'git clone --spiegel 'hinzuzufügen. –
@Charles Bailey: Der Grund, warum ich dachte, es könnte ein Fehler sein, ist, dass in der Quelle von butintin-merge.c ein Kommentar beginnt "An diesem Punkt brauchen wir eine echte Zusammenführung ..." nach dem Punkt, wo eine schnelle Vorwärts wäre getan worden - ich glaube nicht, dass der Index oder Arbeitsbaum bis zu diesem Punkt benötigt wird. Ich werde diese Bemerkung sowieso entfernen. –
Sie könnten auf der Git-Mailing-Liste fragen, aber ich bin nicht davon überzeugt, dass es als ein Fehler betrachtet werden würde. Ich denke, dass es im Allgemeinen konsequenter ist, klar zwischen Befehlen zu unterscheiden, die keinen funktionierenden Baum erfordern und denen, die dies tun. Einen Befehl zu haben, der eine funktionierende Baumstruktur benötigt, ist eine komplexere Schnittstelle, die möglicherweise zu Missverständnissen führen kann. –