2012-03-12 73 views
2

我相信git filter-branch可以让我做到这一点,但我无法弄清楚我是否需​​要使用--subdirectory-filter或者如果我需要使用索引过滤器。混淆编写git filter-branch将所有文件移动到子目录

但是,让我们说我有一个名为回购库,结构看起来像:

repo/fileA 
repo/fileB 
repo/dir1/fileC 

我想要做的就是这样的结果是在移动的一切到一个名为DIR2目录:

repo/dir2/fileA 
repo/dir2/fileB 
repo/dir2/dir1/fileC 

我想使用filter-branch使它看起来像从此存储库诞生以来一样,一切都始终在dir2中完成。使用子目录文件或索引过滤器来执行此操作更合适吗?

回答

2

树形过滤器。像下面这样的东西应该工作:

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同时添加(因为我们使用的测试-e为的fileA),并可能并非如此。如果不是这种情况,你必须对每个文件进行几次扫描。

1

可能是树型过滤器。

  • 子目录过滤器被设计为以其他方式(将现有目录移动到存储库的根目录,忽略其他目录)。
  • 索引过滤器旨在修改索引而不检查事情,但git mv没有选项只能在索引上工作,所以您可能确实需要结账才能使用。