git filter-repo --refs <commit..range> 未带来标签

3

我有几个大型长期存在的代码仓库,现在要将它们合并成一个新的代码仓库,每个现有的仓库都会成为新仓库中的子目录:

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 参数时也包括该范围内的标签?

1个回答

0

git log命令有--decorate=full--decorate-refs=pattern选项。

你也可以使用git show-ref命令并通过其输出进行grep:

git show-ref | grep -f <(git rev-list <commit range>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接