git - 如何在 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-include
或shallow-exclude
选项现在实际上是必要的。这是个好消息,因为它使该配置不像最初担心的那样脆弱。
解决方案
似乎应该使用--shallow-exclude=my-root-tag
查看如何在 git 中维护一组分支的浅克隆来获取所有内容直到提交
这个类似的问题建议使用--shallow-since=<date of tagged commit>
:Git:来自特定提交的浅拷贝
还有相关的:
推荐阅读
- javascript - 在消息部分使用带有链接的 ant-design-vue 通知
- php - 使用 Smarty 修改特定页面
- javascript - 根据现有响应创建新的 json 响应
- java - 有没有办法在 Spring 中从 URI 中获取路径变量列表?
- typescript - GraphQL CodeGen - 使用单个请求执行任意次数的相同突变
- c# - 使用路由参数的 DotNet Core 自定义授权属性
- mysql - 是否可以进一步优化这个 MySQL 查询?
- nginx - Nginx - auth_request返回401后如何重定向到登录页面
- mongodb - MongoDB $lookup 最简单的用法
- jestjs - 在 Jest 和 Sinon.JS 中,server.requests[0] 似乎不是一个承诺?但 Promise.all(server.requests) 似乎工作