Download a specific tag with Git
I'm trying to figure out how I can download a particular tag of a Git repository - it's one version behind the current version.
I saw there was a tag for the previous version on the git web page, with object name of something long hex number.
But the version name is "
Tagged release 1.1.5" according the site.
I tried a command like this (with names changed):
git clone http://git.abc.net/git/abc.git my_abc
And I did get something - a directory, a bunch of subdirectories, etc.
If it's the whole repository, how do I get at the version I'm seeking? If not, how do I download that particular version?
$ git clone
will give you the whole repository.
After the clone, you can list the tags with
$ git tag -l and then checkout a specific tag:
$ git checkout tags/<tag_name>
Even better, checkout and create a branch (otherwise you will be on a branch named after the revision number of tag):
$ git checkout tags/<tag_name> -b <branch_name>
Read more... Read less...
git clone --branch my_abc http://git.abc.net/git/abc.git
Will clone the repo and leave you on the tag you are interested in.
Documentation for 1.8.0 of git clone states.
--branch can also take tags and detaches the HEAD at that commit in the resulting repository.
For checking out only a given tag for deployment, I use e.g.:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
This seems to be the fastest way to check out code from a remote repository if one has only interest in the most recent code instead of in a complete repository. In this way, it resembles the 'svn co' command.
Note: Per the Git manual, passing the
--depth flag implies
--single-branch by default.
Create a shallow clone with a history truncated to the specified number of commits. Implies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches. If you want to clone submodules shallowly, also pass --shallow-submodules.
I'm not a git expert, but I think this should work:
git clone http://git.abc.net/git/abc.git cd abc git checkout my_abc
git clone http://git.abc.net/git/abc.git cd abc git checkout -b new_branch my_abc
The second variation establishes a new branch based on the tag, which lets you avoid a 'detached HEAD'. (git-checkout manual)
Every git repo contains the entire revision history, so cloning the repo gives you access to the latest commit, plus everything that came before, including the tag you're looking for.
You can use git archive to download a tar ball for a given tag or commit id:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
You can also export a zip archive of a tag.
git tag 0.0.1 0.1.0
Export a tag:
git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
- You do not need to specify the format. It will be picked up by the output file name.
- Specifying the prefix will make your code export to a directory (if you include a trailing slash).
--single-branch switch (available as of Git 1.7.10). The syntax is:
git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]
git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5
The benefit: Git will receive objects and (need to) resolve deltas for the specified branch/tag only - while checking out the exact same amount of files! Depending on the source repository, this will save you a lot of disk space. (Plus, it'll be much quicker.)