Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有标记的Git子目录过滤器_Git_Split_Git Tag_Git Filter Branch - Fatal编程技术网

带有标记的Git子目录过滤器

带有标记的Git子目录过滤器,git,split,git-tag,git-filter-branch,Git,Split,Git Tag,Git Filter Branch,我正试图将大型回购协议拆分为多个较小的回购协议。目标是分割文件夹并在过程中保留标记 我试过: git filter-branch --prune-empty --subdirectory-filter my-folder develop 这将正确地将my folder放置在新项目的根目录下,并保留标记。然而,签出标记会导致在新repo中看到整个旧目录结构 所以我试着: git filter-branch --tag-name-filter cat --prune-empty --subdire

我正试图将大型回购协议拆分为多个较小的回购协议。目标是分割文件夹并在过程中保留标记

我试过:

git filter-branch --prune-empty --subdirectory-filter my-folder develop
这将正确地将
my folder
放置在新项目的根目录下,并保留标记。然而,签出标记会导致在新repo中看到整个旧目录结构

所以我试着:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --branches=develop --tags
这导致develop分支使用旧的目录结构存在,但是当我签出标记时,我看到子目录被正确地过滤到根目录!因此,标记是正确的,但不是开发分支。基本上,它与第一种方法的问题相反

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

编辑:

现在尝试一下:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --all
我很犹豫,因为我预计这将需要更长的时间。 这确实需要更长的时间,但基本上是有效的。 什么不起作用?文件夹尚未创建的旧标签留在repo中,签出时包含完整(非常)旧的目录结构。我不得不grep并删除所有这些标签。 但回购协议并不像我预期的那么小

正如我在“”中提到的,旧的git-filter-branch命令正逐渐被弃用

使用新的,这将是:

 git filter-repo --path my-folder/ --to-subdirectory-filter / -- refs develop
然后将该分支推送到一个新的空Git存储库


这将正确移动相关标签。

我将立即尝试。我只能访问2.22.0。你知道它是否适用于该版本吗?确实适用于2.22.0,但我遇到了一个与python无法处理非unicode字符串(或类似内容)相关的错误。我处于一个相对受限的环境中,不幸的是,我无法启动linux映像来解决这个问题。这在git for windows上install@Dennis好啊注意:对于Git for Windows,您可以安装所需的任何版本(不需要提升权限)。然而,Git2.24确实有一个bug:在这个阶段,我们会接受你的答案。看起来我需要获得
2.23
(感谢您指出这个bug!)以及另一个版本的filter repo。我会再试一次。