我們使用SharpSVN 1.5 dll作爲源控制功能。 我們的結算和簽入工作原理follws將SharpSVN 1.5 dll替換爲SharpSVN 1.6的問題dll
假設我要籤一個文件夾名稱TEST其包含3個文件說FILE1.TXT,FILE2.TXT,file3.txt
第1步: - 結帳FILE1.TXT從SVN倉庫
步驟2: - 從SVN倉庫結帳FILE2.TXT
第3步: - 從SVN倉庫
結帳file3.txt期間的.svn文件夾在我們的工作文件夾中創建FILE1.TXT檢出操作。該.svn文件夾包含一個名爲條目的文件。該文件包含svn存儲庫和結帳文件信息(我們可以通過記事本查看它)。當發生file2.txt結帳操作時(簽出到同一工作文件夾)沒有發生新的.svn文件夾創建。 Sharpsvn使用現有的.svn文件(前一個文件簽出.svn文件夾)並將file2.txt信息附加到條目文件中。同樣的事情發生時,簽出file3.txt到同一個工作文件夾。
在簽入操作期間首先檢入file1.txt,然後file2然後file3。 Svn使用單個.svn文件夾(在工作文件夾中)檢查所有這些文件。在file1.txt檢入時,條目文件包含其信息,因此該文件位於svn版本控制下,並且可以成功檢入。類似於file2。 txt和file3.txt
現在我們正在嘗試使用SharpSVN 1.6 dll,但在結帳和簽入操作時遇到了一些問題。
在file1.txt結帳期間創建.svn文件夾,並且條目文件包含file1.txt info.During file2.txt結帳時,現有的.svn foder被刪除,並且新的.svn文件夾被創建。所有條目僅包含file2.txt info不是file1.txt info.When我試圖簽入時,我從svn簽出的最後一個文件只被簽入到svn.This是因爲.svn文件夾中的條目文件僅包含上次簽出的文件信息。
我需要讓所有的文件信息到項目文件中使用sharpsvn 1.6 DLL
我的代碼片段如下
public string[] CheckOut(string pSCPath, string pComment, string pLocalPath, int pRevisionNum)// Checks out a file from svn
{
string[] strCheckoutDetails = new string[2];
Uri uriSCPath = new Uri(pSCPath);
SvnCheckOutArgs objChkoutargs = new SvnCheckOutArgs();
objChkoutargs.Revision = pRevisionNum;
SvnInfoEventArgs info;
try
{
objChkoutargs.Depth = SvnDepth.Empty;
string strSingleFiletoCheckout = uriSCPath.ToString();
string strFolderNameofSingleFileSelected = strSingleFiletoCheckout.Remove(strSingleFiletoCheckout.LastIndexOf('/'));
Uri UriSingleFileCheckout = new Uri(strFolderNameofSingleFileSelected);
_objSVNClient.CheckOut(uriSingleFileCheckout, pLocalPath,objChkoutargs); //empty working folder
SvnTarget target = new Uri(strSingleFiletoCheckout);
string strFileNameonlyfromUri = strSingleFiletoCheckout.Substring(strSingleFiletoCheckout.LastIndexOf("/") + 1);
if (!copyFiletoWorkingCopy(pLocalPath, strFileNameonlyfromUri, _objSVNClient)) //make versioned file available to the current working copy - Biju
{
pLocalPath = "";
throw new SharpSvn.SvnException("Checkout Exception");
}
_objSVNClient.GetInfo(uriSCPath, out info);
strCheckoutDetails[0] = info.LastChangeRevision.ToString();
}
catch (Exception ex)
{
pLocalPath = "";
throw ex;
}
strCheckoutDetails[1] = pLocalPath;
return strCheckoutDetails;
}
感謝
Reji
關於示例代碼的一些註釋:*不要拋出SharpSvn.SvnException。 *而不是「throw ex;」,使用「throw」,這樣堆棧跟蹤就被保留了,否則它就是在「throw ex」語句中產生的。 – 2009-12-07 18:11:55