我相信git filter分支可以允许我这样做,但我不知道是否需要使用--subdirectory过滤器,或者是否需要使用索引过滤器。
但是,假设我有一个名为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

但是,这假设filea、fileb和filec是同时添加的(因为我们对filea使用test-e),而事实可能并非如此。如果不是这样的话,你必须对每个文件进行多次扫描。

关于git - 混淆编写git filter-branch将所有文件移动到子目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9660896/

10-12 03:27