5

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

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

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

4

4 回答 4

5

您可能对git-submodule功能感兴趣。从这里引用:

Git 的子模块支持允许存储库作为子目录包含外部项目的签出。子模块保持自己的身份;子模块支持仅存储子模块存储库位置和提交 ID,因此克隆包含项目(“超级项目”)的其他开发人员可以轻松地克隆同一修订版的所有子模块。超级项目的部分签出是可能的:您可以告诉 Git 不克隆任何子模块、部分或全部子模块。

于 2009-11-11T23:47:50.307 回答
4

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

于 2009-11-11T23:14:14.417 回答
2

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

假设您有三个创造性地命名为Proj1Proj2和(猜猜看)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整个事情都看不到修改。你必须git commit在 Proj1 上,然后你会去整个事情然后git commit它(现在 git 将能够看到 Proj1 已被修改)。

使用这种方法,整个事情的历史将简单地说明 ProjX 何时被修改,但它不会直接跟踪单个文件。然而,正如预期的那样,ProjX 上的存储库会像往常一样跟踪每个文件。

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

祝你好运!

于 2009-11-11T23:20:55.470 回答
1

我想我应该使用子树合并策略。我将不得不实际尝试一下,看看它是否运作良好。如果事实证明这是一个好方法,我会将这个答案标记为已接受。

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

于 2009-11-12T03:04:16.450 回答