用Git下载一个特定的标签
我想知道如何下载Git仓库的特定标签 – 这是当前版本的一个版本。
我看到在git网页上有一个以前版本的标签,对象名称是很长的hex数字。
但版本名称是“ 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>
更好的办法是签出并创build一个分支(否则你将在一个以标签修订版号命名的分支上):
$ git checkout tags/<tag_name> -b <branch_name>
git clone --branch my_abc http://git.abc.net/git/abc.git
将克隆回购,让你在你感兴趣的标签。
git clone状态的1.8.5.2的文档。
–branch也可以取得标签,并在生成的仓库提交时分离HEAD。
我不是一个混帐专家,但我认为这应该工作:
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
第二个变体build立一个基于标签的新分支,它可以让你避免“分离的头部”。 (git-checkout手册)
每个git仓库都包含整个版本历史logging,因此克隆仓库可以让您访问最新的提交,以及之前发布的所有内容,包括您正在查找的标签。
您可以使用git归档来下载给定标签或提交标识的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
-
笔记:
- 您不需要指定格式。 它将被输出文件名拾取。
- 指定前缀将使您的代码导出到一个目录(如果您包括一个尾部的斜线)。
为了检出一个给定的标签来部署,我使用例如:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
这似乎是检查远程存储库代码的最快方法,如果只关注最近的代码而不是完整的存储库。 这样就像“svn co”命令一样。
使用--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将只接收对象并(需要)只为指定的分支/标签parsing变化量 – 同时检出相同数量的文件! 根据源代码库,这将为您节省大量的磁盘空间。 (另外,它会更快。)
首先获取该特定远程中的所有标签
git fetch <remote> 'refs/tags/*:refs/tags/*'
或者只是简单地input
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
git tag | sort -n | tail -1
会输出:
v1.0.5
git tag | sort -n | tail -2 | head -1
git tag | sort -n | tail -2 | head -1
会输出:
v1.0.4
(因为你要求第二个最近的标签)
检出标签,首先克隆回购,然后键入:
git checkout v1.0.4
..或任何你需要的标签。
我检查了git checkout文档 ,发现了一件有趣的事情:
git checkout -b <new_branch_name> <start_point>,其中<start_point>是启动新分支的提交的名称; 默认为HEAD
所以我们可以提到标签名称(因为标签只是一个提交的名称),例如:
>> git checkout -b 1.0.2_branch 1.0.2
以后,修改一些文件
>> git push –tags
PS:在Git中,你不能直接更新标签(因为标签只是一个提交的标签),你需要签出一个分支,然后提交,然后创build一个单独的标签。
git fetch <gitserver> <remotetag>:<localtag>
===================================
我只是做了这个。 首先,我确定我知道标签名称拼写。
git ls-remote --tags gitserver; : or origin, whatever your remote is called
这给了我一个在我的git服务器上可供select的标签列表。 原来的海报已经知道他的标签的名字,所以这一步并不是每个人都需要的。 输出看起来像这样,虽然真正的名单更长。
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2 f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1 8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109 9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110
我select了我想要的标签,并取而代之,如下所示。
git fetch gitserver Fix_110
然后我在本地机器上贴上了这个标签,给我的标签命名。
git tag Fix_110 FETCH_HEAD
我不想像其他人所build议的那样克隆远程存储库,因为我正在开发的这个项目很大,我想在一个干净的环境中开发。 我觉得这比原来的问题更接近于“我试图弄清楚如何下载特定标签”,而不是build议克隆整个存储库的解决scheme。 我不明白为什么任何人都应该有一个Windows NT和Windows 8.1源代码的副本,如果他们想看看DOS 0.1的源代码(例如)。
我也不想像其他人所build议的那样使用CHECKOUT。 我有一个分支签出,并不想影响。 我的意图是取得我想要的软件,以便我可以挑选一些东西,并将其添加到我的开发中。
可能有一种方法可以获取标签本身,而不仅仅是提交标签的副本。 我必须自己标记提取的提交。 编辑:啊,是的,我现在已经find了。
git fetch gitserver Fix_110:Fix_110
在哪里可以看到冒号,即remote-name:local-name,这里是标签名称。 这运行而不会扰乱工作树等。它似乎只是从远程复制到本地机器的东西,所以你有你自己的副本。
git fetch gitserver --dry-run Fix_110:Fix_110
加上–dry-run选项可以让你看看命令会做什么,如果你想validation你想要的。 所以我想一个简单的
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
即在第一次真正的改变之前创build一个提交,然后再使用
git rebase -i EMPTY
如果我想重新包括我所有的工作, 包括第一次改变 。
根据Peter Johnson的回答,我为自己创造了一个很好的别名:
alias gcolt="git checkout \`git tag | sort -V | tail -1\`"
又名'git checkout latest tag'。
这依赖于GNU版本的sorting,它适当地处理像一个外行人指出的情况:
v1.0.1 ... v1.0.9 v1.0.10
如果你在Mac上, brew install coreutils
,然后调用gsort。
尝试:
git clone -b <name_of_the_tag> <repository_url> <destination>
我这样做是通过github API:
curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\ tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \
检出标签
如果你想查看一个标签指向的文件版本,你可以做一个git checkout,尽pipe这会让你的版本库处于“detached HEAD”状态,但是有一些不好的副作用:
$ git checkout 2.0.0 Note: checking out '2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final $ git checkout 2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... add atlas.json and cover image
在“分离HEAD”状态下,如果进行了更改,然后创build了一个提交,那么标记将保持不变,但是新的提交不属于任何分支,并且除了通过确切的提交哈希之外将不可访问。 因此,如果您需要进行更改(比如说修复旧版本的bug),则通常需要创build一个分支:
$ git checkout -b version2 v2.0.0 Switched to a new branch 'version2'
如果你这样做并提交一个提交,你的版本2的分支会比你的v2.0.0标签稍微有点不同,因为它会随着新的变化而前进,所以要小心。
用-b选项克隆也有帮助:git clone https://git01.codeplex.com/aspnetwebstack.git -b v2.0
以下文章使用上述选项下载asp.net mvc: http : //vijayt.com/Post/Setting-up-aspnet-mvc-for-debugging-in-your-system