代码之家  ›  专栏  ›  技术社区  ›  Berlin Brown

我可以合并两个具有类似内容但不共享任何祖先的Git存储库吗?

  •  14
  • Berlin Brown  · 技术社区  · 15 年前

    我有两个基本代码,基本代码1,基本代码2。

    我执行命令…

    git init
    git add .
    git commit -m "Initial Commit"
    

    …在两个存储库(目录)中。

    代码库1和代码库2之间存在代码差异。

    我不能对它们进行分支,因为它们已经包含了大约0.1%的差异。文件名相同,但对代码进行了一些细微的编辑。

    有没有一种方法可以合并两个存储库之间的差异?

    编辑:

    例如,假设我有以下内容。这就是我要开始做的。代码基1和代码基2之间存在细微差异。

    [oldest code case] 
    code-base-1/ 
    code-base-1/.git  [git stuff with already created repo] 
    code-base-1/file1 
    code-base-1/file2 
    
    code-base-2/ 
    code-base-2/.git [git stuff with already created repo] 
    code-base-2/file1 
    code-base-2/file2 
    

    理想情况下,我可以删除code-base-2,因为它有点更新。

    我将如何合并这些代码基,以便最终得到一个包含合并文件的代码基?

    3 回复  |  直到 13 年前
        1
  •  7
  •   Community CDub    8 年前

    问题可能来自两个不同的存储库(具有不同的sha-1第一个节点),而不是一个克隆后再修改的repo。
    这意味着 git fetch “可能还不够。

    您只需使用一个外部工具(即Git的外部工具)来合并 内容 将cb2(code-base-2)转换为cb1,如问题中建议的winmerge。 Merging in changes from outside a git repository “。

    另一种选择是使用一些移植技术来完成提取:请参见问题“ Can two identically structured git repos be merged when they have never had any common history?

    $ cd project1
    $ git config remote.project2.url /path/to/project2
    $ git config remote.project2.fetch 'refs/heads/*:refs/project2/*'
    $ git fetch project
    

    加上修改移植文件( .git/info/grafts )将项目2的提交链接到项目1。

        2
  •  4
  •   Fake Code Monkey Rashid    15 年前

    尝试:

    cd code-base-1
    git fetch ../code-base-2 master:code-base-2
    git merge code-base-2
    
        3
  •  -2
  •   David Plumpton    15 年前

    如您所述,创建第一个存储库。

    在第二个文件夹中创建 文件 名为“.git”,内容:

    gitdir: <path-to-first-repository>/.git
    

    在第二个存储库中,您现在可以运行git diff、git add/commit等来合并更改。