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

3

我想把一个代码库合并到另一个代码库的文件夹中。

当前情况如下:

我有多个代码库,比如 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文件夹合并等等。 有什么最佳解决方案吗?

我还没有找到一个好的方法来做这件事。你可以在“R”中添加“A”,“B”和“C”作为远程,例如 git merge A/<branch> --allow-unrelated-histories,但这会将“A”中的文件放置在应用程序的根目录而不是“A”文件夹中(按照你的布局),然后你可以移动它们。对于 git cherry-pick A/<branch>也是一样的。如果你重新构建“A”文件夹,那么你就成功地将repo A中的文件放入A文件夹中了。 - zrrbite
请查阅[git]子树合并 - jthill
这里有一个回答,虽然不足以标记为重复问题,但应该足以让你找到正确的方向。 - jthill
谢谢@zrrbite,那里有些有趣的东西。 - PierreP
谢谢@jthill,我也发现了一些有趣的东西 :) - PierreP
1个回答

2
在git存储库中,分支的tree结构决定了合并的结果。我不认为你可以说“将这个远程分支合并到这个文件夹中”,因为这需要git重新解释所有的tree对象。
我不确定你能在repos A、B和C上做什么,但如果我重组repo A以模仿R,例如添加repoA作为远程后,就可以使用git merge repoA/master --merge-unrelated-histories进行合并。
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,那么我只需要解决合并冲突即可:

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

1
我成功地完成了我想做的事情。感谢你的帮助! - PierreP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接