如何获取通过ListReferences检索的远程引用

时间:2014-08-06 10:19:40

标签: libgit2sharp

我正在努力实现这一目标:

1)如果分支名称包含pr /,我使用此代码查找引用:

var remoteReferences = repository.Network.ListReferences(repositoryUrl);
foreach (var remoteRef in remoteReferences)
{
    if (string.Equals(remoteRef.CanonicalName, targetBranchName))
    {
        return remoteRef;
    }
}

2)然后我试着把它变成头脑:

repository.Refs.UpdateTarget(repository.Refs.Head, newHead);

但是,它不起作用:

  

附加信息:未找到参考'refs / pull / 30 / head'

我尝试手动将远程引用添加到repository.Refs列表,但这似乎不起作用。

如何让当前头指向远程参考?

1 个答案:

答案 0 :(得分:2)

ListReferences为您提供了远程存储库中显示的引用列表。它们不会下载或插入本地命名空间。

UpdateTarget()(与99%的Git操作一样)使用其本地出现的名称处理本地引用。您在本地没有refs/pull/30/head引用,因此无法切换到该分支。

那就是说,即使你确实有这样的引用,你也不会(不应该)执行UpdateTarget(),因为它不是分支,因此不能将分支切换到它。

为了下载该引用,您需要执行提取,可能指定用于了解该引用的本地名称。将这些PR引用存储在它们所属的远程命名空间下是很常见的,但由于您没有配置远程配置但只有URL,您可能希望将该引用存储在FETCH_HEAD中,方法是将目标保留为空或像这样指定一些临时命名空间

repository.Network.Fetch(repositoryUrl, new[] {
    "refs/pull/30/head:refs/heads/scratch/30/head"
});
repository.Refs.UpdateTarget("HEAD", "refs/heads/scratch/30/head");