具有现有目录结构的Git子目录过滤器

JRo*_*han 13 git git-filter-branch

我正在使用filter-branch的--subdirectory-filter选项拆分Git存储库,除了它将所有东西都拉到存储库的根目录之外,它工作得很好.

我现在有

ABC
  - DEF
      - GHI
      - JKL
  - MNO
Run Code Online (Sandbox Code Playgroud)

以及此命令的结果:

git filter-branch -f --subdirectory-filter ABC/DEF --prune-empty -- --all
Run Code Online (Sandbox Code Playgroud)

生成这个:

GHI
JKL
Run Code Online (Sandbox Code Playgroud)

我真正想要的是这个:

ABC
  - DEF
      - GHI
      - JKL
Run Code Online (Sandbox Code Playgroud)

我在Git文档中看不到任何显示过保留(或设置)目录结构的过滤器选项的内容,我无法找到一个命令,我可以过滤后重新运行结构到我想要的状态.

这可能吗?

JRo*_*han 3

我在这里找到了一个答案,它可以解决问题。

命令:

git filter-branch -f --index-filter 'git ls-files -s \
| sed "s-\t-&ABC/DEF/-" \
| GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info \
&& mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE'
Run Code Online (Sandbox Code Playgroud)

完美运作