对于需要在MR上的diff上工作的CI作业,我想获取具有足够历史记录的源分支和目标分支,以可靠地运行git diff main...mr
(其中main
是目标分支,mr
是源分支)。(即,历史记录应该包括mr
,并追溯到足够远的地方,以找到合并基地。)
一种不可靠且效率低下的方法是选择一个可能足够的深度(例如1024)和git fetch --depth=1024 mr && git fetch --depth=1024 main
,但在极端情况下,1024可能不够,并且在正常情况下,它会获取比必要的更多的历史。
我们正在使用GitLab CI,所以如果在git
中没有通用的方法来获取合并库,任何GitLab特定的解决方案也都是受欢迎的。
作为具体的例子,clang-tidy-diff
是我想使用的需要diff的工具之一。
我不知道一个查询远程服务器的好方法;你能告诉我这两个分支的合并基数吗?&;,也许有人会想出更好的答案。
一种方法是,只要git merge-base mr main
返回一个错误,就可以越来越深入地获取
#/bin/bash
while ! git merge-base origin/mr origin/main > /dev/null; do
depth=$((depth+1024))
git fetch --depth=$depth origin mr && git fetch --depth=$depth origin main
done
在你允许完全不相关的分支在你的中央仓库着陆的奇怪情况下,你可能还需要检查"取回更深"的";获取新的东西