我试图弄清楚如何下载 Git 存储库的特定标签 - 这是当前版本之后的一个版本。
我看到 git 网页上有一个用于先前版本的标签,对象名称的长度为十六进制数。
但是该站点的版本名称是 “ Tagged release 1.1.5
”。
我尝试了这样的命令(更改了名称):
git clone http://git.abc.net/git/abc.git my_abc
我确实得到了一些东西 - 目录,一堆子目录等。
如果是整个存储库,我如何获得要查找的版本?如果没有,如何下载该特定版本?
$ git clone
将为您提供整个存储库。
克隆之后,可以列出带有$ git tag -l
,然后签出特定的标签:
$ git checkout tags/<tag_name>
更好的是,签出并创建一个分支(否则,您将位于以标记的修订版号命名的分支上):
$ git checkout tags/<tag_name> -b <branch_name>
git clone --branch my_abc http://git.abc.net/git/abc.git
将克隆存储库并使您留在您感兴趣的标签上。
有关git clone状态 1.8.0 的文档。
--branch 还可以获取标签,并在结果存储库中的提交时分离 HEAD。
为了仅签出给定的部署标签,我使用例如:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
如果人们只对最新代码感兴趣,而不对完整的存储库感兴趣,这似乎是从远程存储库中检出代码的最快方法。这样,它类似于 “svn co” 命令。
注意:根据Git 手册 ,默认情况下,传递--depth
标志意味着--single-branch
。
- 深度
创建一个浅表克隆,其历史记录被截断为指定的提交数。表示 --single-branch,除非给出 --no-single-branch 来获取所有分支的尖端附近的历史记录。如果要浅层克隆子模块,则还要传递 --shallow-submodules。
我不是 git 专家,但是我认为这应该有效:
git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc
要么
git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc
第二个变种基于标签建立一个新的分支,这使您可以避免 “分离的 HEAD”。 (git-checkout 手册)
每个 git 仓库都包含整个修订历史记录,因此克隆仓库就可以访问最新的提交,以及之前的所有内容,包括所需的标签。
您可以使用 git archive 下载给定标签或提交 ID 的 tar 球:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
您还可以导出标签的 zip 存档。
列表标签:
git tag
0.0.1
0.1.0
导出标签:
git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
笔记:
使用--single-branch
开关 (自 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 仅接收指定的分支 / 标签的对象,并且(需要)解析增量 - 同时签出完全相同数量的文件!根据源存储库,这将节省大量磁盘空间。 (此外,它会更快。)
首先获取该特定遥控器中的所有标签
git fetch <remote> 'refs/tags/*:refs/tags/*'
或只是简单地输入
git fetch <remote>
然后检查可用标签
git tag -l
然后使用以下命令切换到该特定标签
git checkout tags/<tag_name>
希望这对您有帮助!
如果您的标签可以使用 linux sort
命令进行sort
,请使用以下命令:
git tag | sort -n | tail -1
例如。如果git tag
返回:
v1.0.1
v1.0.2
v1.0.5
v1.0.4
git tag | sort -n | tail -1
将输出:
v1.0.5
git tag | sort -n | tail -2 | head -1
将输出:
v1.0.4
(因为您要求输入最近的标签)
要检出标签,首先克隆存储库,然后键入:
git checkout v1.0.4
.. 或您需要的任何标签。
我检查了git checkout 文档 ,发现了一件有趣的事情:
git checkout -b
,其中 是开始新分支的提交的名称;默认为 HEAD
因此,我们可以将标签名称(因为标签不过是提交的名称)提及为:
>> git checkout -b 1.0.2_branch 1.0.2
以后,修改一些文件
>> git push - 标签
PS:在 Git 中,您不能直接更新标签(因为标签只是提交的标签),您需要签出与分支相同的标签,然后提交给它,然后创建一个单独的标签。
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
您在哪里看到冒号,即 remote-name:local-name,此处为标记名。这将在不影响工作树等的情况下运行。它似乎只是将内容从远程复制到本地计算机,因此您拥有自己的副本。
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
如果我想重新整理我的所有工作, 包括第一次更改 。