我使用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
}
}
答案 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()来帮助我跟踪文件!