2014-02-13 59 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