首页 > 解决方案 > 不相关 repos 的 Git 合并是否需要特定版本的 Git?

问题描述

我正在尝试重新组织我的代码目录并合并两个不相关的 Git 存储库。两个仓库都是本地的。

我在这里发现了一个类似的问题:如何合并两个 Git 存储库?

...但解决方案对我不起作用。我在评论部分对此进行了询问,另一位用户建议我将我的问题作为一个单独的问题提出。

我创建了一个测试/沙盒环境来测试解决这个 Git 合并问题。我的设置是:

/home/dir01/merge_repos  # this is the sandbox dir
|
/home/dir01/merge_repos/old_dir_01/old_repo # git init was done here; .git directory exists here

/home/dir01/merge_repos/old_dir_01/old_repo/source_file_01.py
/home/dir01/merge_repos/old_dir_01/old_repo/source_file_01.py
|
/home/dir01/merge_repos/new_repo  # git init was also done here.

我想将 old_repo 中的文件与 new_repo 中的 Git 存储库合并。

根据原始问题中提供的解决方案,我执行了以下操作:

  1. 我在 new_repo 下创建了一个虚拟文件,然后对该虚拟文件进行了 git add 和 git commit。

  2. 在 new_repo/ 目录中,我发出 > git remote add old_repo /home/dir01/merge_repos/old_dir_01/old_repo

  3. git fetch old_repo --tags

  4. git merge --allow-unrelated-histories old_repo/master

在第 4 步,Git 抱怨这--allow-unrelated-histories是一个未知选项。

所以我尝试了git merge没有 --allow-unrelated-histories 选项。这没有用;Git 抱怨fatal: old_repo/master - not something we can merge.

我的问题是,我可以使用低于 v2.9 的 Git 版本对两个不相关的 Git 存储库进行 Git 合并吗?

我正在使用 Git v1.8.3.1。

标签: gitmerge

解决方案


要跟进我最初的问题,不,您不需要特定版本的 Git 来进行 Git 合并。

对于 v2.9 或更高版本的 Git,Git 提供了该--allow-unrelated-histories选项。所以你按照这里的回答去做:你如何合并两个 Git 存储库?

cd path/to/project-b
git remote add project-a /path/to/project-a
git fetch project-a --tags
git merge --allow-unrelated-histories project-a/master 
git remote remove project-a

对于不支持该--allow-unrelated-histories选项的 Git 版本,您仍然可以进行 Git 合并,但略有不同。

cd path/to/project-b
git remote add project-a /path/to/project-a
git fetch project-a # Don't use the --tags option
git merge project-a/master # Don't use the --allow-unrelated-histories option
git remote remove project-a

感谢@paulsm4 的回答。


推荐阅读