仅在 git 索引中移动没有工作目录的文件

Move a files only in the git index without a working directory

为了准备将多个回购合并为一个单一回购,我想查看我的整个回购历史,并在每次提交时将所有内容移动到子目录 foo/ 中。

快速(至少比 --tree-filter 快)的方法似乎是使用 filter-branch--index-filter 过滤器。但是,使用这种方法,您只能处理索引,而不是工作树。那么我如何为每个提交的子树添加一个新目录并将所有文件移动到其中?

我基本上是在寻找 git rm --cached 的等价物,但 git mv 似乎没有提供此选项。

没有 git mv --cachedgit mv --after 的等效项(参见 hg mv --after 进行比较)。我认为应该,但没有。

所以I wrote one。这有点俗气,但它应该适用于您的情况,前提是您的文件名中没有包含 control-A 字符的文件。如果你想移动文件的整个子树,你可能会喜欢它,并且可能会用 shell 脚本以外的其他东西来写它。