2012-02-14 129 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 }) 

否則後續的添加將會失敗,因爲本地文件不再可用,並且不能再添加。