将存储库合并到另一个存储库的文件夹中
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)
...
我想将一个仓库合并到另一个仓库的文件夹中。
目前,它看起来像这样:
我有多个存储库,例如 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)
...