有没有人知道如何从gits存储库中获取给定分支的最新SHA ?
如果你在git存储库中,你可以这样做:
git log origin/branch_X | head -1
但是,我不在git存储库中,我想避免使用clone
存储库来获取标记/分支的最新SHA。有一种聪明的方法吗?
答案 0 :(得分:85)
git rev-parse origin/master # to get the latest commit on the remote
git rev-parse HEAD # to get the latest commit on the local
答案 1 :(得分:60)
如果要检查远程存储库中给定分支的SHA-1,则your answer是正确的:
$ git ls-remote <URL>
但是,如果您使用相同的文件系统,则更简单的解决方案(不需要从输出中提取SHA-1)将是简单的:
$ git --git-dir=/path/to/repo/.git rev-parse origin/branch_X
有关“--git-dir
”选项的说明,请参阅git(1)联机帮助页。
答案 2 :(得分:24)
我的一位同事为我解答了这个问题:
git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch>
-Steve
答案 3 :(得分:16)
使用git网址:
$ git ls-remote <URL> | head -1 | sed "s/HEAD//"
使用可访问系统上的目录:
$ git --git-dir=/path/to/repo/.git rev-parse origin/<targeted-banch>
答案 4 :(得分:14)
这应该是技巧git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"
将REMOTE替换为远程存储库的名称,将BRANCH替换为分支的名称。
答案 5 :(得分:11)
正如上面的评论所述,这应该是最好的解决方案:
$ git ls-remote <URL> | head -1 | cut -f 1
答案 6 :(得分:4)
如果您只想从本地仓库当前签出的分支中获取SHA-1,则只需指定HEAD而不是origin / branch_X:
git --git-dir=/path/to/repo/.git rev-parse --verify HEAD
答案 7 :(得分:2)
对分支头的引用存储在.git/refs/
树中。所以你应该能够找到最新提交的哈希:
cat .git/refs/remotes/origin/branch_X
您的路径可能略有不同。
答案 8 :(得分:2)
这是一个在存储库中工作的复制粘贴解决方案。
origin_head=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1)
if [ $origin_head != "$(git rev-parse HEAD)" ]; then
echo >&2 "HEAD and origin/master differ."
exit 1
fi
答案 9 :(得分:1)
我建议只提取与给定分支相关的信息,然后解析以获取最新的sha:
git ls-remote <url> --tags <branch_name> | awk '{print $1;}'