2010-09-16 142 views
0

我正在維護一個最初沒有使用版本控制系統的項目。相反,將會有代碼庫的定期快照保存到備份文件夾中,並且偶爾會創建一個臨時分支。當我拿到這個項目的一抱,我創建了一個Subversion版本庫吧,致力於每個快照到存儲庫(使用的WinMerge更新工作,每次副本),並用樹枝與在此備份文件夾中的「貴」副本分支對應系統。顛覆:追溯合併?

現在,該項目已經顛覆了一段時間,並發展實時做過於軀幹,我一直在考慮從開​​發人員的機器被拉扯的那幾個舊的分支快照文件夾。我發現樹幹歷史上的正確位置是追溯性的......但是,我現在的問題是:如果我創建了這個分支,那麼我能用它做些什麼嗎?我是否可以追溯性地將此分支合併到主幹歷史記錄中,以便分支中的文件具有額外的文件歷史記錄?從本質上講,我想採取這個舊的「昂貴的副本」分支,從主幹歷史中的適當位置創建分支,複製舊分支,將每個舊備份副本提交到Subversion分支,然後合併所有內容回到適當的位置,如下面粗略的ASCII藝術圖所示:

 trunk: ... r107 -> r108 -\-> r109 -> r110 -> .... -> r137 -> .... -> r394 
old branch:     -> r395 -> r396 -> r397 -/ (r398) 

當前存儲庫的修訂是r394。創建分支將是r395。提交一對「昂貴」的副本將是r396和r397。 「在r137代表的時間點之前將其合併到主幹中會使存儲庫達到r398。現在,從r137開始查看文件的歷史記錄還將包括在r396 + r397中提交的更改,隨後在r398中合併。

如果沒有重新提交r137,然後進行合併,然後再次重新提交r394(我不認爲會給我想要的東西),就可能發生這種情況?

回答

1

顛覆允許您創建從一箇舊的快照分支機構,這樣你就可以從R108分支並提交更改(r395-397)進入該分支。但是,您不能再回到樹中並將「提交」插入樹的歷史記錄中。如果您對服務器管理員訪問權限,您可能能夠做一些功夫與svnadmin dump在歷史上適當的時候插入這些變化到樹,但它會甩開所有的版本號的下面那點(更不用說這將是一個相當複雜的過程)。我無法想象這個過程不會引起各種意想不到的問題,特別是在合併跟蹤方面。

我試圖做類似的事情而回,我發現從非組織系統移植到歷史版本控制系統,通常是更多的麻煩比它的價值。相反,我採用了代碼快照並做了一個徹底的休息;在使用舊系統的舊服務器上仍然可以使用該快照之前的所有內容,從那時起,所有的開發工作都將在Subversion存儲庫中完成。我們沒有丟失任何信息,所有的歷史依然存在,但它需要開發人員訪問舊服務器才能找到它。起初它很煩人,但幾個月後,Subversion回購已經發展了足夠的自己的歷史,舊系統的版本通常未被使用並被遷移到檔案服務器。既然你已經設置了你的Subversion repo幷包含了歷史版本,那麼在遺留代碼和當前代碼之間做一個乾淨的分割可能爲時已晚,但這個想法仍然存在。您可以添加新的歷史數據的服務器/文件共享承載的歷史構建,如果有人希望看到超越修訂200(或任何轉數,當你停止犯舊建立並開始做文件的最詳細的歷史積極開發),他們可以檢查服務器。