Skip to content

Clone repository and “checkout” to "tags/<my_tag>" #1026

Description

@conFusl

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?

Activity

  1. Byron commented on Jul 6, 2020

    @Byron
    Member

    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.

  2. conFusl commented on Aug 4, 2020

    @conFusl
    Author

    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!

  3. reopened this on Feb 26, 2021
  4. locked and limited conversation to collaborators on Feb 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions