2010-09-29 45 views
3

很長一段時間,我們通過主幹完成了我們的所有開發和部署。一段時間後,這導致了一個與主幹不同步的生產環境,因爲我們要求將新功能「B」移到生產環境中,但延遲新功能「A」 - 基本上我們會從中繼線結帳到一個臨時文件夾,然後有選擇地合併文件從溫度到生產(這是不受版本控制)重新組織存儲庫後,無法將分支合併到主幹中

經過這個摔跤太久了,我終於決定重新安排存儲庫,以允許分支,但我做了一個移動(svn mv)主幹時出現一些錯誤,這樣我就可以爲分支和標籤文件夾騰出空間(以前沒有「trunk」文件夾,這些文件只是放在項目的父文件夾中),最終結果是我的「後備箱」現在比我創建的一些分支更新。而現在我似乎無法從分支合併回主幹,因爲缺少大量的變更並導致很多衝突。 (我已經更新了trunk的分支。)

如果我在我的主幹上運行svn log --stop-on-copy,最早的版本是r14376,如果我在分支上運行它,最早的版本是r14368。 (HEAD在r14710)

如何在不丟失r14368和r14376之間的所有更改的情況下進行適當的合併?我只是要手動合併到主幹,但是然後我失去了我所有的分支文件的修訂歷史記錄。

+0

* mutter * hg * mutter * – 2010-09-29 15:52:38

+1

「hg」?我沒有關注。 – 2010-09-29 15:56:14

+0

「hg」= Mercurial =「扔掉你學到的所有東西並學習一個新的分佈式版本控制系統」(或者, – 2010-09-30 07:01:53

回答

0

很難沒有看到發生了什麼事情與你的回購協議的更多細節來回答,但也許你可以刪除當前的「trunk」文件夾,然後將原始僞中繼(即回購根)複製到HEAD中的中繼文件夾中。我認爲這會給你原始的僞幹線作爲一個新的「幹線」文件夾與歷史完好無損。假設你剛開始修改RX回購根,命令會是這樣的:

svn rm url/trunk 
svn commit -m "Removing broken trunk" 
svn cp -rX url/@X url/trunk 
svn commit -m "Creating new trunk from previous root" 

你可以再嘗試合併你的分支回主幹。如果與中繼代碼有衝突,請嘗試合併所有修訂版本,然後減去您在中繼代碼中引入的修訂版本(我假設您可能錯誤地認爲您將主幹更新作爲獨立提交)。

+0

由於我在重組中移動文件的方式導致我無法在r14360之前引用任何修訂。我並沒有把時間安排在整個事情上,而是幾乎在整個過程中失去了整個事情。標記爲吸取的教訓,但最終的結果是,我沒有選擇按照你的建議去做。 – 2010-09-29 21:03:39

+0

你做了什麼,你不能參考14360之前的版本?由於沒有創建新的存儲庫並導入新的文件以刪除所有歷史記錄,我無法想到任何會阻止您引用早期版本的內容。即使你移動東西,刪除東西等,那些早期版本仍然存在,應該仍然可用。請注意,我在cp命令中使用了peg修訂版(「@X」);這將使您的舊路徑能夠工作,即使它們不再存在於HEAD中。這是否是造成麻煩的部分? – 2010-09-29 22:39:00

1

我用幾種不同的方式編寫合併命令,並認爲我終於得到了我需要的東西。我基本上是顛倒的合併參數的順序,使年輕的主幹是先其次是較舊的分支,然後我合併那些爲主幹的工作副本:

$ cd trunk 
$ svn update 
$ svn merge svn://server/project/[email protected] svn://server/project/branches/[email protected] . 
--- Merging differences between repository URLs into '.': 

這僅導致衝突屈指可數,最其中的圖像文件是我剛剛接受的右手副本。希望這可以讓我處於未來分支機構和合並階段正常工作的地方。