Visual studio 2010 如何设置git存储库以便能够轻松地在VisualStudio中重用项目
我的问题最好用一个例子来描述 假设我有一个项目“a” 我还有一个项目“B”,它依赖于“a” 另一个项目“C”也依赖于“A” 我的“主要”项目取决于“B”和“C”。也可能是它也直接依赖于“A” 看起来有点像当“main”=“D”时 以下是我的要求:Visual studio 2010 如何设置git存储库以便能够轻松地在VisualStudio中重用项目,visual-studio-2010,git,visual-studio,Visual Studio 2010,Git,Visual Studio,我的问题最好用一个例子来描述 假设我有一个项目“a” 我还有一个项目“B”,它依赖于“a” 另一个项目“C”也依赖于“A” 我的“主要”项目取决于“B”和“C”。也可能是它也直接依赖于“A” 看起来有点像当“main”=“D”时 以下是我的要求: 我希望能够在“main”的解决方案中编辑项目“A”、“B”和“C”的内容,并提交更改(即,我不希望只包括DLL,还包括代码)。但是,由于“B”和“C”都依赖于“A”,因此应该强制它们引用相同的提交 项目“A”、“B”和“C”很可能也会被其他项目引用
- 我希望能够在“main”的解决方案中编辑项目“A”、“B”和“C”的内容,并提交更改(即,我不希望只包括DLL,还包括代码)。但是,由于“B”和“C”都依赖于“A”,因此应该强制它们引用相同的提交
- 项目“A”、“B”和“C”很可能也会被其他项目引用,因此我不能承担项目“main”的工作目录的所有权
- 此外,还可以将每个项目的存储库与外部存储库同步
- 项目“A”、“B”、“C”和“主要”应为
parent
”回购协议,在该回购协议中,您“为D
、C
、B
和a
创建子模块:
parent
D
C
B
A
为每个要编译的项目添加所需的任何符号链接()(意味着从它们自己的结构中找到它们的依赖项的源代码)
“parent
”repo将引用SHA1的精确列表,该列表表示项目在父repo历史记录中的特定时间编译/运行所需的每个依赖项的精确版本
而且,正如我在“”中所解释的,您可以在A
、B
、C
或D
中进行您想要的任何修改,并推送到它们各自的位置。但您不能忘记返回父回购,添加并提交代表从属回购新状态的SHA1修改
A
、B
、C
和D
这是a,它具有解决任何重叠依赖关系的优势:如果B
和C
需要不同版本的a
,则父公司回购必须选择一个(且仅一个)版本的a
要补充OP Onur的回答:
依赖关系必须是相对的
不一定:如果子模块需要查看具有固定路径的其他子模块,则可以在子模块中添加符号链接
创建“用户
”存储库
如何在上述设置中自动检出正确的库集,例如A和B
一旦确定了A和B的有效起始版本,就可以创建并推送一个专用于在“父”上下文中使用它们的分支。
然后,您(意味着任何git子模块更新--remote
将在该专用分支的最新SHA1中签出子模块A
和B
,以确保我理解您的方法:
设置库存储库需要做的事情:
创建“父”存储库
为每个库创建一个子模块
依赖项必须是相对的,即,如果D依赖于B,则路径应类似于.././B/某个文件夹
父存储库中的每个提交表示库的有效组合
我需要做的事情是在新项目中包含一组选定的库:
创建“用户”存储库
在所需的库和相应的存储库(例如a和B)中创建一个分支,如“for_user”,并跟踪“user”项目中的子模块
在“父”存储库中创建一个“自用户”分支,用于跟踪所用库的更改(是否可以按分支跟踪存储库分支?)
包括所选的一组库,例如“for_user”分支中的A和B
在A和/或B中所做的更改将转到该分支,如果合适,可以合并到“父”主分支和/或合并到使用这些库的其他项目的其他“源…”分支使用“父”项目创建一致的库集。
实际上,这意味着使用这些库的每个“用户”项目都由“父”存储库中的“来自…”分支和每个使用的库存储库中的“用于…”分支表示。
设置现在应该是这样的
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"
A
分支“供用户使用”
分支“主节点”(==表示父节点)
B、 C,D
父母亲
子模块A-跟踪依赖于当前分支的分支
子模块B-跟踪依赖于当前分支的分支
分支“主节点”(==来自父节点)
分支“来自用户”
用户
子模块A-跟踪“针对用户”的分支
子模块B-跟踪“针对用户”的分支
开放性问题:
- 如何在上述设置中自动检出正确的库集,例如A和B?我可以检查所有可用的库,但这将以某种方式消除每个库对单独子模块的需要
请勿(ab)为此使用git或任何版本控制系统
使用。
您不希望直接包括其他项目。相反,将每个依赖项打包到.nuget包中,并将其用于依赖项处理。虽然子模块似乎是问题的解决方案,但在实践中,您最好使用适当的依赖关系管理,而不只是包括其他项目
其他CI系统,甚至TFS,允许您自动构建新的nuget包,TeamCity也可以充当nuget服务器
如果您不想使用“真正的”NuGet服务器,也可以使用共享驱动器