如何从浅层克隆中检查远程的不同分支的HEAD?

时间:2017-07-25 12:54:27

标签: git

我最近改变了服务器克隆的方式,以加快部署速度:

git clone -b $BRANCH --depth 1 git@github.com:initech/rounding.git .

问题是,更新机制执行以下操作:

LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/$NEWBRANCH)

if [ $LOCAL = $REMOTE ]; then
    echo "Up-to-date"
else
    blah...
fi

以前这很好,但现在我得到fatal: Needed a single revision,因为git不知道是否存在任何其他分支。

如何提取有关我要切换到的分支的信息,并检查其原始上的HEAD提交,而不将其检出(因为我想保留此结帐 - 因为它正在运行服务器)?

1 个答案:

答案 0 :(得分:1)

你不能直接这样做:信息就不存在了。

如果你可以咨询另一个更完整的Git存储库,你可以在那里找到答案。这个的确切机制(显然)取决于你如何与另一个更完整的Git存储库进行交流和讨论 - 但是有一个内置机制:git ls-remote

在您自己的某个存储库中手动运行git ls-remote,以查看它的运行情况。请注意,它通过一些Git传输调用远程(通常为originyou can choose which remote; see the documentation),这意味着必须允许运行它的任何人访问其他存储库。

另请注意,它会在远程上看到这些引用名称​​。 您的 Git存储您的副本"其他Git称之为refs/heads/master(分支master)"在你的 refs/remotes/origin/master下。这使其与您的 refs/heads/master分开。当然,他们的Git不必将mastermaster分开......所以他们的 Git以全名{{1}存储它}}。这意味着您的测试必须相应更改。