2010-12-13 5 views
10

Ich mache ein Refactoring meines C++ - Projekts, das viele Quelldateien enthält. Der aktuelle Refactoring-Schritt besteht darin, zwei Dateien (z. B. x.cpp und y.cpp) in eine größere Datei (z. B. xy.cpp) zu verbinden, in der Code weggeworfen wird und weitere Codes hinzugefügt werden.So verbinden Sie zwei Dateien in einem Versionskontrollsystem

Ich möchte meinem Versionskontrollsystem (Perforce, in meinem Fall) sagen, dass die resultierende Datei auf zwei vorherigen Dateien basiert, also in Zukunft, wenn ich auf die Revisionshistorie von xy.cpp schaue, sehe ich auch alle Änderungen, die jemals an x.cpp und y.cpp vorgenommen wurden.

Perforce unterstützt das Umbenennen von Dateien, wenn also y.cpp nicht existiert, würde ich genau wissen, was zu tun ist. Perforce unterstützt auch das Zusammenführen. Wenn ich also 2 verschiedene Versionen von xy.cpp hätte, könnte es eine Version daraus erstellen. Daraus ergibt sich, dass das Verbinden von zwei verschiedenen Dateien möglich ist (bin mir nicht sicher); Ich habe jedoch einige Dokumente zu Perforce und anderen Quellcodeverwaltungssystemen durchsucht und nichts Nützliches gefunden.

Was versuche ich überhaupt zu tun?
Hat es einen konventionellen Namen (Suche in der Dokumentation über "Zusammenführen" oder "Beitritt" war nicht erfolgreich)?

+2

+1 bis Sie gefragt haben, es kam mir nie in den Sinn, wie nützlich so etwas sein könnte. –

Antwort

1

Ich glaube nicht, dass es in einem klassischen VCS getan werden kann.
Diese Versionierungssysteme kommen in zwei Varianten (Folie 50+ von Getting git by Scott Chacon):

  • Delta-basierte Geschichte: Sie eine Datei nehmen, und sein Delta aufzuzeichnen. In diesem Fall kann die Einheit, die die Datei ist, nicht mit einer anderen Datei verknüpft werden.

  • DAG-basierte Geschichte: Sie nehmen eine Inhalt und notieren Sie ihre Patches. In diesem Fall kann die Datei selbst variieren (sie kann beliebig umbenannt/verschoben werden), und sie kann das Ergebnis von zwei anderen Inhalten sein (also nahe an dem, was Sie wollen) ... aber immer noch in der Historie von eine Datei (der Inhalt kommt von verschiedenen Zweigen seiner DAG).

alt text

3

Sie versuchen, mit unbegründeten Merges (-i auf der Kommandozeile) zu integrieren konnte. Wenn ich die Dokumentation richtig verstehe (und ich habe sie nie selbst benutzt), erzwingt dies die Integration von zwei Dateien. Sie müssten dann die von Ihnen gewählte Integration auflösen, was zu etwas führt, das der gewünschten Datei nahe kommt.

Danach nehme ich an, dass der Perforce-Verlauf die Integration aus der nicht verwandten Datei im Integrationsverlauf anzeigt, sodass Sie bei Bedarf diese Datei zurückverfolgen können.

p4 edit x.cpp y.cpp 
p4 move x.cpp xy.cpp 
p4 move y.cpp xy.cpp 

Dann wird Ihr Refactoring der schwierige Teil wird die Lösung der Bewegung von y.cpp und tun:

+0

Versucht es zu tun; hat nicht funktioniert. Es schlug vor, dass ich eine 3-Wege-Zusammenführung mit der ersten (alten) Version von 'x.cpp' als" Basisversion "machen sollte. – anatolyg

1

Der einfache Teil sein würde. Aber das wird Perforce sagen, dass die Dateien kombiniert sind.

Verwandte Themen