【问题标题】:Git rewrite with submodules, absorb submodule files at each commit?Git用子模块重写,在每次提交时吸收子模块文件?
【发布时间】:2019-09-21 17:37:55
【问题描述】:

我想做一些比un-submodule a git submodule复杂一点的事情

我有一个包含子模块 repos 的顶级 git repo。

我想在顶级 repo 上执行过滤器分支历史记录重写,并且基本上在顶级历史记录中的每次提交时合并来自相应子模块版本的文件。

这也可以描述为Convert a git folder to a submodule retrospectively?的反面

例如,

子模块仓库有历史

A--B--C--D

顶级回购有历史

X--Y--Z
where
X[points to A]--Y[points to B]--Z[points to D]

另一个问题中描述的幼稚解决方案将导致:

A--B--C--D
          \
           > M
          / 
   X--Y--Z

我想要:

X'--Y'--Z'
where:
X' is X plus the files from A
Y' is Y plus the files from B
Z' is Z plus the files from D'

解决用户 torek 的评论:请注意,提交 C 丢失,提交 D' 包含提交 C 和 D 的所有更改。这不是选择,而是简化。我也会很高兴提交 C'(来自 C 的更改)只是出现在 Y' 和 Z' 之间,不幸的是这会引入其他不值得解决的边缘情况。

到目前为止我尝试了什么?

花了一些时间试图阐明我想要做什么并研究现有的 SO 问题。

这是 XY 问题吗?

不,不是。这不是我真正要解决的更大问题的一部分。

【问题讨论】:

  • 值得注意的是:如果超级项目有 3 个唯一的 gitlinks 到子模块,但子模块本身有超过 3 个提交,你几乎肯定会在重写中省略除三个子模块提交之外的所有提交,去子模块化的超级项目。如果您希望避免遇到更困难的问题,因为无法保证超级项目提交图和子模块提交图是一致的。
  • 是的,很好。我更新了问题以显示来自子模块 repo 的丢失提交。

标签: git


【解决方案1】:

子模块是一个(非常普通的)存储库,如果您想从其提交中读取内容,可以将其对象 db 添加到您的搜索中。

GIT_ALTERNATE_OBJECT_DIRECTORIES=$PWD/.git/modules/mysubmodule/objects \
git filter-branch --index-filter '
        if subcommit=`git rev-parse -q --verify :path/to/submodule`; then
                git update-index --force-remove path/to/submodule
                git read-tree --prefix=path/to/submodule/ $subcommit
        fi
' -- --all
GIT_ALTERNATE_OBJECT_DIRECTORIES=$PWD/.git/modules/mysubmodule/objects \
git repack -ad

应该这样做。

【讨论】:

  • git rev-parse 在过滤器内执行时似乎失败了。没有错误消息,只是一个非零退出代码:-(
  • 删除-q 选项我得到... fatal: Needed a single revision tree filter failed: git rev-parse --verify :*** 其中*** 是我的子模块路径。当我将它改回index-filter 时,错误是一样的
  • 修复了当 path/to/submodule 不存在时的行为,抱歉。但是你从哪里得到一个树过滤器?这是一个索引过滤器。啊,我知道你只是在尝试。
  • 是的,对不起,我在调试时将索引过滤器更改为树过滤器。现在又回到了索引过滤器。
  • failed to unpack tree object 中途失败...我认为在某个时候子模块的历史记录中有一个已删除的提交
猜你喜欢
  • 2012-06-06
  • 2012-04-20
  • 2015-04-24
  • 1970-01-01
  • 2021-09-21
  • 2012-09-13
  • 2021-12-07
  • 2014-08-31
  • 2013-01-03
相关资源
最近更新 更多