2014-02-13 61 views
2

我到inital结帐前在本地机器上的目录结构如下:SharpSVN覆盖现有文件和文件夹

base_dir/somefolder/someotherfolder/file.txt 

结帐后,我想以下几点:

base_dir/somefolder/someotherfolder/file.txt 
base_dir/somefolder/checked_out_folder/new_file.txt 

所以基本上结账将新文件添加到已存在的目录中。然而,我无法与SharpSvn合作。检出时,它会下载所有不在本地存在的文件,不会触及本地已存在的文件或文件夹。

TortoiseSvn似乎能够做到这一点。我读here,它应该以某种方式工作,但像问人指出,将选项AllowObstructions设置为true什么都不做。

我结账代码(我使用SharpSVN 1.7):

using (SvnClient client = new SvnClient()) { 
    client.Progress += new EventHandler<SvnProgressEventArgs>(cl_Progress); 
    SvnCheckOutArgs sco = new SvnCheckOutArgs(); 
    sco.Depth = SvnDepth.Infinity; 
    sco.AllowObstructions = true; 
    client.CheckOut(from, to, out result); 
} 

我不知道该怎么办,就SharpSvn的文档是非常薄的。我希望这里有人能够帮助我。

回答

1

即使使用.AllowObstructions,仍然有可能发生冲突。

E.g.通过AllowObstructions,已经存在的本地文件保留为新文件的修改版本。但是如果你在它的位置添加一个目录,那么你会遇到树冲突。

(我真的建议不如,使得它容易犯在另一个文件中的新文件没有注意到你不小心这样做是使用.AllowObstructions)还有比在少数情况下,你可以得到更多的障碍或跳过,因此您应该真正查看通知(客户端或args对象上的.Notify事件)或更新后的状态。

即使签出到一个空目录(或不存在的位置)也可能导致冲突...例如,在svn:externals定义存在问题的情况下。

+0

感谢您的回复! '.Resolve'函数似乎是一条路。我通过'.Notify'事件检查,确实发生树冲突。我尝试过'client.Resolve(to,SvnAccept.Merged);',但没有看到任何行为改变。我的方式是否正确? – Stuffy

+0

如果您使用的是1.7版,只能将树冲突标记为已解决,但这不会更改您的工作副本,而不会更改冲突状态。它确实取决于树冲突你应该/可以做什么,但在很多情况下.Revert()可能比.Resolve更好。 –

+1

是的! '.Revert'做了诡计。感谢您指点我正确的方向。 – Stuffy