每当我使用ToroiseSVN重命名文件夹,然后对父文件夹进行提交时,它就会变得很丑陋。我通常会遇到一些奇怪的树冲突,以及关于SVN .tmp文件/文件夹不存在的错误,以及我以前从未见过的其他模糊信息。考虑到文件夹被删除并且据说被重新创建,如果它以某种可怕的方式被删除或损坏,该怎么办呢?
直接在repo上重命名,而不是在工作副本上更好吗? 这些问题是否正常?
答案 0 :(得分:2)
这些问题是否正常?
没有。只要你通过 TortoiseSVN菜单来移动/重命名事物,一切都应该可以正常工作。
你不应该做的坏事的例子:
我参与了从VSS迁移到SVN + TortoiseSVN的用户的培训。经验表明,即使经过多年使用TortoiseSVN,用户仍然会通过上述其中一种方式定期破坏工作副本。一旦损坏,修复工作副本通常是不可行的。
幸运的是,SVN 1.7(尚未发布)将通过将元数据集中在工作副本的根目录中的一个大.svn文件夹中来消除这种垃圾,例如git和mercurial。
和SVN .tmp文件/文件夹不存在的错误
您可能正在使用xcopy来操作工作副本。
当您使用xcopy复制文件夹时,它将省略空文件夹(除非您使用/E
开关)。
这将导致工作副本中的.svn/tmp
文件夹被省略,从而有效地损坏您的工作副本。
答案 1 :(得分:1)
一般来说,我认为在使用SVN时重命名并不是一个好主意,因为它很容易弄乱它。如果你有一组开发人员使用相同的代码库并且你使用分支,那么它会变得特别难看。
如果您不太关心更改历史记录,我建议手动制作文件夹的副本(即通过资源管理器而不是SVN),重命名(再次通过资源管理器),删除其中的所有.svn文件夹(所以你有一个干净的无版本文件夹),然后SVN将它(和里面的文件)添加到repo。然后只需SVN删除旧文件夹。当然,如果其他人正在编辑相同的源文件或正在使用分支,这并不能解决问题,但至少它会强迫您考虑重命名的含义。
答案 2 :(得分:0)
如果您的存储库设置良好,则不应该出现这些问题。但是,如你所说,拥有大量临时文件和文件夹会导致这类问题。
直接在存储库中重命名可能会解决您的大多数问题,但如果在重命名之前修改了临时文件,仍可能导致一些困难的合并冲突。
如果可以的话,尝试将任何临时文件和文件夹放入可添加到svn:ignore的父文件夹中,您将解决许多这些问题。
答案 3 :(得分:0)
如果您有多个活动分支,请不要重命名文件夹/文件。 SVN没有保留必要的元数据来处理它 - 因此您将遇到合并冲突。 GIT也不是。 Bazaar强调重命名是切换到他们系统的一个原因。