Ich kenne Git nicht sehr gut. :-/
Hintergrund
Ich habe zwei unabhängige Git-basierte Dokument-Repositorys, die ich zu einem einzigen Repository kombinieren möchte. Ich möchte die ursprünglichen Zeitstempel (aus dem Jahr 2005) und einzelne Dateiverläufe beibehalten. Die beiden Repos enthalten keine Zweige, keine Ordner und es gibt keine Überschneidungen in Bezug auf die Dateibenennung.
Im ASCII-Land sieht das so aus:
REPO A |-------------------------|
REPO B |===============|
Wo die Überlappung die Zeit bezeichnet.
Ziel
Mein Ziel ist es, die überlappenden Zeitstempel zu “verkleinern”, sodass die beiden Repos wie eine einzige, ununterbrochene Geschichte aussehen:
REPO A+B |-------------------==--=---============|
Was ich versucht habe
Auch hier kenne ich Git nicht sehr gut, also könnte ich etwas vermasselt haben.
Zuerst habe ich versucht, das neuere, kleinere Repo als Remote für das größere, ältere Repo hinzuzufügen, die Änderungen abzurufen und das Ergebnis zu übertragen. Ich endete damit, dass alle neuen Repo-Änderungen in einem Zweig nach dem älteren Repo zusammengefasst wurden:
MERGE |------------------------- -|
\===============/
Als nächstes versuchte ich eine Neubasierung (mit --committer-date-is-author-date
), von dem ich dachte, dass es funktionieren würde, aber stattdessen habe ich am Ende einen langen Commit-Verlauf, der die beiden Repos einfach übereinander stapelt.
REBASE |-------------------------===============|
Ich konnte keine Möglichkeit finden, den kombinierten Verlauf “zu wiederholen”. Ich hatte wirklich gehofft, dass Rebase die Antwort sein würde.
Antworten, die ich mir angesehen habe
- Zwei Git-Repositories zusammenführen, ohne den Dateiverlauf zu beschädigen (#1)
- Git-Rebase ohne Änderung der Commit-Zeitstempel (Nr. 2 oben, hat die Historien nicht “gezippt”)
- So kombinieren Sie zwei separate, nicht zusammenhängende Git-Repositories zu einem mit einer einzigen Verlaufszeitachse
- Kombinieren nicht verwandter Git-Repositories, die Verlauf/Zweige beibehalten
Bei Verwendung der verschmelzen Ansatz,
git log --date-order
zeigt die Commits, geordnet nach ihrer Commit-Zeit, wie Sie es wünschen, undgit log --date-order --graph
zeigt auch den Zweigbaum.– David Pärsson
9. Juni 2016 um 11:43 Uhr