2

我们将 SharpSVN 1.5 dll 用于我们的源代码控制功能。我们的结帐和签入工作如下

假设我想检查一个文件夹名称 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 签出操作发生时(签出到同一个工作文件夹),没有发生新的 .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 信息。在 file2.txt 签出期间,删除现有的 .svn 文件夹并创建新的 .svn 文件夹。因此条目仅包含 file2.txt 信息而不是 file1。 txt 信息。当我尝试签入时,我从 svn 签出的最后一个文件仅签入到 svn。这是因为 .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;
}

谢谢

瑞吉

4

1 回答 1

2

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

  • 签出 depth=empty 的目录。这将创建一个内部没有文件的工作副本。
  • 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);
}
于 2009-12-07T20:03:32.427 回答