我正在尝试如何下载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>
其他回答
git clone --branch my_abc http://git.abc.net/git/abc.git
将克隆回购,并将您留在您感兴趣的标签上。
git克隆状态1.8.0的文档。
--分支还可以获取标记,并在生成的存储库中的提交时分离HEAD。
我这样做了
git checkout tags/20210511 -b 20210511-release
根据彼得·约翰逊的回答,我为自己创建了一个很好的别名:
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 fetch <gitserver> <remotetag>:<localtag>
===================================
我就是这么做的。首先,我确保我知道标签名称的拼写。
git ls-remote --tags gitserver; : or origin, whatever your remote is called
这给了我一个git服务器上可供选择的标签列表。最初的海报已经知道他的标签的名字,所以这一步不是每个人都必须做的。输出看起来像这样,但实际列表更长。
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110
我选择了我想要的标签,取了下来,没有其他东西。
git fetch gitserver Fix_110
然后我在我的本地机器上标记了这个,给我的标签起了相同的名字。
git tag Fix_110 FETCH_HEAD
我不想像其他人建议的那样克隆远程存储库,因为我正在做的项目很大,我想在一个干净的环境中开发。我觉得这比建议克隆整个存储库的解决方案更接近于最初的问题“我正在尝试找出如何下载特定标签”。我不明白为什么任何人想要查看DOS 0.1源代码(例如),就必须拥有Windows NT和Windows 8.1源代码的副本。
我也不想像其他人建议的那样使用CHECKOUT。我签了一家分行,不想影响这一点。我的意图是获取我想要的软件,这样我就可以挑选一些东西并将其添加到我的开发中。
可能有一种方法可以获取标记本身,而不仅仅是标记的提交的副本。我不得不亲自给取回的承诺贴上标签。编辑:是的,我现在找到了。
git fetch gitserver Fix_110:Fix_110
在您看到冒号的地方,是远程名称:本地名称,这里是标记名称。这在运行时不会打乱工作树等。它似乎只是将内容从远程复制到本地计算机,这样您就有了自己的副本。
git fetch gitserver --dry-run Fix_110:Fix_110
添加--dry-run选项后,如果您想验证该命令的功能,您可以查看该命令的作用。所以我想一个简单的
git fetch gitserver remotetag:localtag
才是真正的答案。
=
关于标签的单独说明。。。当我开始新的东西时,我通常在gitinit之后标记空的存储库,因为
git rebase -i XXXXX
因此,当我开始工作时,我会这样做
git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY
即在我第一次真正更改之前创建提交,然后再使用
git rebase -i EMPTY
如果我想重新调整我的所有工作,包括第一次更改。
我经常使用一个
git clone --branch <tag_name> <repo_url>