我有3个项目,我想分叉。他们都彼此相关 - 改变一个可能需要改变另一个。因为它们都是相关的,所以我想为fork创建一个存储库,同时保持从每个原始文件中提取更新的能力。
我如何设置我的git存储库?
这些是初步的想法,所以如果这是疯狂/愚蠢的话,我不会感到惊讶。是吗?
答案 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。我真的要试一试,看看它是否运作良好。如果这是一个很好的方法,我会将这个答案标记为已被接受。
与此同时,我仍然愿意接受建议。