我正在努力实现这一目标:
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列表,但这似乎不起作用。
如何让当前头指向远程参考?
答案 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");