SharpSvn本地文件重命名提交

时间:2012-02-14 08:39:02

标签: commit sharpsvn file-rename

我使用SharpSVN来做一个"提交"在我的本地副本中重命名文件后

而不是Svn.Delete(Src) -> Svn.Add(Dst) 我想使用不同的方法来跟踪我的文件的修订信息

重命名功能会移动Server-Side中的信息,
通过使用Svn。RemoteMove()函数从旧目标到新目标。

如何复制" svn-infos"在Local-Side

我已尝试在我的本地文件上执行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
    }
}

3 个答案:

答案 0 :(得分:1)

SvnClient.Move()应该适用于该用例。您确定用于调用Move()的确切磁盘外壳。

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

答案 1 :(得分:1)

谨防使用:

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

它可能无法开箱即用。例如,如果从以下位置重命名了文件:

file = "asdf"

为:

file = "Asdf"

你必须保留本地文件:

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

否则后续添加将失败,因为本地文件不再可用且无法再添加。

答案 2 :(得分:0)

我刚刚发现了这一点 cl.Delete()cl.Add() 保留文件的历史记录 所以我不需要cl.RemoteMove()来帮助我跟踪文件!