使用简单的git命令的手动步骤
计划是将各个目录拆分成自己的存储库,然后将它们合并在一起。以下手动步骤未使用极客脚本,而是使用易于理解的命令,可以帮助将多余的N个子文件夹合并到另一个存储库中。
划分
假设您的原始仓库是:original_repo
1-拆分应用程序:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2-拆分库
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
如果您有两个以上的文件夹,请继续。现在您将拥有两个新的临时Git存储库。
通过合并应用程序和库来征服
3-准备全新的仓库:
mkdir my-desired-repo
cd my-desired-repo
git init
并且您将需要至少进行一次提交。如果应跳过以下三行,则第一个存储库将立即显示在存储库根目录下:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
提交临时文件后,merge
后面部分中的命令将按预期停止。
从用户的反馈中获取信息,a_file_and_make_a_commit
您可以选择添加.gitignore
或,而不是添加诸如的随机文件README.md
。
4-首先合并应用回购:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
现在,您应该在新存储库中看到apps目录。git log
应该显示所有相关的历史提交消息。
注:克里斯的评论,为的git的新版本(> = 2.9)低于所指出的,你需要指定--allow-unrelated-histories
用git merge
5-接下来以相同的方式合并库回购:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
如果有两个以上的仓库要合并,请继续。
参考:使用git合并另一个存储库的子目录