我正在寻找找出远程跟踪分支是否与当前分支不同的最快方法。
上下文:我想运行一个 cron 作业,这将找出本地分支的当前 HEAD 是否与其远程跟踪分支相同。可能有数百台主机在运行此 cron 作业(每个主机可能位于不同的分支/HEAD)。所以我想尽可能快速高效地实现这一点。(最小可能的网络负载和 git 服务器上的 CPU 负载)
目前我执行 agit fetch
然后git status
。但是,即使远程主机上的其他分支发生变化,git fetch
也会忙碌一段时间git status
,效率也不高。
存储库托管在 gitlab 服务器上(仅限 https 访问,存储库需要身份验证)
因此,纯 git 解决方案与 gitlab 解决方案一样受欢迎。
我想将解决方案实现为bash
脚本或python
脚本。pip install
任何有用的依赖都不是问题。
事实上,我想对主机上的几个存储库执行此检查(都可以使用相同的凭据访问)。我想,如果我可以优化一项检查,那么我会尽可能好,并且我将为每个存储库执行此检查。
但是,如果有一个技巧可以通过使用一个脚本查询多个存储库来提高性能,那么这也是一种选择。(例如只验证一次,查询多个存储库)
用于
git ls-remote
列出所有远程引用及其对象 ID。相同的命令适用于本地存储库,但
git rev-parse
在那里效率更高。当前分支是通过将 HEAD 设置为另一个引用的“符号”引用来设置的:
但是,如果您仍然要获取更新,那么不妨直接
git fetch
使用特定的分支 ref。获取的分支总是成为一个 ref,您可以用相同的方式进行比较:
(完整的参考名称几乎总是可以缩短为 just
master:origin/master
但我不会把它放在脚本中。)