我们是一个由开发人员组成的小团队(< 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
到目前为止,我们找不到简单而安全的方法来完成以下所有方法:
git submodule
)现在我们将项目解决方案依赖于“按来源”,因为这是解决此项目错误的最舒适方式。但这不是一个严格的要求。
我们尝试过使用git submodule
,但发现很难使用(特别是在Visual Studio中)和协作(子模块origin
可能指向错误的存储库)。此外,如果一个解决方案包含两个项目A
,B
,它们本身需要相同的其他项目C
,则应该a)相同版本的C
和b)不包括两次。
我们还尝试将所有项目放在“已知目的地”,例如将所有项目文件夹放在一个“visual studio projects& solutions”文件夹中,并使用相对路径引用项目。但这只有在您总是希望包含项目的最新版本时才有效。
我还尝试使用个人NuGet存储但无法正常工作。
搜索此主题并未导致任何结果(必定一直在搜索错误的关键字),但我确信这应该是许多团队的首选。
如果有人能给我一个如何设置存储库和/或一组工具来完成此任务,我将感激不尽。
答案 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上。
这可能有点令人生畏,但不要因为它很难而拒绝它。如果你把它弄下来,航行会更顺畅。