我正在尝试如何下载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
我确实得到了一些东西——一个目录,一堆子目录等等。
如果它是整个存储库,我如何获得我正在寻找的版本?如果没有,我如何下载该特定版本?
当前回答
try:
git clone -b <name_of_the_tag> <repository_url> <destination>
其他回答
我经常使用一个
git clone --branch <tag_name> <repo_url>
对于仅签出用于部署的给定标记,我使用例如:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
如果您只对最新的代码感兴趣,而不是对完整的存储库感兴趣,那么这似乎是从远程存储库中检出代码的最快方式。以这种方式,它类似于“svn co”命令。
注意:根据Git手册,默认情况下,传递--depth标志意味着--单个分支。
--深度,深度创建一个浅层克隆,其历史记录被截断为指定的提交次数。这意味着——单个分支,除非——没有给定单个分支来获取所有分支尖端附近的历史记录。如果要浅层克隆子模块,也可以通过浅层子模块。
我查看了git结账文档,发现了一件有趣的事情:
git checkout-b<new_branch_name><start_point>,其中<start_point>是提交的名称开始新分支的位置;默认为HEAD
因此,我们可以将标记名(因为标记只是提交的名称)称为:
>>git checkout-b 1.0.2_branch 1.0.2稍后,修改一些文件>>git push--标记
P.S:在Git中,你不能直接更新标签(因为标签只是提交的标签),你需要签出与分支相同的标签,然后提交到它,然后创建一个单独的标签。
$ git clone
将为您提供整个存储库。
克隆后,您可以使用$git标记-l列出标记,然后签出特定标记:
$ git checkout tags/<tag_name>
更好的是,签出并创建一个分支(否则,您将在以标记的修订号命名的分支上):
$ git checkout tags/<tag_name> -b <branch_name>
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
如果我想重新调整我的所有工作,包括第一次更改。