Git 将存储库合并到其他存储库的文件夹中

Git 将存储库合并到其他存储库的文件夹中,git,merge,repository,Git,Merge,Repository,我想将一个存储库合并到另一个存储库的文件夹中 目前看起来是这样的: 我有多个存储库,如A、B、C -> A .git -> B .git -> C .git 然后我只有一个存储库,例如R,它包含文件夹A、B、C(这不是git存储库,而是唯一一个文件夹,它包含的内容与以前的A、B、C git存储库几乎相同): 我想将一个存储库和R存储库中的一个文件夹合并,将B存储库和R存储库中的B文件夹合并,等等 最好的解决方案是什么?git存储库中分支的树的结构决定了结果

我想将一个存储库合并到另一个存储库的文件夹中

目前看起来是这样的:

我有多个存储库,如A、B、C

-> A 
   .git
-> B
   .git
-> C
   .git
然后我只有一个存储库,例如R,它包含文件夹A、B、C(这不是git存储库,而是唯一一个文件夹,它包含的内容与以前的A、B、C git存储库几乎相同):

我想将一个存储库和R存储库中的一个文件夹合并,将B存储库和R存储库中的B文件夹合并,等等


最好的解决方案是什么?

git存储库中分支的
树的结构决定了结果合并。我不相信你能说“从这个遥控器合并这个分支,但是把它合并到这个文件夹”,因为这需要git重新解释所有的
对象

我不确定你可以对你的回购A、B和C做什么,但如果我将回购A重组为有一个“A”文件夹来模拟“R”,我可以,例如,
git merge repoA/master——在将
repoA
添加为远程后,合并不相关的历史记录

zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master)
$ git fetch repoA
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 2 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
From D:/dev/git/repotest_A
   b73c55c..0b2748b  master     -> repoA/master

zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master)
$ git merge repoA/master --allow-unrelated-histories
Merge made by the 'recursive' strategy.
 A/file_from_A.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 A/file_from_A.txt

zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest/A (master)
$ ls
file_from_folder_A.txt  file_from_repo_A.txt
如果我有相同名称的文件,例如文件夹A.txt中的
file\u,那么我只需要得到一个合并冲突来解决:

zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master)             
$ git merge repoA/master --allow-unrelated-histories             
CONFLICT (add/add): Merge conflict in A/file_from_folder_A.txt               
Auto-merging A/file_from_folder_A.txt                                        
Recorded preimage for 'A/file_from_folder_A.txt'                             
Automatic merge failed; fix conflicts and then commit the result.
                                                             
zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master|MERGING)
...     

我还没有找到一个好办法。您始终可以在“R”中添加“A”、“B”和“C”作为遥控器,例如,
git merge A/--允许不相关的历史记录
,但这会将“A”中的文件放在应用程序的根目录中,而不是文件夹“A”(根据您的布局)中,然后您可以移动该文件夹。这同样适用于git cherry pick A/
。如果要将“A”重组为“A”文件夹,则可以成功地将文件从repo A获取到文件夹A中。查找[[git]子树合并]()。一个不足以标记为dup机器人的答案应该足以让你走上正确的道路。谢谢@zrrbite,在那里发现了一些有趣的东西。谢谢@jthill也发现了一些有趣的东西:)我成功地完成了我想做的事情。谢谢你的帮助!
zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master)             
$ git merge repoA/master --allow-unrelated-histories             
CONFLICT (add/add): Merge conflict in A/file_from_folder_A.txt               
Auto-merging A/file_from_folder_A.txt                                        
Recorded preimage for 'A/file_from_folder_A.txt'                             
Automatic merge failed; fix conflicts and then commit the result.
                                                             
zrrbite@ZRRBITE MINGW64 /d/dev/git/repotest (master|MERGING)
...