我正在尝试如何下载Git存储库的特定标签,它比当前版本落后一个版本。
我看到git网页上有一个前一个版本的标记,对象名是长十六进制数。
但根据网站的说法,版本名为“标记版本1.1.5”。
我尝试了这样的命令(名称已更改):
git clone http://git.abc.net/git/abc.git my_abc
我确实得到了一些东西——一个目录,一堆子目录等等。
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我如何下载该特定版本?
我正在尝试如何下载Git存储库的特定标签,它比当前版本落后一个版本。
我看到git网页上有一个前一个版本的标记,对象名是长十六进制数。
但根据网站的说法,版本名为“标记版本1.1.5”。
我尝试了这样的命令(名称已更改):
git clone http://git.abc.net/git/abc.git my_abc
我确实得到了一些东西——一个目录,一堆子目录等等。
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我如何下载该特定版本?
当前回答
try:
git clone -b <name_of_the_tag> <repository_url> <destination>
其他回答
使用--singlebranch开关(从Git 1.7.10开始可用)。语法为:
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
好处:Git将只接收对象和(需要)解析指定分支/标记的增量,同时检出完全相同数量的文件!根据源存储库的不同,这将为您节省大量磁盘空间。(此外,这会更快。)
try:
git clone -b <name_of_the_tag> <repository_url> <destination>
git clone --branch my_abc http://git.abc.net/git/abc.git
将克隆回购,并将您留在您感兴趣的标签上。
git克隆状态1.8.0的文档。
--分支还可以获取标记,并在生成的存储库中的提交时分离HEAD。
签出标记
如果您想查看标记指向的文件版本,可以执行git签出,尽管这会使存储库处于“分离的HEAD”状态,这会产生一些不良副作用:
$ git checkout 2.0.0
Note: checking out '2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image
在“分离的HEAD”状态下,如果您进行了更改,然后创建了一个提交,那么标记将保持不变,但是您的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希。因此,如果您需要进行更改,比如说您正在修复旧版本上的错误,您通常需要创建一个分支:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
如果您这样做并提交,您的version2分支将与v2.0.0标记略有不同,因为它将随着您的新更改而前进,因此请务必小心。
根据彼得·约翰逊的回答,我为自己创建了一个很好的别名:
alias gcolt="git checkout $(git tag | sort -V | tail -1)"
又名“git checkout最新标签”。
这依赖于GNU版本的sort,它可以恰当地处理lOranger指出的情况:
v1.0.1
...
v1.0.9
v1.0.10
如果您使用的是mac,请brew安装coreutils,然后调用gsort。