如何使用 libgit2sharp 提取所有新标签

How to pull all new tags using libgit2sharp

我想用libgit2sharp来实现git pull --tags。 如果我尝试像这样拉:

repo.Network.Pull(new Signature("name", "my@email.com", new DateTimeOffset()), new PullOptions());

然后我得到了新的提交但没有指向这些提交的新标签。 我尝试使用 PullOptions 来修改这样的行为:

var sig = new Signature("name", "my@email.com", new DateTimeOffset());
var opts = new PullOptions{ FetchOptions = new FetchOptions {TagFetchMode = TagFetchMode.All} };
repo.Network.Pull(sig, opts);

这将引发以下异常:

LibGit2Sharp.LibGit2SharpException: ref 'refs/remotes/origin/master' doesn't match the destination
  at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
  at LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result)
  at LibGit2Sharp.Core.Proxy.git_remote_fetch(RemoteSafeHandle remote, Signature signature, String logMessage)
  at LibGit2Sharp.Network.DoFetch(RemoteSafeHandle remoteHandle, FetchOptions options, Signature signature, String logMessage)
  at LibGit2Sharp.Network.Fetch(Remote remote, FetchOptions options, Signature signature, String logMessage)
  at LibGit2Sharp.Network.Pull(Signature merger, PullOptions options)

有什么想法吗?

很遗憾,我在最新的官方gitdocumentation.

中找不到任何--tags选项

但是,在 LibGit2Sharp 中,您可以使用以下代码(或其他 .Fetch() 重载之一)执行等效的 git fetch --all

repo.Network.Fetch(remote, new FetchOptions { TagFetchMode = TagFetchMode.All });

更新

LibGit2Sharp vNext 分支的当前提示并不畏惧此代码。但是,正如您提出的 issue 中所见,版本 v0.20.x 确实会抛出。

v0.21 将解决此问题。