Cleanest way to checkout an earlier tag for read-only purposes in Git

I have a working tree on my local machine, and a remote repository as well. Let’s say I want to quickly build an earlier version of my project at a known tag without disturbing the current state of the working version. My inclination is to checkout a separate tree, which seems to go like in this question:

Download a specific tag with Git

  • Combined command for git tag verification and git checkout?
  • How to cope with “rejected” on git push?
  • Subversion: Check out only those files affected during a specific commit
  • Hudson doesn't checkout using symlinks when using SVN (Subversion)
  • SVN Error E175002
  • How can I build a git tag in TeamCity?
  • With a clone from the remote repository followed by a checkout in there. But the clone does a lot of work and pulls down all the revision state. Is there any lightweight way of saying “grab me the current state of the world at this commit/tag and spray it into this directory?” (Further revision control not necessary– it’s “read only” as far as Git should be concerned.)

    Maybe not– just checking.


  • Is it possible to apply a commit to all branches in git?
  • What is the difference between “Already up-to-date.” and “Current branch master is up to date.”
  • Git: creating a filesystem state of a previous commit
  • How do I get the list of branches not merged into master, ordered by most recent commit?
  • Feature branch statistics for a git workflow
  • Can a pre-commit Git hook zip a directory and add it to the repository?
  • 3 Solutions collect form web for “Cleanest way to checkout an earlier tag for read-only purposes in Git”

    If it’s all local, you can do this:

    mkdir /path/to/test-tree
    cd /path/to/repo
    git read-tree <tag>
    git checkout-index -a --prefix=/path/to/test-tree/  # don't forget the last slash
    # read-tree copies content into the index
    # to restore it:
    git read-tree HEAD

    That’s assuming you don’t care about the other tree having any git information at all. If you want it to, you could use the git-new-workdir script, which basically creates a clone, except populating the .git directory with symlinks back to the original repo, so that it takes no extra disk space. It’s a nice approach – no extra disk space, and you can use one repo for development, one for testing, etc.


    git checkout -b new_branch [previous_tag]

    Sounds like you’re looking for git-export: Do a "git export" (like "svn export")?

    Git Baby is a git and github fan, let's start git clone.