2009-12-07 73 views
2

我們使用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

+1

關於示例代碼的一些註釋:*不要拋出SharpSvn.SvnException。 *而不是「throw ex;」,使用「throw」,這樣堆棧跟蹤就被保留了,否則它就是在「throw ex」語句中產生的。 – 2009-12-07 18:11:55

回答

2

檢查出的文件不能直接使用在Subversion中受支持。你可以做什麼,以及在Subversion/SharpSvn 1.6中仍然有效的是:

  • 簽出深度=空的目錄。這會創建一個沒有文件的工作副本。
  • SVN更新--set深入=文件FILE1.TXT

這段示例代碼簽出一個空的工作副本,並獲取FILE1.TXT和FILE2.TXT。如果您稍後獲取file3.txt,則所有3個文件都在條目中,並且您可以對它們執行所有Subversion命令。

using(SvnClient client = new SvnClient()) 
{ 
    SvnCheckOutArgs coArgs = new SvnCheckOutArgs(); 
    coArgs.Depth = SvnDepth.Empty; 

    client.CheckOut(new Uri("http://server/repos/directory"), targetDir, coArgs); 


    SvnUpdateArgs updateArgs = new SvnUpdateArgs(); 
    updateArgs.Depth = SvnDepth.Files; 

    client.Update(Path.Combine(targetDir, new string[] {"file1.txt", "file2.txt"}), updateArgs); 
}