2012-02-14 77 views
0

我使用SharpSVN做一个“提交”后一个文件在我的本地副本改名做Svn.Delete(Src) -> Svn.Add(Dst)SharpSvn本地文件重命名提交

代替。
我想用不同的方法来保持跟踪我的文件

的修订信息的重命名功能Server-Side从旧的目标使用SVN移动信息,
到新的目标。 RemoteMove()功能。

如何复制Local-Side中的“svn-infos”?

我试过在我的本地文件上做cl.Move(src,dst)
但我收到消息说找不到源文件。

这里是我的代码:

private string SvnRepository = "http://svnserver/svn/repo/trunk/"; 

public void Start() { 
    System.IO.File.Move("c:\\LocalSvn\\1.txt", "c:\\LocalSvn\\2.txt"); 
    SvnRename("c:\\LocalSvn\\1.txt", "c:\\LocalSvn\\2.txt"); 
} 
private Uri RelativePath(string sFullPath) { 
    return new Uri(SvnRepository + sFullPath.Replace(Path, "").Replace('\\', '/').Substring(1)); 
} 
public void SvnRename(string sPath, string sOldPath) { 
    using (SvnClient cl = new SvnClient()) { 
     Uri UriFrom = RelativePath(sOldPath); 
     Uri UriTo = RelativePath(sPath);     
     cl.RemoteMove(UriFrom,UriTo 
      , new SvnMoveArgs { LogMessage = "Rename From:" + sOldPath + " To:" 
      + sPath }); 
     //Local 
    } 
} 

回答

0

我刚刚发现, cl.Delete()cl.Add() 保持文件 的历史,所以我不需要的cl.RemoteMove(),以帮助我保持对文件的跟踪!

1

SvnClient.Move()应该只为用例的工作。您确定确切的磁盘盒是用于调用Move()

Subversion区分大小写。当你不确定时,SvnTools.GetNormalizedFullPath()SvnTools.GetTruePath()可能会有所帮助。

1

使用当心:

cl.Delete(file) 
cl.Add(file) 

它可能不只是工作开箱。

file = "asdf" 

到:举例来说,如果一个文件是从改名

file = "Asdf" 

你必须保持本地文件:

cl.Delete(file, new new SvnDeleteArgs() { KeepLocal = true }) 

否则后续的添加将会失败,因为本地文件不再可用,并且不能再添加。