Hier ist also eine Situation, die wahrscheinlich nicht üblich ist. Und ich hätte gerne ein paar Gedanken, wie man am besten vorgeht. Ich versuche, zwei Projekte zusammenzuführen, die auf einer gemeinsamen Codebasis aufbauen. Bis zu einem Punkt. So weit, so gut, wenn der Commit-Verlauf den gleichen Verlauf teilen würde. Was ich damit meine, na ja …
Ursprünglich war das Projekt ein Mercurial-Repository, aber irgendwann entschied Bitbucket, die Unterstützung für Mercurial einzustellen. Das war der Punkt, an dem das ursprüngliche Projekt auf github umgestellt wurde. Aber ich hatte den Wechsel für die Gabel gemacht, die ich früher gewartet habe. Jetzt gibt es also zwei Versionen derselben Bibliothek, die genau denselben Commit-Verlauf haben, bis der Fork passierte. Aber nichtsdestotrotz hat jedes Paar von Commits unterschiedliche Hashes, so dass Git denkt, dass es keinen gemeinsamen Verlauf gibt. Die ursprüngliche Bibliothek hat seit dem Fork keine größeren Updates erhalten, sondern nur kleine Korrekturen. Meine Gabel hat einige große Änderungen erfahren. Was also tun. Der ursprüngliche Projektleiter hat mich kürzlich wegen einer möglichen Übernahme des Repositoriums kontaktiert. Der Grund, warum mein Fork nie Dinge hochgeladen hat, war, dass, soweit ich das beurteilen konnte, die andere Seite einfach nicht die Zeit hatte. Fair genug, denke ich, Bei Open Source sind die Freiwilligen zu nichts verpflichtet. Wenn ich das Repository übernehme, möchte ich die Projekte wieder zusammenführen.
Irgendwelche Gedanken, wie man das am besten macht? Ich denke darüber nach, den Master in master-old umzubenennen und den Verlauf meiner Fork zu verwenden, auf die die wichtigsten Updates angewendet wurden, um der neue Master zu sein. Danach würde ich die Patches von Master-Old heraussuchen, die auf der Gabel fehlen. Aber das würde wahrscheinlich zu Problemen für die Leute führen, wenn sie das nächste Mal zu einem Git ziehen. Gibt es einen besseren Weg, mit dieser Situation umzugehen?
Lösung des Problems
git replace
die neuesten Commits in Ihrem konvertierten Verlauf, die auf denselben Baum wie einer in der älteren Konvertierung zeigen, mit denselben Commits in der älteren Konvertierung, um dann git filter-branch
die aktualisierte Herkunft einzubacken.
Keine Kommentare:
Kommentar veröffentlichen