github - 获取带有特定标记的提交的git哈希,无需克隆或提取

时间:2014-05-15 11:46:19

标签: git github

我希望得到特定标签的git哈希值。 现在我在工作中做的是:

git clone GITHUB_URL
git checkout TAG
cd REPO_NAME
export GIT_HASH=$(git log --pretty=format:%h -1)

如果没有克隆,拉扯或退房,我有没有机会得到这个?

2 个答案:

答案 0 :(得分:5)

您可以使用git ls-remote。一个例子:

$ git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
14186fea0cb06bc43181ce239efe0df6f1af260a        HEAD
14186fea0cb06bc43181ce239efe0df6f1af260a        refs/heads/master
5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c        refs/tags/v2.6.11
c39ae07f393806ccf406ef966e9a15afc43cc36a        refs/tags/v2.6.11^{}
5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c        refs/tags/v2.6.11-tree
c39ae07f393806ccf406ef966e9a15afc43cc36a        refs/tags/v2.6.11-tree^{}
26791a8bcf0e6d33f43aef7682bdb555236d56de        refs/tags/v2.6.12
9ee1c939d1cb936b1f98e8d81aeffab57bae46ab        refs/tags/v2.6.12^{}
9e734775f7c22d2f89943ad6c745571f1930105f        refs/tags/v2.6.12-rc2
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2        refs/tags/v2.6.12-rc2^{}
0397236d43e48e821cce5bbe6a80a1a56bb7cc3a        refs/tags/v2.6.12-rc3
a2755a80f40e5794ddc20e00f781af9d6320fafb        refs/tags/v2.6.12-rc3^{}
ebb5573ea8beaf000d4833735f3e53acb9af844c        refs/tags/v2.6.12-rc4
88d7bd8cb9eb8d64bf7997600b0d64f7834047c5        refs/tags/v2.6.12-rc4^{}
06f6d9e2f140466eeb41e494e14167f90210f89d        refs/tags/v2.6.12-rc5
2a24ab628aa7b190be32f63dfb6d96f3fb61580a        refs/tags/v2.6.12-rc5^{}
701d7ecec3e0c6b4ab9bb824fd2b34be4da63b7e        refs/tags/v2.6.12-rc6
7cef5677ef3a8084f2588ce0a129dc95d65161f6        refs/tags/v2.6.12-rc6^{}
0da688d20078783b23f99b232b272b027d6c3f59        refs/tags/v2.6.13
02b3e4e2d71b6058ec11cc01c72ac651eb3ded2b        refs/tags/v2.6.13^{}
...

您也可以只询问您想要的具体参考:

$ git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git HEAD
14186fea0cb06bc43181ce239efe0df6f1af260a        HEAD

根据评论,如果使用带注释的标签,请求标签将获得标签对象的哈希值,而不是关联的提交。关联的提交以<tag ref>^{}

的形式提供
$ git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git refs/tags/v3.14
f2378b14895ac79c325abe3c933744a26465e570        refs/tags/v3.14
$ git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git refs/tags/v3.14^{}
455c6fdbd219161bd09b1165f11699d6d73de11c        refs/tags/v3.14^{}

答案 1 :(得分:2)

所以我开始讨论@hvd说的话:

git ls-remote REPOLINK TAG

但是这只给了我标签哈希,我想要提交哈希。

所以我回到了:

git ls-remote REPOLINK 

并决定grep寻找标签:

git ls-remote REPOLINK | grep TAG

所以现在我有2行,第一行使用标记哈希,第二行使用提交哈希。 所以首先我们需要采取第二行:

git ls-remote REPOLINK | grep TAG | sed -n 2p

我们现在有:

HASH TAG

现在让我们切断除第一列之外的所有内容以获取哈希值:

git ls-remote REPOLINK | grep TAG | sed -n 2p | cut -f1