2010-05-24 54 views
4

重命名我有一個典型的Subversion設置:並行處理分支

/trunk 
/branches/client-one 
/branches/client-two 
/branches/client-three 

幹線持有主要開發分支是客戶定製。現在,然後從後備箱I端口變爲分公司,反之亦然:

[+] /trunk/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-one/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-two/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-three/readme-trunk.txt 

它的工作原理很完美,除了當我需要重命名文件。現在,我怎麼做,我總是會遇到樹衝突,根據我採取的步驟,我失去了本地修改,或者我無法再移植未來的修改。

是否可以重命名文件並仍然能夠來回移動端口?

[rename] /trunk/readme-trunk.txt -> /trunk/readme.txt 
[port] /trunk/readme.txt -> /branches/client-one/readme.txt 
[port] /trunk/readme.txt -> /branches/client-two/readme.txt 
[port] /trunk/readme.txt -> /branches/client-three/readme.txt 

[edit] /trunk/readme.txt 
[port] /trunk/readme.txt -> /branches/client-one/readme.txt 
[port] /trunk/readme.txt -> /branches/client-two/readme.txt 
[port] /trunk/readme.txt -> /branches/client-three/readme.txt 

(關於這個問題的大多數文檔意味着樹衝突發生時,兩個開發人員修改了同一個文件。這不是因爲我是唯一的開發商的情況下)

回答

1

我一直在讀一本很多,因爲我問了這個問題,似乎文件重命名是大多數源代碼管理系統的弱點。就Subversion而言,這是其中的一件事,就是無法完成的事情(比如1.5之前的合併)。

這是一個似乎效果最好解決方法:

  1. 在樹幹定期進行重命名(複製+刪除)。承諾。
  2. 對於每個分支:從#1作爲合併,例如,svn merge --record-only(命令行)或[X] Only record the merge(TortoiseSVN的)
    • 標籤版本。
    • 執行定期重命名(複製+刪除)。

你沒有樹的衝突問題,最好的部分,這兩個文件仍被視爲相關的,所以你仍然可以端口和分支之間的反向移植。

(沒有真正在目錄上測試過,只是普通文件,評論歡迎。)