从远程git存储库中查找最新的git标记

时间:2014-01-29 18:26:30

标签: git github git-tag

我必须从远程git存储库获取最新的 git标记。 我使用以下命令来查找最新的标签

git ls-remote --tags xxxxx@xxxx.xxxx.net:xxxx.git |grep "\."|grep -v -|grep -v {| sort -n -t. -k3 -k4

这给了我以下输出

c8be4313ae8261214acb6d3d41f9ece8d47a4ad5    refs/tags/v0.2.1
9e776cff51a8bb15f0539b852a819723d1e37c69    refs/tags/v0.2.2
ee1f173f4e7da0996af9f7c91e0952bec8c2358b    refs/tags/v0.1.3
5d6777bf2b2e5bae41ae9ab966320c691c1f2ee2    refs/tags/v0.1.4
6d3040673330ed763bc0c1a6e6cd5dbc82392d4f    refs/tags/v0.1.5
4afd29dc48805053be911a85c6da6b195e96e786    refs/tags/v0.1.6
8d5cc76d50b153f836561bb933b1f5ad488748d1    refs/tags/v0.1.7
1c0cdebaed828aaef2897c9240b4440898f70766    refs/tags/v0.1.8
683de590ba8d633c801d2628f4d9de58f9de371a    refs/tags/v0.1.9
925797f07cfc94a3af1f56cdabd856e11b222b78    refs/tags/v0.1.10

但我必须找到最新创建的 v0.2.2 。如何找到最新创建的标签(带有最新创建日期的标签)。还有其他办法吗?

3 个答案:

答案 0 :(得分:8)

您可能需要最新标记可访问,而不是最新标记:

git describe --tags --abbrev=0

无论如何,万一你真的需要创建最后一个标签:

git有两种标签:轻量级和带注释。如果你的标签是轻量级的,那么运气不好,你不能这样做,不会跟踪创建日期。如果您可以访问存储远程存储库的文件系统,那么您可以尝试检查/ refs / tags中文件的时间戳 - 但此信息不一定准确(它只是在此特定存储库中创建标记文件的时间戳)。 / p>

但是,对于带注释的标签,您可以获得创建日期;一旦你得到sha(通过ls-tree或其他方式),运行:

git cat-file -p <sha>

显示标记器,消息和创建日期或简单地:

git show <sha>

另外还显示引用的提交。

在脚本中使用此信息是可行的(由于日期格式,可能不是很简单)。

我打算将你推荐给git internals关于标签的描述,但事实证明,ProGit, Git Basics - Tagging上也描述了所有这些信息。

答案 1 :(得分:1)

假设可以在本地确定,您可以确保您的代码是最新的:

git fetch --tags

然后从命令行运行:

git rev-list --tags --timestamp --no-walk |
    sort -nr |
    head -n1 |
    cut -f 2 -d ' ' |
    xargs git describe --contains

上面带有git rev-list的{​​{1}}命令将放下所有标记的提交,而--tags将确保每一行都以提交的时间戳为前缀。 --timestamp选项告诉--no-walk不要列出任何父提交,因此输出中显示的唯一提交是与标记绑定的提交。 rev-list表示按行和数字的顺序对行进行排序,以便最近时间戳的提交位于顶部。 sort -nr命令允许我们删除标记提交的提交ID,

在我的Python Nose存储库中运行它,我得到了这个:

cut

如果您必须远程执行此操作,那么您实际上无法选择具有最新创建日期的那个。这些信息根本就没有公布。您需要首先将对象下载到本地存储库,因为所有这些元数据都在对象中捕获。

答案 2 :(得分:-1)

通过在eclipse上建立ssh2网络连接直接访问的最佳方式。