git - 提取所有分支的子目录,同时使用 git filter-repo 保留标签
问题描述
我正在尝试将所有分支的 git 存储库的子目录提取到单独的存储库中,同时保留相关标签完整。
我已经在网上搜索过,但对于我的特定用例没有成功。
我已经做的是
git filter-repo --subdirectory-filter foo/dir
这适用于所有分支,但不保留标签。这似乎是合理的,因为历史被重写,因此之前创建的标签指向不存在的提交。
似乎有一个使用过时的解决方案git filter-branch
,如下所示:
git filter-branch --tag-name-filter cat --subdirectory-filter foo/dir -- --all
但是根据这个 SO question(最后),对于尚未包含要提取的子目录的旧标签,它不能按预期工作。
该问题的公认答案建议使用该--refs
参数并显示一个带有一个“参考”(开发分支)的示例。浏览文档,它指出:
将历史重写限制为指定的参考。暗示--部分。除了 --partial 的正常警告(混合新旧历史,不会自动将 refs/remotes/origin/* 重新映射到 refs/heads/* 等),这也可能导致退化空合并的修剪问题指定负面修订时提交。
关于--partial
文档状态:
进行部分历史重写,导致新旧历史混合。这意味着 --replace-refs 默认为 update-no-add,禁用将 refs/remotes/origin/* 重写为 refs/heads/*,禁用删除“origin”远程,禁用删除未导出的 refs,禁用过期reflog,并禁用自动后过滤 gc。此外,这会修改 --tag-rename 和 --refname-callback 选项,这样它不会用新的 refnames 替换旧的 refs,而是会创建新的 refs 并保留旧的 refs。谨慎使用。
我认为我不想接受所有那些隐含的“警告”。
不过,我查看的下一个SO 问题使用以下命令解决了该问题:
git filter-repo -f --prune-empty always --subdirectory-filter $subdir --refs $branch $(git tag -l)
这里看起来这个解决方案只适用于一个分支和所有标签。
所以我现在的问题是:是否有可能通过使用提取所有分支的子目录,包括所有标签,git filter-repo
或者我怎样才能正确实现这种期望的行为?
我的第一个猜测是将所有可用的分支和标签添加到--refs
参数中。但是有没有更“优雅”的方式,比如-- --all
?
非常感谢提前和亲切的问候。
解决方案
推荐阅读
- python - 使用用户输入和for循环打印中间空心的矩形
- angular - 如何在 Angular 5 应用程序中集成 Paynimo 支付网关?
- vba - VBA条件格式与公式中的变量
- regex - 要在 download.log 中搜索 .zip 文件,
- yii2 - Yii2,url中的参数在动作视图中不起作用
- c# - 将excel范围写入整数数组类型转换异常
- sql - 在 oracle 中使用子查询更新列
- c# - 如何在@Html.Dropdownlist 中创建动态 id?
- haskell - Curry/Uncurry monad 变压器提升
- reactjs - React Typescript强制道具中空数组的编译时错误