我正在尝试如何下载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
我确实得到了一些东西——一个目录,一堆子目录等等。
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我如何下载该特定版本?
当前回答
使用--singlebranch开关(从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将只接收对象和(需要)解析指定分支/标记的增量,同时检出完全相同数量的文件!根据源存储库的不同,这将为您节省大量磁盘空间。(此外,这会更快。)
其他回答
使用--singlebranch开关(从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 clone
将为您提供整个存储库。
克隆后,您可以使用$git标记-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克隆状态1.8.0的文档。
--分支还可以获取标记,并在生成的存储库中的提交时分离HEAD。
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
如果我想重新调整我的所有工作,包括第一次更改。
您可以使用gitarchive下载给定标记或提交id的tar球:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
您还可以导出标签的zip存档。
列表标记:查看标签0.0.10.1.0导出标记:gitarchive-o/tmp/my-repo-1.0.zip--prefix=my-repo-0.1.0/0.1.0笔记:您不需要指定格式。它将由输出文件名拾取。指定前缀将使代码导出到目录(如果包含尾随斜杠)。