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

时间:2017-07-20 13:26:20

标签: svn sharpsvn

我正在使用SharpSvn库来访问Subversion。我需要检查特定文件夹是否是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] .Versioned值返回false。但是,上面的文件夹是版本化的,我可以根据图标确认它 -

enter image description here

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您只想检查目录是否受版本控制,则使用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个问题,因为它解释了为什么必须在RetrieveAllEntries选项中设置选项SvnStatusArgs并且here

答案 1 :(得分:0)

您也可以使用GetUriFromWorkingCopy()方法

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