我有以下源结构:
/dir1
file1
file2
file3
dir1
不需要,因为存储库本身可以像一个文件夹,所以我希望我的 git 存储库看起来像这样:
file1
file2
file3
我应该怎么做才能实现这一目标?
我有以下源结构:
/dir1
file1
file2
file3
dir1
不需要,因为存储库本身可以像一个文件夹,所以我希望我的 git 存储库看起来像这样:
file1
file2
file3
我应该怎么做才能实现这一目标?
免责声明:这将重写历史并成为任何已经克隆了您的存储库的人的 PITA。你不应该在已发表的历史上这样做。
也就是说,您应该能够使用filter-branch
Git 的命令重写所有树。在使用它之前一定要了解所有的含义(请阅读手册页;有备份)。
git filter-branch \
--subdirectory-filter dir1 \
--tag-name-filter cat \
-- --all
注意。此命令还将保留您的移植物并替换 refs。
您可以将 .git 移动到子目录中(不要忘记您的 .gitignore)。然后运行 git init :
重要提示:在移动之前进行最后一次提交(我会解释它......)
mv .git ./dir1/.
git init .
git add .
git commit
在移动之前进行最后一次提交很重要:git 使用文件的哈希来识别它们。未更改的文件被视为“重命名”。如果您在移动之前有未提交的文件,它将为每个修改过的文件记录几个“删除”“添加”,您将丢失这些文件的历史记录。