如何移动 Git 中的多个目录?

How can I move multiple directories in a Git?

有一个像这样的 Git 存储库。

   repo/
      A1/
        B1/
          C1/
      A2/
        B2/
          C2/

我想要一个这样的。

   repo/
      C1/
      C2/

我不再需要 A1、B1、A2、B2 目录了。

$ git filter-branch --tree-filter 'mv A1/B1/C1 .' HEAD
Rewrite xxxx(1/206)mv: cannot stat 'A1/B1/C1': No such file or directory
tree filter failed: mv A1/B1/C1 .

有什么想法吗?

只需在终端或文件管理器中移动它们并提交更改。

$ git filter-branch --tree-filter 'mv A1/B1/C1 .' HEAD

此代码以类似

的错误结束

"mv: cannot stat 'A1/B1/C1': No such file or directory".

但是下面这段代码工作正常。

$ git filter-branch --tree-filter "ls A1/B1 | xargs -i -t mv A1/B1/{} A1 | sh" HEAD

我不知道为什么第一个代码不起作用,但似乎还可以。 谢谢。

filter-branch 命令遍历您的存储库的整个历史记录。如果该文件夹从一开始就不存在,您可能会收到 No such file or directory 错误,并且由于 mv returns 具有非零退出代码,整个迭代将停止。

最简单的解决方案是将 || true 附加到过滤器命令:

git filter-branch --tree-filter 'mv A1/B1/C1 . || true' HEAD

当文件夹不存在时,您仍会收到有关步骤的 No such file or directory 消息,但至少该过程不会立即停止。