我正在尝试如何下载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>