使用 Git 下载特定标签

我试图弄清楚如何下载 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 存档。

  1. 列表标签:

    git tag
    
    0.0.1
    0.1.0
  2. 导出标签:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
  3. 笔记:

    • 您不需要指定格式。它会被输出文件名拾取。
    • 指定前缀将使您的代码导出到目录(如果包含尾部斜杠)。

使用--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

如果我想重新整理我的所有工作, 包括第一次更改