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
是真正的答案。
=
关于标签的单独说明......当我开始新事物时,我通常在 git init 之后标记空存储库,因为
git rebase -i XXXXX
需要提交,问题就出现了“你如何重新调整包含你的第一个软件更改的更改?” 所以当我开始工作时
git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY
即在我第一次真正更改之前创建一个提交,然后再使用
git rebase -i EMPTY
如果我想重新调整我所有的工作,包括第一次更改。