【问题标题】:Check if folder is versioned in Subversion using SharpSvn使用 SharpSvn 检查文件夹是否在 Subversion 中进行了版本控制
【发布时间】:2017-12-01 20:21:07
【问题描述】:

我正在使用 SharpSvn 库来访问 Subversion。我需要检查特定文件夹是否是 subversion 存储库的一部分。

经过一番谷歌搜索,我找到了以下代码 -

SvnClient client = new SvnClient();
Collection<SvnStatusEventArgs> args2;
bool result1 = client.GetStatus(@"D:\SVNMapping\demo\trunk\NewFolder", new SvnStatusArgs(), out args2);

result1 为真,但 args2[0].Versioned 值返回为假。但是,上面的文件夹是版本化的,我可以根据图标确认它-

我不确定在此 API 使用中缺少什么,或者 API 本身是否不符合我的要求。

非常感谢任何帮助。

【问题讨论】:

  • 谁能解决我的问题?

标签: svn sharpsvn


【解决方案1】:

如果你只想检查一个目录是否受版本控制,使用svn info会更容易。在 SharpSvn 中,您可以执行此操作,例如像这样:

/// <summary>
    /// Checks whether the specified path is under version control or not.
    /// </summary>
    /// <remarks>
    /// Internally, the "svn info" command is used (no network access required).
    /// </remarks>
    /// <param name="path">The path to check.</param>
    /// <returns>True, if the path is under version control, else false.</returns>
    private bool CheckIfPathIsUnderVersionControl(string path)
    {
        using (SvnClient svnClient = new SvnClient())
        {
            // use ThrowOnError = false to avoid exception in case the path does
            // not point to a versioned item
            SvnInfoArgs svnInfoArgs = new SvnInfoArgs() { ThrowOnError = false };
            Collection<SvnInfoEventArgs> svnInfo;
            return svnClient.GetInfo(SvnTarget.FromString(path), svnInfoArgs, out svnInfo);
        }
    }

如果您想知道项目在哪个存储库中进行版本控制,那么您也可以从 SvnInfoArgs 返回此信息。

如果你真的想使用svn status,那么你应该看看this问题,因为它解释了为什么必须在SvnStatusArgs选项和here中设置RetrieveAllEntries选项。

【讨论】:

  • 感谢royalTS 提供这两个链接。两者都为我工作。
【解决方案2】:

您也可以使用GetUriFromWorkingCopy() 方法

if (client.GetUriFromWorkingCopy(path) != null)
{ //path under version control
}
else { //path not under version control }

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 2011-08-19
    • 2011-09-10
    • 1970-01-01
    • 2022-12-22
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多