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

Merge repository into a folder of an other repository

我想将一个仓库合并到另一个仓库的文件夹中。

目前,它看起来像这样:

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

-> A 
   .git
-> B
   .git
-> C
   .git

然后我只有一个存储库,例如名为 R 的存储库,其中包含文件夹 A、B、C(它们不是 git 存储库,而是包含与之前的 A、B 几乎相同内容的文件夹, C git 个存储库):

-> R
   .git
   A
   B
   C

我想将 A 存储库与 R 存储库中的 A 文件夹合并,B 存储库与 R 存储库中的 B 文件夹等合并

最好的解决方案是什么?

分支的 git 存储库中 tree 的结构决定了最终的合并。我不相信你可以说“从这个远程合并这个分支,但将它合并到这个文件夹中”,因为这需要 git 到 re-interpret 所有 tree 对象。

我不确定你可以用你的回购协议 A、B 和 C 做什么,但是如果我重组回购协议 A 以有一个“A”文件夹来模仿“R”,我可以,例如git merge repoA/master --merge-unrelated-histories 添加 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

如果我有同名的文件,例如file_from_folder_A.txt 然后我会得到一个 merge-conflict 来解决:

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)
...