TortoiseSVN:将一个分支的内容复制到另一个分支

3
我正在使用TortoiseSVN来管理LabView源代码,而没有外部Subversion服务器(即大量不断变化的二进制文件)。我想要一个“beta”分支的存储库,任何人都可以订阅并获取每日更新。我猜这与通常的具有单独分支的beta发布系列不同,但对于这个项目来说是正确的。
最佳/最简单的方法是什么,可以将特定修订版的trunk分支内容复制到beta分支?本质上,我想做的就是删除beta的旧内容并插入新内容。我想,删除+添加也可以,但显然不是最佳选择。合并不是选项,除非我可以让Tortoise自动以trunk为优先解决所有冲突,包括删除文件。
更新:有几个人问我为什么不想删除+添加。我想要一个更干净的替代方案。
这种方法会导致beta树的一半更新被“清除上一个版本”。更新不是原子性的,所以有人可能会得到一个空的版本。我没有尝试过,但beta不会是一个适当的分支。修订日志是否会跟踪多个修订版,因为每次都是一个“新”文件?
更新2:svn允许在提交之前进行任意命令,但我无法让Tortoise以这种方式工作。选择“删除”后,存根目录仍然存在,直到我提交为止,此时我才能重新填充分支。当旧版本和新版本中都存在一个目录时,需要一种方法来取消标记要删除的目录。

我是否遗漏了什么,难道不是先删除再复制你想要的吗? - unquiet mind
2
不,SVN是事务性的——删除和复制(而不是添加!)不会有问题。Beta将是一个适当的分支(或更好的标签)。 - unquiet mind
@Unquiet:啊,我甚至没有想到那个!把它作为答案发布,我会选择它。 - Potatoswatter
3个回答

2
除非我能让Tortoise自动解决所有冲突并支持干线的利益,包括删除文件,否则合并不是一个选择。我不知道TortoiseSVN,但如果你安装了命令行客户端,你可以执行以下操作将最新的干线更改合并到beta分支中:
cd c:/path/to/my/working/copy/of/beta/branch
svn merge file:///c:/path/to/my/repository/trunk --accept theirs-full
svn commit -m "merged latest trunk changes to beta branch"

"--accept theirs-full"选项将使用主干版本来解决所有冲突,就像您想要的那样。
这有一些优点:Subversion将执行表示共享,因此存储在两个分支上的文件不会占用存储库中的额外空间。而且,当用户更新其beta工作副本时,只需要拉取已更改的文件,无需传输所有文件。

1

SVN是事务性的 - 删除和复制(不是添加!)不会有问题。而beta将是一个适当的分支(或更好的标签)。


好观点!然而,事实证明Tortoise似乎不支持这样的事务,因为在您提交删除之前存在剩余的占位符目录。所以,在选择这个选项之前我要等一会儿。(另外,标签在SVN中是实现为分支,对吧?) - Potatoswatter

0
为什么不删除 beta/*,然后将 trunk/* 复制到 beta/?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接