我们有一个相当大的代码库,包含大约 60000 个提交。我们希望在保留 git 历史记录的同时重新格式化所有 .java 文件。因此,我们采用的方法是使用 git filter-branch --tree-filter 重新格式化整个代码库,同时保持历史记录不变。但是,有几个问题我无法找到答案。
当我应用 --tree-filter 并传递重新格式化根目录中所有 .java 文件的命令时,会发生重写,但最后,我会在暂存区看到所有 .java 文件。重写的每一步都需要提交还是自动发生?
git filter-branch 似乎接受了一系列提交,这让我想知道是否可以在每次重写之前保存提交 ID,并在失败的情况下恢复。恢复很重要,因为整个过程可能需要几天才能完成(即使在强大的计算实例上)。
为了重新格式化整个代码库, --index-filter 会起作用吗?
更新:澄清
- 代码库大约有 220 万行 Java 代码。不进行 git rewrite 会导致大约 10%-12% 的代码库被归因于错误的作者。那是大约 200K 行的 java 代码,这是我们想要避免的。Git rewrite 让它看起来像是做出改变的人做了正确的事情。