Subversion,标记文件被删除或移动后的事实

Aus*_*yde 17 svn

假设我在Subversion仓库中有两个文件:

workingcopy/
  file1.txt
  file2.txt
Run Code Online (Sandbox Code Playgroud)

然后我重命名一个SVN外部:

$ mv file1.txt fileA.txt
Run Code Online (Sandbox Code Playgroud)

现在,SVN将file1.txt标记为缺失,fileA.txt为无版本

$ svn st
!   file1.txt
?   fileA.txt
Run Code Online (Sandbox Code Playgroud)

据SVN所知,我删除file1.txt并创建了一个完全不同的文件fileA.txt,因此它不知道跟踪文件之间的变化.


编辑:这确实有效,我只是不能正确拼写文件名:)

同样,如果删除文件

$ rm file2.txt
$ svn st
!   file2.txt
Run Code Online (Sandbox Code Playgroud)

SVN只知道文件丢失,并尝试将其删除不起作用:

$ svn remove file2.txt
svn: 'file2.txt' does not exist
Run Code Online (Sandbox Code Playgroud)

我知道在Mercurial中,--after无论Mercurial在工作副本中看到什么,您都可以在标记之后将文件标记为移动,复制,删除等.

SVN中有类似的技巧吗?

Raf*_*afe 12

也许您需要更新您的Subversion版本:

$ svn --version
svn, version 1.6.16 (r1073529)

$ rm data.xml

$ svn status
!       data.xml

$ svn rm data.xml
D       data.xml

$ svn status
D       data.xml
Run Code Online (Sandbox Code Playgroud)

同样的事情不能用于重命名,但编写一个执行它的shell脚本会非常容易:

#!/bin/sh

mv $2 $1
svn rename $1 $2
Run Code Online (Sandbox Code Playgroud)

或者只是为了好玩,您可以将以下内容添加到.bashrc或.bash_profile:

svn_mv_after() 
{
        mv $2 $1
        svn mv $1 $2
}

alias svnmva=svn_mv_after
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您使用TortiseSVN,可以从提交屏幕执行此操作.右键单击已删除并添加的文件(同一个文件,只需移动),您将获得修复移动的选项.

http://tortoisesvn.net/repairmoves.html