将SharpSVN 1.5 dll替换为SharpSVN 1.6 dll的问题

时间:2009-12-07 06:13:18

标签: sharpsvn

我们使用SharpSVN 1.5 dll作为源控制功能。 我们的结帐和CheckIn作为follws工作

假设我要签出文件夹名称TEST,其中包含3个文件,例如file1.txt,file2.txt,file3.txt

步骤1: - 从SVN存储库中检出file1.txt
第2步: - 从SVN存储库中检出file2.txt
第3步: - 从SVN存储库中检出file3.txt

在file1.txt结帐操作期间,在我们的工作文件夹中创建.svn文件夹。此.svn文件夹包含一个名为条目的文件。此文件包含svn存储库和结帐文件信息(我们可以通过记事本看到它打开)。当file2.txt结帐操作发生时(Checkout到同一个工作文件夹),没有新的.svn文件夹创建。 Sharpsvn使用现有的.svn fiolder(以前的文件checkout .svn文件夹)并将file2.txt信息附加到条目文件中。结帐file3.txt到同一个工作文件夹时也发生了同样的事情。

在签入操作期间,首先检查file1.txt然后是file2然后是file3。 Svn使用单个.svn文件夹(在工作文件夹中)来检查所有这些文件。在file1.txt检入期间,条目文件包含其信息,因此该文件属于svn版本控制,并且可以成功检查。类似方式file2。 txt和file3.txt

现在我们正在尝试使用SharpSVN 1.6 dll,但在结帐和签入操作方面遇到了一些问题。

在file1.txt checkout期间创建.svn文件夹,并且条目文件包含file1.txt信息。在file2.txt checkout期间,删除现有的.svn foder并创建新的.svn文件夹。所以条目仅包含file2.txt信息不是file1.txt信息。当我试图检查时,我从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 个答案:

答案 0 :(得分:2)

Subversion不支持直接签出文件。您可以做什么,以及在Subversion / SharpSvn 1.6中仍然有效的是:

  • 签出深度=空的目录。这将创建一个没有文件的工作副本。
  • svn update --set-depth = files 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);
}