如何从远程git存储库获取最新提交的SHA?

时间:2009-07-21 21:30:05

标签: git

有没有人知道如何从gits存储库中获取给定分支的最新SHA

如果你在git存储库中,你可以这样做:

git log origin/branch_X | head -1

但是,我不在git存储库中,我想避免使用clone存储库来获取标记/分支的最新SHA。有一种聪明的方法吗?

10 个答案:

答案 0 :(得分:85)

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

答案 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;}'