如何从远程git仓库获取最新提交的SHA?
有谁知道如何从 git仓库外部获取给定分支的最新SHA吗?
如果你在一个git仓库中,你可以这样做:
git log origin/branch_X | head -1  不过,我不在git仓库中,我想避免为了得到标签/分支的最新SHA而clone仓库。 有没有一个聪明的方法来做到这一点? 
如果你想检查远程仓库中给定分支的SHA-1,那么你的答案是正确的:
 $ git ls-remote <URL> 
但是,如果你在同一个文件系统上,简单的解决scheme(不需要从输出中提取SHA-1)将是简单的:
 $ git --git-dir=/path/to/repo/.git rev-parse origin/branch_X 
 有关' – --git-dir '选项的说明,请参见git(1)手册页。 
使用rev-parse
 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 
使用giturl:
 $ git ls-remote <URL> | head -1 | sed "s/HEAD//" 
在可访问的系统上使用目录:
 $ git --git-dir=/path/to/repo/.git rev-parse origin/<targeted-banch> 
我的一位同事为我回答了这个问题:
 git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch> 
史蒂夫
 这应该做的技巧git ls-remote REMOTE | awk "/BRANCH/ {print \$1}" git ls-remote REMOTE | awk "/BRANCH/ {print \$1}" 
将REMOTEreplace为远程存储库的名称,BRANCH用分支的名称replace。
正如上面评论中提到的,这应该是最好的解决scheme:
 $ git ls-remote <URL> | head -1 | cut -f 1 
 对分支头的引用存储在.git/refs/ tree中。 所以你应该能够在以下位置find最新提交的哈希: 
 cat .git/refs/remotes/origin/branch_X 
你的path可能略有不同。
如果你只想从本地仓库的当前签出分支中获得SHA-1,你可以指定HEAD而不是origin / branch_X:
 git --git-dir=/path/to/repo/.git rev-parse --verify HEAD 
 我build议读取仅与给定分支相关的信息,然后parsing以获取最新的sha: 
 git ls-remote <url> --tags <branch_name> | awk '{print $1;}' 
下面是一个复制粘贴解决scheme,在仓库中工作。
 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