你如何结合两个git回购?

时间:2010-02-12 19:44:56

标签: git

我有一个与我合作的主回购(回购1)。我有另一个需要适应第一个的回购(回购2),我不知道如何将它们放在同一个文件夹中。我的想法是,我在每个项目中都有一个标准的代码库 - 但每个项目都是它自己的git repo。

/project
    /.git(repo 2)
    /.git(repo 1)
    /repo_2_sub
        /repo_2_sub_sub
            /repo_1_sub_sub
    /repo_1_sub
        /repo_1_sub_sub
        /repo_2_sub_sub

没有文件重叠 - 但有些文件夹结构会重叠。因此,有时一个仓库中的某些文件夹将位于另一个仓库中。

我如何工作,以便这两个存储库构建完整的代码库?

更新

两个git repos都存在于同一个根项目文件夹级别。它们不能是子模块,因为它们如上所示来回穿过彼此。它们不是单独的文件夹。

更新2

等等,也许这比我想象的要容易。你可以克隆一个标准的代码库repo,然后创建一个新的分支,它是你的项目,然后每次更改时都继续将该分支与codebase repo合并?

3 个答案:

答案 0 :(得分:2)

使用git submodule

更新

需要成为所有repos的一部分的标准代码库必须是一个单独的不同git存储库。

git submodule add <repo_nick_name> <repo_path>

会将该回购添加到此回购中。在克隆和推送时,只会推送/克隆.gitmodules文件和repo中的哈希值。

git submodule init

git submodule update

分别初始化和更新远程子模块库。

有关详细信息,请查看git community book documentation on git submodules和/或scot chacon的截屏视频。

答案 1 :(得分:2)

编辑:为了拥有两个.git目录,当你启动它们时,会有一些额外的工作。当你初始化时,执行:

git --git-dir=.git1 --work-tree=. init
git --git-dir=.git2 --work-tree=. init

现在你在同一个目录中有两个git dirs。不是很漂亮此时,请确保两个.gitignores中都有.git1和.git2,因为默认情况下不会忽略它们。此外,您运行的每个git命令还必须具有--git-dir参数,以指定您正在与哪个存储库进行交互。您可以为此设置别名。

由于它们位于相同的基本目录中且子模块不起作用,因此可以将“.gitignore”文件放在“.git / info / exclude”目录中。将它们放在.git / info / exclude中可以确保其他仓库不会获取排除。

如果两个存储库的粒度比文件夹更精细,则可能需要一些维护,但如果您在每个.gitignore中指定仅属于OTHER存储库的文件,它应该可以工作。

请参阅:gitignore

答案 2 :(得分:1)

  

等等,也许这比我容易   思想。你能克隆标准吗?   codebase repo然后创建一个新的   分支是你的项目然后   只是继续合并那个分支   codebase repo每次更改?

你可以这样做。我还有一个项目,我这样做。对于所有子项目,大多数代码都是相同的。我为每个项目创建一个新分支,以保持仅属于该项目的文件分开。我经常将master分支合并到其他分支。

您还可以创建主存储库的克隆。然后,您只需将origin/master分支中的更改合并到每个项目中的master分支中。