Visual studio 2010 如何设置git存储库以便能够轻松地在VisualStudio中重用项目

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”很可能也会被其他项目引用

我的问题最好用一个例子来描述

假设我有一个项目“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”和“主要”应为

我需要如何设置我的存储库来实现这一点?

使用,我建议使用包含依赖项列表的模型,而不是依赖项的层次结构:

创建一个“
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服务器,也可以使用共享驱动器