我在一个名为的目录中有一个 git 存储库project
:
[~/project]$ ls
a b c
我想将所有内容移动到目录的子目录中project
,所以它看起来像这样:
[~/project]$ ls
subdir
[~/project]$ cd subdir
[~/project/subdir]$ ls
a b c
通常 agit mv
会起作用,但我想让它看起来好像从一开始就一直对那个子目录进行历史提交。有没有办法做到这一点?
我在一个名为的目录中有一个 git 存储库project
:
[~/project]$ ls
a b c
我想将所有内容移动到目录的子目录中project
,所以它看起来像这样:
[~/project]$ ls
subdir
[~/project]$ cd subdir
[~/project/subdir]$ ls
a b c
通常 agit mv
会起作用,但我想让它看起来好像从一开始就一直对那个子目录进行历史提交。有没有办法做到这一点?
看起来像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
。)