git: Wie man interaktives Rebase automatisiert / durch äquivalente Git-Befehle ersetzt
Ich muss eine interaktive Rebase automatisieren oder durch andere Befehle ersetzen. Lassen Sie mich nur meine aktuelle Situation erklären:
In einem svn-> git Übergang muss ich das eben verursachte git Repository wieder aufbauen, um eine "Geschichte Abkürzung" zu regeln, die während des SVN gebildet wird. Hier ist mein manueller Workflow, um das Problem zu beheben.
branchNEW: containing history from SOMEDAY until now
branchOLD: containing history from past to SOMEDAY
BEARBEITE oder als ASCII:
branchNEW: Y - Z
branchOLD: W - X
Beide Filialen haben keine gemeinsamen Commits.
Die Grundidee ist jetzt, branchNEW einfach auf branchOLD zu rebasieren. Leider gab es eines Tages einige Umgestaltungen: Einige Dateien wurden in ein anderes Verzeichnis verschoben. Das Ergebnis der Rebase ist nun, dass jede verschobene Datei an beiden Stellen existiert.
BEARBEITE
some file exist in X
the (nearly) same files also exist in Y, just on another path
branchNEW: W - X - Y - Z
(after rebase)
Nach dem Rebase enthält HEAD nun die Dateien von X und Y. Ich habe auch versucht, branchOLD ein neues Commit hinzuzufügen, wodurch die alten Dateien entfernt werden. Nach dem Rebase sind SVN-HEAD und git-HEAD binär identisch, aber das "git log --follow" funktioniert nicht.
Nun zum Hauptproblem: Ich kann dieses Problem mithilfe einer zweiten interaktiven Rebase beheben:
git rebase -i SHA
SHA ist die sha-id desal root commit in branchNEU. Jetzt muss ich im Editor für das oberste Commit "pick" in "edit" ändern. Nach dem Verlassen des Editors muss ich nun die falschen Dateien entfernen
git rm -f fileA fileB
git commit --amend
git rebase --continue
Nachdem dieser HEAD of git mit head of SVN binär identisch ist, hat git den kompletten Verlauf und auch "git log --follow" funktioniert für die verschobenen Dateien.
Da dieser Schritt nur ein kleiner Teil eines großen VCS-Übergangs in der Zukunft ist, muss ich den gesamten Prozess skripten.Aber wie können die obigen Schritte automatisiert werden?
(Ich weiß, dass SHAs nicht gleich bleiben, aber ich bin in der Lage, die erforderliche SHA von der SVN-ID zu erhalten, die in jeder Commit-Nachricht eingebettet ist)