我需要将子文件夹移动到新的git存储库中,然后将其作为子模块重新添加到原始存储库并保留原始目录结构。 Github help建议使用
git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME
过滤保存与此文件夹相关的历史记录的原始仓库等。但是这种方法不完整,很好从原始仓库过滤掉这个目录及其历史记录,并在历史目录中的点重新添加为子模块创建
我有以下目录结构:
/
/lib
/mylib
/server
/src
/tests
LICENSE
README.md
命令
git filter-branch --prune-empty --subdirectory-filter lib/mylib master
将源移动到新repo的根目录,这不是我想要的。上层目录相同:
git filter-branch --prune-empty --subdirectory-filter lib master
将mylib
目录保留在已过滤的回购邮件中(但可能会抓住其他库 - 而不是我的幸运案例)并且工作得更好一些。接下来的步骤是什么:
/lib/mylib
及其历史记录,以减少仓库规模并改善其结构(简单方法只需删除它并重新添加为子模块)。/lib/mylib
repo作为子模块以保留目录结构/lib/mylib
时重新添加历史记录第2点以保持repo的一致性并且可以在任何阶段构建源代码(或者它没有任何意义?)。很难吗?有什么想法吗?
答案 0 :(得分:1)
要保持相同的路径,请执行以下操作:
git filter-branch --prune-empty --subdirectory-filter lib master
lib
git rm -r mylib
目录
git submodule add https://origin_repo/MyLib.git lib