2010-05-24 67 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的)
    • 标签版本。
    • 执行定期重命名(复制+删除)。

你没有树的冲突问题,最好的部分,这两个文件仍被视为相关的,所以你仍然可以端口和分支之间的反向移植。

(没有真正在目录上测试过,只是普通文件,评论欢迎。)