首页 > 解决方案 > 如何在 git 存储库中使用“人工根提交”?

问题描述

问题和动机

我们的中央服务器上有一个更大的 git 存储库。其中有很多我们想要保留的历史,因此重新设置或压缩任何内容都不是一个真正的选择。但是,当将存储库克隆到我们的开发服务器时,实际上只有最近的历史是相关的。对我们来说,“最近”可以定义为给定的标签,并且可以省略历史中较早的任何提交。这里的目的是节省带宽、时间和磁盘空间。

方法的想法

当前的想法是仅克隆该标记,使用git clone --branch my-root-tag --depth 1,将其视为该本地存储库中的人工根提交。之后,添加我们想要使用手动获取的分支git remote set-branches --add origin some-branch。所有这些分支都必须包含my-root-tag在其历史中的某个地方。但是,现在每次获取都将再次传输整个历史记录。有没有办法限制提取停止my-root-tag?听起来这种方法需要像在git shallow clone 中询问的东西,因为特定的 commit,理想情况下包装在一个 git 别名中以“动态”计算--depth参数的值。

任何人都可以想出一种方法来让它发挥作用,甚至可以应用一些完全不同的方法吗?

结果

编辑:总而言之,似乎 agit fetch确实只将提交转移到嫁接的新存储库根目录(至少在 Git v 2.25.1 中)。只有原始clone需要正确参数化,而对存储库的后续操作可以使用常规(未参数化)git命令执行。没有shallow-includeshallow-exclude选项现在实际上是必要的。这是个好消息,因为它使该配置不像最初担心的那样脆弱。

标签: git

解决方案


似乎应该使用--shallow-exclude=my-root-tag 查看如何在 git 中维护一组分支的浅克隆来获取所有内容直到提交

这个类似的问题建议使用--shallow-since=<date of tagged commit>Git:来自特定提交的浅拷贝

还有相关的:


推荐阅读