-
-
Notifications
You must be signed in to change notification settings - Fork 954
-
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?
Beta Was this translation helpful? Give feedback.
All reactions
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
-
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.
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 1
-
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!
Beta Was this translation helpful? Give feedback.