如何使用git将多个项目分成一个存储库?

时间:2009-11-11 22:17:00

标签: git fork multiple-projects

我有3个项目,我想分叉。他们都彼此相关 - 改变一个可能需要改变另一个。因为它们都是相关的,所以我想为fork创建一个存储库,同时保持从每个原始文件中提取更新的能力。

我如何设置我的git存储库?

这些是初步的想法,所以如果这是疯狂/愚蠢的话,我不会感到惊讶。是吗?

4 个答案:

答案 0 :(得分:5)

您可能对git-submodule功能感兴趣。引自here

  

Git的子模块支持允许a   存储库包含,作为   子目录,结帐   外部项目。子模块保持不变   他们自己的身份;子模块   支持只存储子模块   存储库位置和提交ID,所以   克隆的其他开发者   包含项目(“超级项目”)   可以轻松克隆所有子模块   相同的修订版。部分结帐   超级项目是可能的:你   可以告诉Git克隆无,一些或   所有的子模块。

答案 1 :(得分:3)

您始终可以使用“git remote add <name> <url>”添加更多存储库作为源。

答案 2 :(得分:2)

有一种可能性我从未尝试过“真实”,但这种方法可能效果很好。

假设您有三个项目创造性地命名为 Proj1 Proj2 和(猜测它) Proj3 。我们还要说它们中的全部或部分依赖于外部库,例如一个名为 Lib1.dll ,另一个名为 SuperLib.dll

首先,对于文件夹结构,我会做类似的事情:

MyCode\
    build_all.bat
    Docs\
        [...]
    Libs\
        Lib1.dll
        SuperLib.dll
    Proj1\
        [...]
    Proj2\
        [...]
    Proj3\
        [...]

然后,您将在每个ProjX文件夹上创建一个存储库:

cd \MyCode\Proj1
git init
cd \MyCode\Proj2
git init
cd \MyCode\Proj3
git init

然后你会为整个事情创建一个存储库:

cd \MyCode
git init

对于git,此存储库的内容将是Libs文件夹及其内容,build_all.bat构建脚本和3个子项目。

因此,一旦您更改了源代码,让我们说Proj1\Main.cs整个将无法看到修改。您必须在Proj1上git commit,然后您将转到整个事物然后git commit它(现在git将能够看到Proj1已被修改)

使用此方法,整个事物的历史记录将简单地说明修改ProjX的时间,但它不会直接跟踪单个文件。正如预期的那样,ProjX上的存储库会像往常一样跟踪每个文件。

如果您尝试“真实项目”,请告诉我结果!

祝你好运!

答案 3 :(得分:1)

我想我应该使用subtree merge strategy。我真的要试一试,看看它是否运作良好。如果这是一个很好的方法,我会将这个答案标记为已被接受。

与此同时,我仍然愿意接受建议。