【问题标题】:Does a Git merge of unrelated repos require a certain version of Git?不相关回购的 Git 合并是否需要特定版本的 Git?
【发布时间】:2021-07-06 12:10:26
【问题描述】:

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

我在这里发现了一个类似的问题:How do you merge two Git repositories?

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

我创建了一个测试/沙盒环境来测试解决这个 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 是一个未知选项。

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

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

我正在使用 Git v1.8.3.1。

【问题讨论】:

  • “我正在使用 GIT v 1.8.3.1” 好的,有人会问为什么吗? Git 2.9 是五年前的事了。 5年!用计算机术语来说,这就是一生。 2.31 现在我们在做什么?
  • 我实际上建议尝试类似this:# in proj2: git remote add proj1 path/to/proj1; git fetch proj1; git merge proj1/master # or whichever branch you want to merge,是的,你应该绝对将你的 Git 升级到 2.25 或更高版本
  • 注意:安全漏洞.....github.blog/…。另请阅读:serverfault.com/questions/709433/…
  • @matt,我使用了 Centos v7.7 附带的那个。直到现在才发现不需要升级 GIT。
  • 1) 阅读我的链接中的主题以解决您的问题。 2) 升级你的 Git ......因为你需要 :) PS:Centos 7 已经 6 岁多了 - 它有很多过时的软件包并不奇怪。

标签: git merge


【解决方案1】:

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

对于 v2.9 或更高版本的 Git,Git 提供了--allow-unrelated-histories 选项。所以你按照这里的回答去做:How do you merge two Git repositories?

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 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2018-08-20
    • 2021-07-27
    相关资源
    最近更新 更多