[英]How do I set up my git repositories to easily be able to reuse projects in Visual Studio
我的问题最好用一个例子来描述。
假设我有一个项目“A”。
我还有一个项目“B”,它取决于“A”。
另一个项目“C”也取决于“A”。
我的“主要”项目取决于“B”和“C”。 它也可能直接取决于“A”。
当“主要”==“D”时,看起来有点像“可怕的继承钻石 ”
这些是我的要求:
我希望能够在“main”的解决方案中编辑项目“A”,“B”和“C”的内容并提交更改(即我不想只包含DLL而是代码)。 但由于“B”和“C”都依赖于“A”,因此应该强制它们引用相同的提交。
项目“A”,“B”和“C”很可能也会被其他项目引用,因此我不能假设项目“main”的工作目录的所有权。
此外,应该可以将每个项目的存储库与外部存储库同步。
项目“A”,“B”,“C”和“主要”应该是
我如何设置我的存储库来完成此任务?
使用子模块方法 ,我建议使用包含依赖项列表的模型,而不是依赖项层次结构:
创建一个“ parent
”仓库,在其中“ git submodule add
” D
, C
, B
和A
的子模块:
parent
D
C
B
A
添加编译每个项目所需的任何符号链接( 即使在Windows中 )(意味着从自己的结构中查找其依赖项的源)。
“ parent
”repo将引用表示每个依赖项的SHA1的确切列表,其中包含项目在父repo历史记录中的特定时间编译/运行所需的确切版本。
而且,正如我在“ 子模块的真实性质 ”中所解释的那样,您可以在A
, B
, C
或D
进行任何修改,并推送到各自的上游回购 。
但是你不能忘记回到parent
repo,添加并提交表示依赖回购A
, B
, C
和D
的新状态的SHA1修改。
这是一个组件的方法 ,其具有解决任何重叠依赖性的优势在于:如果B
和C
需要不同版本的A
,所述parent
回购将必须选择一个(并且只有一个)的版本A
。
要添加OP Onur的答案:
依赖关系必须是相对的
不一定:您可以在子模块中添加符号链接,如果它需要查看另一个具有固定路径的符号链接。
创建“
user
”存储库如何自动检出正确的库集,例如上面的设置中的A和B.
确定A和B的有效起始版本后,您可以在“父”上下文中创建并推送专用于其使用的分支。
然后你让那些子模块跟随那个分支 ,这意味着任何git submodule update --remote
都会检查子模块A
和B
专用分支的最新SHA1。
只是为了确保我理解你的方法:
我需要做的事情来设置库存储库:
我需要做的事情是将一组选定的库包含到一个新项目中:
实际上,这意味着使用这些库的每个“用户”项目都由“父”存储库中的“from _...”分支和每个使用的库存储库中的“for _...”分支表示。
现在应该看起来像这样
A
branch "for_user"
branch "master" (== for_parent)
<other branches for each project using this library>
B,C,D
<like A>
parent
submodule A - tracks branch dependent on the current branch
submodule B - tracks branch dependent on the current branch
<other submodules>
branch "master" (== from_parent)
branch "from_user"
<other branches for each project using one of the libraries>
user
<own stuff>
submodule A - tracks branch "for_user"
submodule B - tracks branch "for_user"
开放式问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.