在一些重构过程中,我正在移动文件。显然,SVN将此视为删除文件并创建新文件,因为IDE不会触发SVN重命名/移动操作。但是我认为SVN服务器足够智能来检测它,但事实证明并非如此......反正并非如此。我正在使用Tortoise SVN,我取消选中“停止复制/重命名”按钮。
这是预期的吗?有没有办法围绕它?我应该使用Tortoise SVN shell命令移动文件,而不是让IDE执行常规文件移动吗?
此外,是否有可能手动强制SVN将两个文件作为同一实体链接,如果它不知道?就像告诉它“/com/john/test.tct和/com/john/test/file.txt一样”?
答案 0 :(得分:25)
SVN执行此操作的方法实际上是让SVN重命名文件(svn move
或使用TortoiseSVN的“重命名”)。但是,如果你绝对必须有一些外部工具来执行重命名操作,你可以 使用TortoiseSVN来修复移动操作 。以下内容将告诉SVN新文件实际上是重命名的旧文件:
注意:我正在从内存中输入此内容。它可能不完全正确。并且可能还有其他方法可以执行此操作(例如在资源管理器中标记文件)。
如果你已经丢失了一个错过它的文件的历史记录,你可以复活旧文件(你通过svn copy
将旧版本的版本放到旧版本中来执行此操作),合并新文件的历史记录进入它,然后删除新文件,并将旧文件svn move
改为新文件的名称。
答案 1 :(得分:2)
您可以安装(免费)visual studio加载项AnkhSVN。这将跟踪您的文件重命名,并且您不会丢失subversion中的历史记录。
subversion客户端跟踪文件重命名。如果在不使用subversion客户端的情况下重命名文件(使用Windows资源管理器或Visual Studio解决方案资源管理器而不是TortoiseSVN或AnkhSVN),则subversion将无法识别重命名操作(仅删除和添加操作)。
BTW:使用AnkhSVN可以为您提供一些其他优势,例如直接在解决方案资源管理器中显示文件的颠覆状态。
另外,还有VisualSVN,与AnkhSVN相当,但是商业化。
答案 2 :(得分:0)
查看日志时,Tortoise默认为复制停止。
如果您在日志查看器中取消选中该框,则您将能够看到文件/目录的完整历史记录。