Ich versuche, einen Darcs-Spiegel eines Git-Repository einzurichten. Ich habe etwas, das funktioniert OK, aber es gibt ein signifikantes Problem: Wenn ich eine ganze Reihe von Commits zum Git Repo drücke, werden diese Commits in einem einzigen Darcs Patchset zusammengeführt. Ich möchte wirklich sicherstellen, dass jedes Git-Commit als ein einzelnes Darcs-Patchset eingerichtet wird. Ich wette, dass dies möglich ist, indem man eine Art git fetch
ausführt, gefolgt von der Abfrage der lokalen Kopie des entfernten Zweigs, aber mein git fu ist dem Job nicht gewachsen.
Hier ist der (ksh) Code, den ich jetzt benutze, mehr oder weniger:
%Vor%Meine Idee ist
git fetch
aus, um eine lokale Kopie der Remote-Verzweigung zu erhalten (nicht sicher, welche Argumente genau benötigt werden) Ich würde entweder willkommen heißen, um das obige Szenario zu erläutern oder Vorschläge zu etwas, das ich ausprobieren sollte.
Ideen?
Haben Sie versucht, einige vorhandene Lösungen zum Verschieben von Änderungsmengen zwischen Versionskontrollsystemen wie Schneider zu betrachten, was besagt, dass dies der Fall ist enthält Unterstützung für Git und Darcs? (Es gibt auch Vorschläge für ähnliche Systeme auf dieser Seite.)
Andernfalls, wenn Sie Ihren vorgeschlagenen Ansatz verwenden möchten, können Sie git checkout
bei jedem Commit nach HEAD
bis origin/master
verwenden, um das Commit im Modus "losgelöste HEAD" auszuführen. Zum Beispiel, um das Beispiel zu ändern, das Sie geben (und in bourne shell, ich fürchte, da ich ksh nicht verwende):
Beachten Sie, dass dies die Geschichte von Git linearisiert, was persönlich nicht das ist, was ich wollte. :) Ich denke, es ist am besten, ein vorhandenes Tool dafür zu verwenden, aber der obige Ansatz könnte funktionieren.
Sie könnten so etwas tun:
%Vor%Ich habe ein Repository für dieses Skript erstellt und es ausprobiert. Das Folgende ist vor und nach dem Zusammenführen:
Jetzt hatte ich kein Remote-Repository, also habe ich den Git-Fetch und den Remote-Zweig mit einem lokalen (namens kalle) gefälscht, aber Sie bekommen die Idee. Führen Sie einfach die vollständige Zusammenführung durch und sichern Sie dann den HEAD-Zeiger, bis Sie das erste Commit vom Ursprung / Master erreichen.
git remote update # fetch all remotes I like it better than just fetch
git log origin/master # can be any remote/branch
git cherry-pick origin/master # example remote/branch you can also specify a sha1
cherry-pick wählt standardmäßig den obersten Patch.
für den dritten Teil Ich denke, dass Sie ein Skript schreiben müssen, um es für Sie zu tun. Es gibt andere Möglichkeiten, die Hashes und viele Optionen für das Protokoll zu erhalten. Eigentlich könnte es einen Haken für cherry-pick geben oder einfach post commit ... um den darcs-code laufen zu lassen. schau dir Git Haken an.
In der Tat könnte jeder Patch, der in einer Rebase angewendet wird, einen Git-Commit-Hook aufrufen, so dass du vielleicht in der Lage bist, das zu schreiben und dann einen git pull --rebase zu machen. p>