有人知道如何在不进入 git 仓库的情况下获取给定分支的最新 SHA 吗?
如果你正在 git 仓库内部,可以执行以下操作:
git log origin/branch_X | head -1
我并不在一个git仓库中,我想避免必须 clone
一个仓库才能获取标签/分支的最新SHA值。有没有巧妙的方法可以做到这一点?
有人知道如何在不进入 git 仓库的情况下获取给定分支的最新 SHA 吗?
如果你正在 git 仓库内部,可以执行以下操作:
git log origin/branch_X | head -1
我并不在一个git仓库中,我想避免必须 clone
一个仓库才能获取标签/分支的最新SHA值。有没有巧妙的方法可以做到这一点?
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
git rev-parse HEAD
返回本地副本中的最新提交,而 git rev-parse origin/master
返回远程仓库中的最新提交,这也是本次询问的内容。尽管第一个命令应该被删除,但这是我最喜欢的答案。 - fedelibregit rev-parse
? - Nick Chammasgit fetch origin; git rev-parse origin/master
,fetch 很重要。 - Alexander Mills我的一个同事为我回答了这个问题:
git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch>
使用 Git URL:
$ git ls-remote <URL> | head -1 | sed "s/HEAD//"
使用可访问系统上的目录:
$ git --git-dir=/path/to/repo/.git rev-parse origin/<targeted-banch>
sed "s/\tHEAD//"
命令也可以删除末尾的制表符。 - Perseids| awk '{ print $1 }'
? - devxoul如上评论所述,这应该是最佳解决方案:
$ git ls-remote <URL> | head -1 | cut -f 1
这应该可以解决问题:git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"
将REMOTE替换为远程仓库的名称,将BRANCH替换为分支的名称。
git --git-dir=/path/to/repo/.git rev-parse --verify HEAD
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
grep "refs/heads/master$"
,这样如果有人要求除 master 以外的其他分支或者有一个名为 master2 的分支,这可能会出现问题 ;) - kitingChris分支头的引用存储在.git/refs/
树中。因此,您应该能够在以下位置找到最新提交的哈希值:
cat .git/refs/remotes/origin/branch_X
您的路径可能略有不同。
我建议仅获取与指定分支相关的信息,然后解析以获取最新的sha:
git ls-remote <url> --tags <branch_name> | awk '{print $1;}'