如何使用libgit2sharp拉出所有新标签

时间:2015-01-22 14:42:42

标签: c# libgit2 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)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Stangely,我在最新官方git documentation 中找不到任何--tags选项。

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

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

更新

LibGit2Sharp vNext分支的当前提示不会受到此代码的影响。但是,正如您提出的 issue 所示,版本v0.20.x确实会抛出。

v0.21 将解决此问题。