【问题标题】:Git Subdirectory Filter with tags带有标签的 Git 子目录过滤器
【发布时间】:2019-10-15 12:14:58
【问题描述】:

我正在尝试将一个大型 repo 拆分为多个较小的 repo。目标是拆分文件夹并保留过程中的标签。

我试过了:

git filter-branch --prune-empty --subdirectory-filter my-folder develop

这正确地将my-folder 放置在新项目的根目录下,并保留了标签。但是,签出标签会导致在新仓库中看到整个旧目录结构。

所以我尝试了:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --branches=develop --tags

这导致开发分支存在旧目录结构,但是当我签出标签时,我看到子目录已正确过滤到根目录!所以标签是正确的,但不是开发分支。基本上它与第一种方法有相反的问题。

我不知道为什么第二种方法不起作用。我真的很感激任何指点!

编辑:

现在试试这个:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --all

犹豫不决,因为我预计这需要更长的时间。 这确实花费了更长的时间,但它主要是有效的。 什么没有奏效?好吧,尚未在其中创建文件夹的旧标签留在存储库中,并且在签出时包含完整(非常)旧的目录结构。我不得不 grep 并删除所有这些标签。 回购仍然没有我预期的那么小......

【问题讨论】:

    标签: git split git-tag git-filter-branch


    【解决方案1】:

    正如我在“Git commands that could break/rewrite the history”中提到的,旧的 git filter-branch 命令正在慢慢被弃用。

    使用新的git filter-repo,那就是:

     git filter-repo --path my-folder/ --to-subdirectory-filter / -- refs develop
    

    然后将该分支推送到新的空 Git 存储库。

    这应该可以正确移动相关标签。

    【讨论】:

    • 我现在就试一试。
    • 我只能访问2.22.0。你知道它是否适用于那个版本?
    • 确实适用于 2.22.0,但我遇到了一个与 python 无法处理非 unicode 字符串(或类似的东西)相关的错误。我处于一个相对受限的环境中,不幸的是,我无法启动一个 linux 映像来为自己解决这个问题。这是一个 git-for-windows 安装
    • @Dennis 好的。注意:对于 Windows 版 Git,您可以安装所需的任何版本(无需提升权限)。但是,Git 2.24 确实有一个错误:stackoverflow.com/a/59383810/6309
    • 在这个阶段会接受你的答案。看来我需要获得2.23(感谢您指出该错误!)以及另一个版本的过滤器回购。我会再试一次。
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2016-04-17
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多