TortoiseSVN重命名文件夹总是失败

5
每当我使用ToroiseSVN重命名文件夹,然后在父文件夹上进行提交时,就会出现一些问题。通常会出现一些奇怪的树冲突,并出现关于SVN .tmp文件/文件夹不存在以及其他我从未见过的晦涩消息的错误。这非常令人紧张,因为该文件夹正在被删除并重新创建,如果它只是被删除或以某种可怕的方式损坏了呢?
直接在仓库上重命名是否更好,而不是在工作副本上进行重命名?这些问题正常吗?

1
我完全同意。在过去的几天里,我一直为处理这种无聊的事情而苦恼不已。 - Jeff
4个回答

2
这些问题正常吗?
不,只要您通过TortoiseSVN菜单移动/重命名事物,一切都应该正常工作。
永远不要做以下错误的事情:
- 使用资源管理器在您的工作副本中移动/复制/重命名/删除一个带版本的文件夹 - 更改.svn文件夹的内容 - 删除.svn文件夹(使用导出功能代替)
我参与了从VSS迁移到SVN+TortoiseSVN的用户培训。经验表明,即使使用TortoiseSVN多年后,用户仍会经常通过上述方法损坏工作副本。一旦损坏,通常无法修复工作副本。
幸运的是,SVN 1.7(尚未发布)将通过在工作副本根目录中集中元数据来消除许多这些问题,就像git和mercurial一样。
关于SVN .tmp文件/文件夹不存在的错误
您可能正在使用xcopy操作工作副本。当您使用xcopy复制文件夹时,它将省略空文件夹(除非您使用/E开关)。
这将导致您的工作副本中的.svn/tmp文件夹被省略,从而有效地损坏您的工作副本。

不,我字面上右键单击子目录并使用TortoiseSVN shell扩展程序中的“重命名”选项。一切正常,直到我尝试按照Tortoise的说明提交父目录。 - Mr. Boy
@John:在重命名之前,你的工作副本可能已经损坏了。 - Wim Coenen
SVN 1.7 什么时候发布? - Mr. Boy
@John:计划在2010年12月发布。但不要抱太大希望,计划发布日期已经推迟了几次。 - Wim Coenen
我有完全相同的问题。重命名是有效的,但每次提交时都会出现合并冲突。每一次都是如此。 - DanH

1
一般来说,在使用SVN时,我认为重命名不是一个好主意,因为很容易搞砸。如果你有一组开发人员在同一个代码库上工作,并且使用分支,情况可能会变得非常丑陋。
如果您不太关心更改历史记录,我建议手动复制文件夹(即通过资源管理器而不是SVN),重命名它(再次通过资源管理器),删除其中所有的.svn文件夹(这样您就有了一个干净的未版本化的文件夹),然后将其(以及其中的文件)添加到仓库中。然后只需删除旧文件夹。当然,如果其他人正在编辑相同的源文件或正在使用分支,则此方法无法解决问题,但至少它会迫使您考虑重命名的影响。

1
如果您不太关心更改历史记录的话 :) - vgru

0

如果您有多个活动分支,请勿重命名文件夹/文件。 SVN不保留必要的元数据来处理它 - 因此您将遇到合并冲突。 GIT也是如此。 Bazaar强调重命名作为切换到其系统的原因之一。


这个问题已经存在7年了。在2017年重命名文件夹大多按预期工作。唯一的注意点是你提到的(在分支之间移植更改时,不会将重命名的文件夹识别为同一对象),但有解决方法。我特别在提交发生重命名的合并之前使用TortoiseSVN中的“修复移动”功能。 - Álvaro González
我正在使用 SVN 1.8.5。如果一个分支中的文件已被重命名,而在另一个分支中有对这些文件的更改,则修复移动仍将导致合并冲突。在SVN和GIT中的原始存储库上进行简单的实验可以证明这一点。再次强调,这是Bazaar明确解决的问题。 - Little Endian

0

如果您的存储库设置得很好,就不应该有这些问题。但是,正如您所说,拥有大量临时文件和文件夹可能会导致这种问题。

直接在存储库中重命名可能会解决大部分问题,但如果在重命名之前修改了您的临时文件,则仍可能导致一些困难的合并冲突。

如果可以的话,请尝试将任何临时文件和文件夹放入父文件夹中,您可以将其添加到svn:ignore中,这样您将消除许多这些问题。


我觉得它抱怨的是SVN隐藏文件,而不是我自己的临时文件。 - Mr. Boy
你能否发布你所遇到的错误以及你的文件夹结构? - Alan Geleynse
所描述的错误表明客户端工作副本已损坏。仓库的设置方式无关紧要。 - Wim Coenen

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