使用 SharpSvn 检查文件夹是否在 Subversion 中进行了版本控制

Check if folder is versioned in Subversion using SharpSvn

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

谷歌搜索后,我找到了以下代码 -

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

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

我不确定我在这个 API 用法中遗漏了什么,或者 API 本身是否不符合我的要求。

非常感谢任何帮助。

如果你只想检查一个目录是否在版本控制下,使用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);
        }
    }

如果您想知道项目在哪个存储库中进行版本控制,那么您也可以 return 来自 SvnInfoArgs 的信息。

如果你真的想使用 svn status 那么你应该看看 this questions since it explains why the option RetrieveAllEntries must be set in the SvnStatusArgs options and here

您也可以使用GetUriFromWorkingCopy()方法

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