简体   繁体   English

有没有一种方法可以使用libgit2sharp从远程git存储库中获取特定标签?

[英]Is there a way to fetch a specific tag from a remote git repository using libgit2sharp ?

I set up a remote called 'origin' and clone the remote into the local directory with checkout set to false so I can fetch the remote tags. 我设置了一个名为“ origin”的远程服务器,并将该远程服务器克隆到本地目录,并将checkout设置为false,以便获取远程标签。 I can list the remote tags but I can't find any way to fetch the contents. 我可以列出远程标签,但是找不到任何获取内容的方法。

If I call clone with checkout set to true, I get the HEAD which is great but I'd like to be able to roll back to a specific tagged version and can't see how. 如果我在checkout设置为true的情况下调用clone,我将获得HEAD,但是我希望能够回滚到特定的标记版本,并且看不到它。

You can checkout any arbitrary commit, including a tag (for instance: ' lw '): 您可以签出任何任意提交,包括标签(例如:' lw '):

string commitPointer = refs/tags/lw;
var commit = repo.Lookup<Commit>(commitPointer);
Branch detachedHead = repo.Checkout(commitPointer);

You will be in a detached head though: 但是,您将陷入困境:

Assert.Equal("(no branch)", detachedHead.CanonicalName);
Assert.False(master.IsCurrentRepositoryHead);
Assert.True(repo.Info.IsHeadDetached);

But that HEAD does reference your tag: 但是那个HEAD确实引用了您的标签:

Assert.True(detachedHead.IsCurrentRepositoryHead);
Assert.Equal(repo.Head, detachedHead);
Assert.Equal(commit.Sha, detachedHead.Tip.Sha);
Assert.True(repo.Head.IsCurrentRepositoryHead);
Assert.False(repo.Index.RetrieveStatus().IsDirty);

Assert.False(detachedHead.IsRemote);
Assert.Equal(detachedHead.Name, detachedHead.CanonicalName);

See more at " LibGit2Sharp.Tests/CheckoutFixture.cs#CanCheckoutAnArbitraryCommit() " 在“ LibGit2Sharp.Tests/CheckoutFixture.cs#CanCheckoutAnArbitraryCommit() ”中查看更多内容

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM