我有 3 个项目要分叉。它们都是相互关联的——改变一个可能需要改变另一个。因为它们都是相关的,所以我想为分支创建 1 个存储库,同时保持从每个原始文件中提取更新的能力。
我将如何设置我的 git 存储库?
这些是初步的想法,所以如果这是疯狂/愚蠢的,我不会感到惊讶。是吗?
我有 3 个项目要分叉。它们都是相互关联的——改变一个可能需要改变另一个。因为它们都是相关的,所以我想为分支创建 1 个存储库,同时保持从每个原始文件中提取更新的能力。
我将如何设置我的 git 存储库?
这些是初步的想法,所以如果这是疯狂/愚蠢的,我不会感到惊讶。是吗?
您可能对git-submodule功能感兴趣。从这里引用:
Git 的子模块支持允许存储库作为子目录包含外部项目的签出。子模块保持自己的身份;子模块支持仅存储子模块存储库位置和提交 ID,因此克隆包含项目(“超级项目”)的其他开发人员可以轻松地克隆同一修订版的所有子模块。超级项目的部分签出是可能的:您可以告诉 Git 不克隆任何子模块、部分或全部子模块。
您始终可以使用“ git remote add <name> <url>
”添加更多存储库作为源。
有一种可能性我从未“真正地”尝试过,但这可能效果很好。
假设您有三个创造性地命名为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
,整个事情都看不到修改。你必须git commit
在 Proj1 上,然后你会去整个事情然后git commit
它(现在 git 将能够看到 Proj1 已被修改)。
使用这种方法,整个事情的历史将简单地说明 ProjX 何时被修改,但它不会直接跟踪单个文件。然而,正如预期的那样,ProjX 上的存储库会像往常一样跟踪每个文件。
如果您在“真实项目”上尝试一下,请告诉我结果!
祝你好运!
我想我应该使用子树合并策略。我将不得不实际尝试一下,看看它是否运作良好。如果事实证明这是一个好方法,我会将这个答案标记为已接受。
与此同时,我仍然愿意接受建议。