4

我在一个名为的目录中有一个 git 存储库project

[~/project]$ ls
a  b  c

我想将所有内容移动到目录的子目录中project,所以它看起来像这样:

[~/project]$ ls
subdir
[~/project]$ cd subdir
[~/project/subdir]$ ls
a  b  c

通常 agit mv会起作用,但我想让它看起来好像从一开始就一直对那个子目录进行历史提交。有没有办法做到这一点?

4

1 回答 1

5

看起来像filter-branch我想要的:

git filter-branch --tree-filter \
        'mkdir subdir; \
        find -maxdepth 1 \
            -not -name . \
            -not -name .git \
            -not -name subdir \
            -print0 \
        | xargs -0 -I{} mv {} subdir' \
    -d /tmp/whatever -- --all

-d /tmp/whatever部分只是为了在 tmpfs 文件系统上运行命令,因此没有一堆磁盘 IO。

(在极少数情况下,/tmp不会作为 tmpfs 挂载。您可以检查mount | grep tmp。)

于 2012-10-11T15:14:49.843 回答