Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Clone repository and "checkout" to "tags/<my_tag>" #1157

Answered by Byron
conFusl asked this question in Q&A
Discussion options

More a general Q/A than an issue, but I'm struggling with this topic.

I clone a repository using Repo.clone_from(). Afterwards, I simply want to switch to a specified tag within the repository, similar to git checkout tags/<my_tag>.

I found the following solution, but it resets HEAD of my master branch, which is not what I want:

 logging.info("Cloning repo... " + name)
 repo = Repo.clone_from(url, path)
 repo.head.reference = repo.tags[tag].commit

Is it possible to perform something like a git checkout tags/<my_tag> where I just switch to the current tag, but am able to switch also back to the current / latest commit on the repository?

You must be logged in to vote

That's quite alright, the issue was tagged accordingly. Thanks.

That's a great finding! I did do some searching to come up with the following.

  • detach the HEAD to point to the tag: repo.head.set_reference(repo.tags[tag].commit
  • reset the working tree to the current commit, but... it seems wonky to do it like this especially since there is repo.git.checkout(tag) which does exactly what you want.

I hope this answers the question - GitPython is a lot of 'low-level' plumbing, which makes some common operations unintuitive. These are best left to the git porcelain, provided by the git command-line interface.

Even though I am closing the issue, please feel free to keep posting follow-ups.

Replies: 2 comments

Comment options

That's quite alright, the issue was tagged accordingly. Thanks.

That's a great finding! I did do some searching to come up with the following.

  • detach the HEAD to point to the tag: repo.head.set_reference(repo.tags[tag].commit
  • reset the working tree to the current commit, but... it seems wonky to do it like this especially since there is repo.git.checkout(tag) which does exactly what you want.

I hope this answers the question - GitPython is a lot of 'low-level' plumbing, which makes some common operations unintuitive. These are best left to the git porcelain, provided by the git command-line interface.

Even though I am closing the issue, please feel free to keep posting follow-ups.

You must be logged in to vote
0 replies
Answer selected by Byron
Comment options

Thanks a lot for the reply.
I was struggling to follow the API description - and where I have which possibilities, e.g. repo, git, head, tags[]...

Your solution does exactly what I expected, and I was pretty sure that there is a possibility :-) Thanks!

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants
Converted from issue

This discussion was converted from issue #1026 on February 26, 2021 11:18.

AltStyle によって変換されたページ (->オリジナル) /