我相信 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 中完成的。使用子目录文件或索引过滤器更合适吗?
最佳答案
一个树过滤器。像下面这样的东西应该可以工作:
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
但是,这假定同时添加了文件 A、文件 B 和文件 C(因为我们对文件 A 使用了 test -e),但情况可能并非如此。如果不是这种情况,您必须对每个文件进行多次扫描。
关于git - 混淆编写 git filter-branch 将所有文件移动到子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660896/