Git filter-branch 转为 filter-repo: 标签未重写。

3
我一直在尝试使用git filter-branch修改脚本,将一个git存储库按指定子文件夹分成多个新目录。新目录应仅包含修改其对应子文件夹的提交记录,因此使用了filter-branch。我的目标是为了提高性能而将filter-branch更改为filter-repo。
它以前会创建一个新分支$ branch,然后使用以下命令:
git filter-branch -f --prune-empty --tag-name-filter cat --subdirectory-filter $subdir $branch --tags

接着执行此命令,将分支推送到相应的存储库(名称相同),以及重写的标签:

git checkout $branch
ssh-agent bash -c "ssh-add ../$privateKeyName; git push $branch $branch:$branchToExtract --tags -f"

($branchToExtract不重要,您可以将其视为“主”)

因此,如前所述,我一直在尝试使用filter-repo而不是filter-branch。这是我一直在使用的命令:

git filter-repo -f --prune-empty always --subdirectory-filter $subdir --refs $branch

除了一个(重要)问题之外,它运行得很好:当将所有内容推送到新存储库时,标记与主原始存储库相同,这意味着它们有太多的内容(和提交),而不是它们应该具有的内容。就像标记根本没有被重写一样。 我尝试了一些不同的方法,比如--tag-rename,但都没有成功。 如果您能提供任何帮助,指示我应该做什么或关于我可能做错的事情的指示,我将不胜感激。谢谢 :)

你使用 --refs $branch,你试过在这里列出所有的标签吗?还是总是在一个新的克隆上工作并重写整个仓库? - undefined
1个回答

1
根据LeGEC所述,将标签列在--refs中解决了问题。我并没有完全意识到这个选项的工作原理。
对于任何感兴趣的人来说,这意味着正确的命令是 git filter-repo -f --prune-empty always --subdirectory-filter $subdir --refs $branch $(git tag -l)

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