git - Git 下载一个特定的标记

  显示原文与译文双语对照的内容

我一直试图弄明白确实要下载特定标记的一个Git存储库- 这是一个版本支持目前的版本。

某事物的对象名称长六角 number,,. 我看到有一个标记为该早期版本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专家,但我认为这应该可以:


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

第二行的第二个变体基于标记建立了一个新分支,它允许你避免一个'分离头'。 ( git-checkout手册)

于配置,每一个git仓库中包含整个版本历史中,因此克隆相关回购使你可以访问最新的提交,再加上你是looking.消息之前的所有事情,包括标记

你可以使用git存档为给定的标记或者提交标识下载一个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. 注释:

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

git clone --branch my_abc http://git.abc.net/git/abc.git

将克隆仓库并将你留在你感兴趣的标记上。

于 1.8.5.2 相关的git clone states,文献工作

--branch也可以在生成的知识库中获取标记并分离头部。

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

 

。或者任何你需要的标记。

从Peter的回答中,我为自己创建了一个漂亮的昵称:


alias gcolt="git checkout `git tag | sort -V | tail -1`"

又名'git checkout 最新标记'。

这依赖于GNU的排序版本,它适当地处理一个lOranger所指出的情况:


v1.0.1
...
v1.0.9
v1.0.10

如果你在 mac,brew install coreutils,然后调用 gsort 。

我是通过 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 ls-remote --tags gitserver

这给了我一个在我的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

我不想像其他人建议的那样克隆远程仓库,因为我正在做的项目很大,我想在一个干净的环境中开发。 我觉得这更接近于原始问题"我想知道如何下载一个特定的标签"而不是建议克隆整个知识库的解决方案。 我不知道为什么任何人都需要有一个 Windows NT 和 Windows 8.1源代码,如果他们想查看 DOS 0.1源代码( 例如) 。

我也不想像其他人那样使用签出。 我已经签出了一个分支,但不想影响它。 我的意图是获取我想要的软件,以便我可以 cherry-pick,并添加到我的开发中。

可能有一种方法来获取标记本身而不仅仅是标记的提交的副本。 我必须自己标记提取的提交。

=

关于标记的单独说明。。 当我开始一些新的东西时,我通常会在 git init之后标记空的仓库,比如


git rebase -i XXXXX 

需要提交,问题就出现了,所以当我开始工作时,我


touch. gitignore
[then add it and commit it, and finally]
git tag EMPTY

i.e 。在第一次真正更改之前创建提交,然后再使用


git rebase -i EMPTY 

如果我想更改变基自己所有工作,包括第一。

...