我有几个大型长期存在的代码仓库,现在要将它们合并成一个新的代码仓库,每个现有的仓库都会成为新仓库中的子目录:
oldrepo1
oldrepo2
becomes
newrepo/oldrepo1
newrepo/oldrepo2
我正在使用git filter-repo,执行几个操作,如删除一些过时的已删除文件夹、摆脱大文件、将根文件夹移动下来(需要合并到新存储库中)、将标签移动到子文件夹中(例如tag1 -> oldrepo1/tag1),以及修改提交消息以进行与迁移相关的各种信息处理。我通过一个中间存储库进行历史重写,因为我不能轻易更改原始存储库,所以我的迁移流程如下:oldrepo1 -> oldrepo1_tmp -> newrepo,其中oldrepo1_tmp是我进行初始清理和历史更改的地方。我已经完成了初始迁移,但在所有开发人员移动到新位置之前会有一些时间(几周),在此过渡期间,我需要执行一些定期的前向迁移操作,以保持新存储库的最新状态。对于前向迁移工作,在我的oldrepo1克隆(原始存储库本地克隆)中运行以下命令:
git filter-repo <***> --target oldrepo1_tmp --refs <last_commitid_migrated>..HEAD
这里的 <***> 是指一组选项,用于所有与原迁移相同的修改。
换句话说,我只是修改了自上次迁移以来的所有提交历史。
对于提交记录来说,这很好用,但它没有将在该提交范围内创建的标签带过来。
我找到了这个主题: Git filter-branch to filter-repo : tags not rewritten
它建议使用 --refs $branch $(git tag -l)
但那样会添加所有标签(其中有数百个)。
是否有办法获取仅在给定 ref 范围内创建的标签?也就是说,在 <commitid1>..<commitid2> 之间创建的任何标签(我只在一个分支 [master] 中工作)。
或者,是否有一种方法可以告诉 git-filter-rep 在使用 --refs 参数时也包括该范围内的标签?