使git`replace`成为永久提交或诸如此类

问题描述

我正忙于将所有现有的SVN储存库转换为Git,同时也趁机利用Git的功能轻松重写某些历史记录。为此,我还使用git filter-repo来摆脱不需要的文件,并通过脚本进行一些标准的重命名。 (注意:它们都是我自己工作的个人存储库,因此不需要更改更改免责声明的历史记录,我知道要注意的地方:))

filter-repo运行良好(具有Python脚本功能,并且比filter-branch快得多),但它创建了替换提交。回购重组完成后,我想摆脱所有这些替换提交,以真正烘焙更改后的历史记录。而且最好是通过脚本,因为我有很多回购和很多提交。但是我在谷歌搜索时却空手而归...

这样做的原因:我的Git命令行客户端对此不感到困扰,但是我的GUI(适用于Windows的SmartGit)一直困扰着它不支持替换提交(它检测到它说的refs / replace-refs)。无论如何,它都会显示回购内容正常,我可以从那里继续填写丢失的提交消息,进行更多清理等操作,但是我还没有进一步查看,所以谁知道它最终会破坏什么?

我已经找到了一种解决方法,将每个存储库推送到添加到本地Gitea服务器的空存储库,然后删除本地存储库并将其克隆回本地。虽然我可以在接下来的转换过程中继续使用它,但我一直想知道是否可以/可以更有效地做到这一点?

解决方法

如果refs/replace-refs有问题,则可以使用
运行filter-repo命令 --replace-refs option

尝试:

--replace-refs update-no-add
# or
--replace-refs delete-no-add

然后查看在执行refs/replace-refs之后是否还有filter-repo个对象。