处理并行分支中的句柄

时间:2010-05-24 10:50:32

标签: svn tortoisesvn

我有一个典型的Subversion设置:

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

Trunk持有主要开发,分支持有客户端自定义。偶尔,我将更改从trunk更改为分支,反之亦然:

[+] /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 个答案:

答案 0 :(得分:1)

自从我提出这个问题以来,我一直在阅读,看来文件重命名是大多数源控制系统的弱点。关于Subversion,它是那些无法完成的事情之一(比如1.5之前的合并)。

这是似乎最有效的解决方法:

  1. 在trunk中执行常规重命名(复制+删除)。提交。
  2. 对于每个分支:
    • 将合并后的#1标记修改为合并,例如svn merge --record-only(命令行)或[X] Only record the merge(TortoiseSVN)。
    • 执行常规重命名(复制+删除)。
  3. 你没有树冲突,最好的部分,两个文件仍然被认为是相关的,所以你仍然可以在分支之间移植和移植。

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