我有两个git存储库:
git_repo_A: https://github.com/gnychis/coexisyst
git_repo_B: https://github.com/gnychis/android-wireless-monitor
我想将git_repo_A中的所有内容移动到git_repo_B中名为:application的子目录中。我想保留所有提交和文件历史记录。
因此,移动后,git_repo_A将如下所示:
git_repo_A/application/git_repo_B
我发现这个网站基本上描述了我想要的确切操作:http://www.nomachetejuggling.com/2011/09/12/moving-one-git-repo-into-another-as-subdirectory/
所以我试了一下,但我不认为它做了我想要的。
看起来最终发生的事情是主目录中的两个。*文件被添加到git_repo_A / ...然后我想要显示为git_repo_A / application的所有内容最终都作为删除操作。以下是移入git_repo_A的相关两个操作:
https://github.com/gnychis/android-wireless-monitor/commit/23e6639221733158d197bf7c29df8998e8a5c2ef
https://github.com/gnychis/android-wireless-monitor/commit/455ba86a80d8300b16bdd9527c444ebad78f7a9a
我完全按照说明操作,但这并不意味着说明是正确的。我认为他们移动整个目录而不重新添加它是奇怪的。但是,我担心如果你移动它然后重新添加它,它就不会保留文件历史记录。
我是唯一使用这些存储库的人。因此,重置3月9日发生的所有内容并重新开始:https://github.com/gnychis/android-wireless-monitor/commits/
也是一件好事答案 0 :(得分:3)
我之前做过类似的事情。它几乎与链接中列出的进程完全相同,除了这允许您在提交合并之前进行清理。
1)在RepoB(您要保留的那个)中,向RepoA添加遥控器
git remote add RepoA <path_to_repo>
2)将RepoA历史记录提取到RepoB中
git fetch RepoA
3)合并您的相关分支机构(假设您使用的是RepoB / master)
git merge RepoA/master
4)将RepoA文件移动到相应的子文件夹并提交
git add .
git commit -a
如果您没有对RepoB做任何事情,因为按照您发布的说明,您可以这样做:
git reset HEAD~
现在移动任何文件并清理你需要的东西
git add .
git commit -a
就移动文件和保存历史而言,git默认会跟踪少量文件的重命名,因为这样做很慢。如果您希望它跟踪所有内容,您可以使用以下命令
git config --global diff.renamelimit 0