混淆写入git filter-branch以将所有文件移动到子目录中

5
我相信git filter-branch可以帮助我实现这个目标,但我无法确定我是否需要使用--subdirectory-filter还是索引过滤器。
但是,假设我有一个名为repo的仓库,其结构大致如下:
repo/fileA
repo/fileB
repo/dir1/fileC

我想要做的是将所有内容移动到名为dir2的目录中,结果应该是这样的:
repo/dir2/fileA
repo/dir2/fileB
repo/dir2/dir1/fileC

我想使用filter-branch命令让这个代码库看起来好像一直都是在dir2目录下完成的。在这种情况下,使用子目录文件或索引过滤器哪种更合适呢?

3个回答

3
一种树形过滤器。类似以下内容可能有效:
git filter-branch --tree-filter 'test -e fileA && mkdir dir2 && mkdir dir2/dir1 && mv fileA fileB dir2/ && mv dir1/fileC dir2/dir1/ || echo "no op"' HEAD

然而,这假设fileA、fileB和fileC是同时添加的(因为我们使用test -e用于fileA),但这可能并非如此。如果不是这种情况,则必须为每个文件进行多次扫描。

这对我有用,只需将 git mv * dir2/ 作为移动命令。 - FTWinston

2

1

可能是一种树形过滤器。

  • 子目录过滤器的设计是往相反方向(将现有目录移动到仓库的根目录,忽略其他内容)。
  • 索引过滤器旨在修改索引而不进行检出,但 git mv 没有只在索引上工作的选项,因此您可能确实需要检出才能使用。

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