如何使用git为小团队管理几个依赖的Visual Studio项目?

时间:2013-12-20 13:03:01

标签: visual-studio-2010 git dependency-management

我们是一个由开发人员组成的小团队(< 5),主要是与内部网连接。

我们在一些解决方案中使用了一堆C#项目,其中一些取决于 其他人,以及使用这些的解决方案。

一个简短的例子:

We have projects P, Q, R.
 P depends on Q and R,
 Q depends on R.

There are two solutions using these: A and B.
 A uses P, Q, R,
 B uses Q and R.

The dependencies should also include the versions(commit), e.g.
 P V3.7 requires Q V2.4 and R V1.3

到目前为止,我们找不到简单而安全的方法来完成以下所有方法:

  1. 合作(即不仅是个人存储库)
  2. 将项目/解决方案置于版本控制之下(目前是git;如果真的有必要,可以切换)
  3. 如果没有以正确的方式做某事(即没有git submodule
  4. 解决方案/项目应该以某种方式“记住”它依赖项目的版本。

    现在我们将项目解决方案依赖于“按来源”,因为这是解决此项目错误的最舒适方式。但这不是一个严格的要求。

    我们尝试过使用git submodule,但发现很难使用(特别是在Visual Studio中)和协作(子模块origin可能指向错误的存储库)。此外,如果一个解决方案包含两个项目AB,它们本身需要相同的其他项目C,则应该a)相同版本的C和b)不包括两次。

    我们还尝试将所有项目放在“已知目的地”,例如将所有项目文件夹放在一个“visual studio projects& solutions”文件夹中,并使用相对路径引用项目。但这只有在您总是希望包含项目的最新版本时才有效。

    我还尝试使用个人NuGet存储但无法正常工作。

    搜索此主题并未导致任何结果(必定一直在搜索错误的关键字),但我确信这应该是许多团队的首选。

    如果有人能给我一个如何设置存储库和/或一组工具来完成此任务,我将感激不尽。

1 个答案:

答案 0 :(得分:1)

我认为你应该再看一下git子模块。它可以做你要求的一切。您可能希望花几个小时来熟悉它。尝试设置一些测试存储库并进行实验。从命令行执行所有操作。如果您在Visual Studio中使用集成工具,它可能会以不同的方式执行操作,或者可能无法使用最新的git功能进行更新。

当您向项目添加子模块时,git会将标记或分支与该子模块相关联。所以你可以这样做:

假设我有5个git存储库:A,B,P,Q,R。它们都是独立存在的。

在A下我会这样做:

git submodule add <P>

这是对A的更改,因此我必须提交一条消息:

git add .
git commit -m "Added dependency P"

现在我将P克隆在A的子目录中。如果我想要特定版本的P,我会这样做:

cd P
git checkout V3.7

现在A将有一个更改被提交,即在版本3.7中需要P的A记录的更改,所以我想提交更改:

cd ..
git add .
git commit -m "Use P version 3.7"

现在假设您对P进行一些升级并更改版本3.8。回到A,你会重复这个过程:

cd P
git checkout V3.8
cd ..
git add .
git commit -m "Updated P to V3.8"

在从共享存储库中取出之后,任何正在使用A的人都需要这样做:

git submodule update

同时,项目B,也可能有P作为子模块,仍然可以在V3.7上。

这可能有点令人生畏,但不要因为它很难而拒绝它。如果你把它弄下来,航行会更顺畅。