Ich habe die Aufgabe, Perforce meines Team & Quelle von git der Migration auf Perforce, und ich bin auf der Suche nach Ideen, wie die git Geschichte in p4 zu bewegen.von git Migration
Ich würde glücklich sein, Meister Zweig nur zu bewegen. Aber auch das erweist sich als problematisch.
Ich benutze das wunderbare git-p4-Tool. Ich erstelle einen Zielbereich in meinem p4-Arbeitsbereich und benutze git p4 clone //depot/StuffFromGit
, um das Tracking in git-p4 zu starten. Ich übertrage alle Änderungen meines git-Repositorys in den git-p4-Klon. Ich kann dann git p4 submit
und fertig sein, alle Änderungen werden auf p4 geschoben.
Es funktioniert großartig, wenn die git Geschichte wie folgt aussieht, schön und linear:
A---B---C---D
Das Problem kommt mit mehreren Personen an dem Projekt arbeiten. Obwohl sie an Master arbeiten, entstehen immer noch Zweige, die sich teilen und zusammenführen. Dennoch git-p4 diese tapfer Griffe:
A---B---C---E
\--D--/
git p4 quert OK, ABCDE, um zu begehen (oder ABDCE, entweder Person Geschichte zuerst).
Das Problem kommt, wenn zum Beispiel, C und D beide die gleiche Datei zu ändern, und E ist ein Echt ehrlich-zu-Güte verschmelzen. git p4 rebase
schlägt hier fehl; Es wird die Commits zurückspulen, aber während der Wiedergabe wird zuerst C angewendet, dann D versucht und ein Konflikt gefunden. Es wird dann aufhören und mich bitten, zu verschmelzen. Nun, E enthält die Zusammenführung, aber es bittet mich, manuell zusammenzuführen! 'git p4 submit' wird auf ähnliche Weise fehlschlagen, nur jetzt wird die Änderung vor dem Zusammenfügen von p4 abgelehnt.
Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp Failed to merge in the changes. Patch failed at 0005 Changing main
So jetzt bin ich fest. Gibt es eine Möglichkeit, die git-Geschichte zu bereinigen oder git-p4 dazu zu bringen, sie zu verstehen? Es ist frustrierend, da die Zusammenführungen da sind.
Gedanken Ich habe:
- git filter-branch jegliche Erwähnung von widerstreitenden Dateien zu entfernen. Ich würde die Geschichte Kommentare über, obwohl viele Dateiänderungen fehlen. Mit ungefähr 3000 Commits in der Geschichte würde ich alle Geschichte der Schlüssel- (beschäftigten) Akten entfernen. Am Ende des gefilterten Dateiimports würde ich die fehlenden Dateien hinzufügen, indem ich eine endgültige Übergabe des HEADs vornahm.
- Dump die Geschichte, machen Sie eine einzelne P4 Commit des HEAD (einfach, aber traurig).
- Nicht zu p4: Ich habe diese Idee so lange wie möglich bearbeitet.
Keiner von denen sind wirklich toll. Irgendwelche Ideen, wie 'gt p4 rebase' oder 'git p4 send' funktionieren soll?
Angesichts der Geschichte des Git, ist das ein bisschen eine lustige Richtung zu migrieren. –
Klingt wie git-p4 versucht, C, D ** und ** E zu verschmelzen und natürlich kläglich scheitern. Hast du überprüft, dass du das neueste git-p4 verwendest und ob es Patches gibt oder andere Leute das gleiche Problem gesehen haben? –
Wow, Mann, tut mir leid. Klingt, als würdest du dich 10-15 Jahre rückwärts bewegen. – Jonathan