我有一个目录的仓库称为project
:移动项目进入子目录
[~/project]$ ls
a b c
我想一切都移动到project
目录的子目录,所以它看起来像这样:
[~/project]$ ls
subdir
[~/project]$ cd subdir
[~/project/subdir]$ ls
a b c
通常情况下,git mv
可以工作,但是我想让它看起来好像从一开始就一直对该子目录进行历史提交。有没有办法做到这一点?
我有一个目录的仓库称为project
:移动项目进入子目录
[~/project]$ ls
a b c
我想一切都移动到project
目录的子目录,所以它看起来像这样:
[~/project]$ ls
subdir
[~/project]$ cd subdir
[~/project/subdir]$ ls
a b c
通常情况下,git 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
检查。)
我把所有东西都放在不同的行上,但是我进一步说,根据您的陈述意图,使用'/ dev/shm'与'/ tmp'。 '/ tmp'不是'tmpfs',而是'/ dev/shm'。但缺点是总会有'/ tmp'出现,但根据* nix发行版,远程可能'/ dev/shm'不会在那里。我只是用这个自己,它很好。 – digitalextremist
到目前为止唯一的问题是,这需要一个不是“裸”的本地克隆: -/ – digitalextremist
@digitalextremist:感谢格式化!我个人更喜欢'/ tmp',因为它在* BSD和OS X上可用,所以我回滚了特定的编辑。 – Snowball
为什么你想改变历史? git或任何其他源代码管理系统的重点是保持历史记录不变。 – piokuc
@piokuc:我正在将一个git存储库合并到另一个中。如果我没有这样做,它会打破“平分”。 – Snowball