我正在尝试如何下载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
我确实得到了一些东西——一个目录,一堆子目录等等。
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我如何下载该特定版本?
当前回答
根据彼得·约翰逊的回答,我为自己创建了一个很好的别名:
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。
其他回答
签出标记
如果您想查看标记指向的文件版本,可以执行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标记略有不同,因为它将随着您的新更改而前进,因此请务必小心。
首先获取特定远程中的所有标记
git fetch <remote> 'refs/tags/*:refs/tags/*'
或者只是简单地键入
git fetch <remote>
然后检查可用标签
git tag -l
然后使用以下命令切换到该特定标签
git checkout tags/<tag_name>
希望这对你有所帮助!
根据彼得·约翰逊的回答,我为自己创建了一个很好的别名:
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。
对于仅签出用于部署的给定标记,我使用例如:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
如果您只对最新的代码感兴趣,而不是对完整的存储库感兴趣,那么这似乎是从远程存储库中检出代码的最快方式。以这种方式,它类似于“svn co”命令。
注意:根据Git手册,默认情况下,传递--depth标志意味着--单个分支。
--深度,深度创建一个浅层克隆,其历史记录被截断为指定的提交次数。这意味着——单个分支,除非——没有给定单个分支来获取所有分支尖端附近的历史记录。如果要浅层克隆子模块,也可以通过浅层子模块。
如果可以使用linux sort命令对标记进行排序,请使用以下命令:
git tag | sort -n | tail -1
例如,如果git标记返回:
v1.0.1
v1.0.2
v1.0.5
v1.0.4
gittag|sort-n|tail-1将输出:
v1.0.5
gittag|sort-n|tail-2|head-1将输出:
v1.0.4
(因为您要求第二个最近的标签)
要签出标记,请首先克隆repo,然后键入:
git checkout v1.0.4
..或您需要的任何标签。