2010-12-13 96 views
10

我正在對包含許多源文件的C++項目進行重構。 當前的重構步驟包括將兩個文件(比如x.cppy.cpp)合併爲一個較大的文件(比如xy.cpp),並拋出一些代碼,並添加一些代碼。如何在版本控制系統中加入兩個文件

我想告訴我的版本控制系統(在我的情況下,Perforce),生成的文件是基於兩個以前的文件,所以在未來,當我看到xy.cpp的修訂歷史時,我也看到所有對x.cppy.cpp進行了改變。

Perforce支持重命名文件,所以如果y.cpp不存在,我會確切知道該怎麼做。 Perforce也支持合併,所以如果我有兩個不同版本的xy.cpp它可以從它創建一個版本。從這裏,我發現加入兩個不同的文件是可能的(不確定);然而,我搜索了一些關於Perforce和其他源代碼控制系統的文檔,並沒有發現任何有用的東西。

是我想盡一切辦法嗎?
它有一個傳統的名字(搜索關於「合併」或「加入」的文檔不成功)?

+2

+1直到你問,它從來沒有發生過這樣的事情可能是多麼有用。 – 2010-12-13 17:39:50

回答

1

我不認爲它可以在經典的VCS中完成。
這些版本系統有兩種形式(幻燈片Getting git by Scott Chacon 50+):基於三角形

  • 歷史:你把一個文件,並記錄其增量。在這種情況下,單位是文件,您不能將其歷史記錄與另一個文件關聯。

  • 基於DAG的歷史記錄:您需要一個內容並記錄其修補程序。在這種情況下,文件本身可能會有所不同(它可以隨意更名/移動),也可能是其他兩個內容的結果(因此它與您想要的結果接近)......但仍在的歷史記錄中一個文件(來自其DAG不同分支的內容)。

alt text

3

你可以試着用毫無根據的合併(在命令行-i)整合。如果我正確理解文檔(並且我從未自己使用它),這將強制整合兩個文件。然後,您需要解決您選擇的集成問題,從而導致與您正在設想的文件接近。

做完這些之後,我假設Perforce的歷史記錄會顯示來自集成歷史中無關文件的集成,允許您在需要時追溯到該文件。

+0

試圖做到這一點;沒有工作。它建議我應該將第一個(古代)版本的'x.cpp'作爲一個「基礎版本」進行3路合併。 – anatolyg 2010-12-14 17:31:54

1

容易的部分是這樣的:

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

然後棘手的問題變得解決y.cpp的的舉動,做您的重構。但是這會告訴Perforce這些文件是合併的。

相關問題