我有一些非常长寿的 git 基础分支,这些分支可以追溯到几年前,有数以万计的提交,创建了千兆字节的数据,然后随着时间的推移被删除。我正在尝试优化我们现有的 Github Actions 工作流程,该工作流程会自动重新调整某些开放 PR 功能分支的基础,以响应这些长期存在的分支中的更改。随着时间的推移,基础分支变得越来越重,这些工作流程的运行时间越来越长,这主要是因为必须下载并重播这个漫长的获取历史记录。
我认为,如果长寿分支的
git fetch
更浅的话,它的速度可能会快很多。遗憾的是,获取不能只用于 latest 提交,因为我需要分支中的“足够”历史记录才能对功能分支进行变基。而且我无法设置固定浅深度,因为我们的特征分支可以任意长期存在。
那么,我的目标是找到一种方法,将“足够远”提取到 base
和
feature
分支的历史记录中,以便进行必要的本地提交,以便将一个分支与另一个分支重新建立基础。假设对于一个分支 base
,以及一组分支
feature-1
到 feature-N
,我已经有一个分支 nca
,其尖端指向 {base
,feature-1
,最近的共同祖先, feature-2
,...,feature-N
}。 (我已经修改了 Github Actions 工作流程来计算并推送这样的分支。)我们还假设我可以在工作流程开始时有效地获取此提示参考(例如使用git ls-remote
)。
鉴于我有这个引用,有没有什么方法可以使用该引用来获取git fetch
来给我一个“浅获取”——其中获取将被限制为每个分支所需的任何深度,而不是固定的深度获得对从引用到分支尖端的提交历史“片段”的本地访问?类似于
git fetch --shallow-since=[date]
,但用参考而不是日期?date -d "$(git show -s --format=%ci 93ddecac427bc01568b6eee7ba31c02d37e3f066)" +%s
然后,您可以将此结果嵌入到您的shallow-since fetch中,或者将其保存到变量中并以这种方式嵌入,具体取决于您的偏好。