Git和TFS版本控制团队工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git和TFS版本控制团队工作相关的知识,希望对你有一定的参考价值。
我们是一家拥有约15名C#开发人员的中型公司
我们想解雇sourcesafe(五年谈论它!!!)并开始使用Git和TFS
Git因为我们希望拥有所有集中式和VS集成/功能,因此可能是版本控制和TFS的过去,现在和未来
特别是我们希望避免两个或更多人同时处理同一个文件
我们有3大产品
- ERP
- 现金点软件
- 网络产品目录(所有其他网络项目)
因此,有3个团队在3个项目/区域工作
我们有所有团队使用的公共类和每个团队使用的特定类
例如
Proj1使用:
- 解决方案项目(窗体)
- Class1 Common
- Class2 Common
- Class1 Erp
- Class2 Erp
Proj2使用:
- 解决方案项目(窗体)
- Class1 Common
- Class3 Common
- Class4 Common
- Class1 Cash Point
- Class2 Cash Point
Proj3使用:
- 网络项目
- Class1 Common
- Class2 Common
- Class3 Common
- Class1 Web
- Class2 Web
我们想为每个类创建一个存储库,然后在主项目解决方案中使用它们,但我已经读过它不可能使用Visual Studio和TFS(git子目录)。
这样对吗?
我们怎样才能以另一种方式获得这个结果呢?
我们希望避免的是创建一个独特的存储库并强制开发人员下载所有类和解决方案
您的解决方案设置听起来非常安全(这是有道理的,因为这就是您正在使用的),但旧策略不会轻易地进入Git或TFVC。两个系统都缺少VSS Pin功能,因此您无法在多个文件夹中使用相同的文件1)。
我们来回答你的问题:
我们想解雇sourcesafe(五年谈论它!!!)并开始使用Git和TFS
大!这听起来真是个好主意。当你在这里时,我真的建议你研究一下Visual Studio Team Services vsts而不是TFS。听起来您的组织并不擅长保持最新状态,并且向VSTS迈出的一步将帮助您实现这一目标。微软会每隔3周自动为您提供最新信息。
如果您需要保持内部部署,请确保每年都有重大升级和每季度服务包安装。
特别是,我们希望避免两个或更多人同时处理同一个文件
至于锁定文件,这已成为过去。鉴于Git的分布式特性,它并不意味着锁定任何东西。它使用非常先进的合并技术,尽可能简单地合并您的更改,无论您正在制作什么样的混乱。 Git最初开发用于支持Linux内核源代码并管理来自世界各地的人们的异步更改。在这种情况下,中央锁定将是一场噩梦。
在TFVC中,锁定的概念仍然存在,但前提是您使用的是2010风格的服务器工作区。 2012年推出的Local工作区(大多数项目的默认工作区)也取消了锁定文件。 TFVC在这方面确实有更多的功能可以帮助你(通过Git),例如,Incoming Changes代码镜头会在其他人在每个方法的正上方检查代码时发出警告,以防止您在没有先同步源的情况下意外编辑它们。锁定文件仅在以下情况下有效:所有开发人员都在使用服务器工作空间,并且明确打开了独占结账时(默认情况下自2005年起关闭)。
因此,虽然TFVC支持独占结账,但所有默认设置都会让您远离此工作流程。这应该说点什么。
我们想为每个类创建一个存储库,然后在主项目解决方案中使用它们,但我已经读过它,这是不可能使用Visual Studio和TFS(git子目录)。
最好将您的共享类提取到一个单独的项目中,然后将该单独的项目放在Git子模块中,或者将该单独的项目打包到NuGet包中,并以这种方式在您的其他项目中引用这些共享类。
Visual Studio 2017对子模块有“支持”。它可以加载它们并在更改窗口中显示它们,但UI不是很直观,需要一些工作才能使它易于使用。在采用子模块路由时,你可能不得不依赖于使用git命令行。 VSTS / TFS Build代理(不是XAML代理)也支持子模块。
TFS 2018和Visual Studio Team Services提供了内置的NuGet存储库功能(包管理),您可以利用它来共享和管理这些共享类。我个人推荐这条路线。为共享代码创建一个separarte存储库,并配置CI构建以自动创建具有最新更改的NuGet包。然后,您可以从依赖项目中引用此NuGet包。
无论您的目标解决方案如何,您可能都需要重构一下您的解决方案结构。子模块只能加载到子目录中。
我们希望避免的是创建一个独特的存储库并强制开发人员下载所有类和解决方案
我想知道为什么,但如果你想分成不同的存储库,那么子模块或单独的Git存储库+ NuGet包将为你解决这个问题。 NuGet解决方案也适用于TFVC。
还要记住,使用Git,您始终可以创建完整的本地副本,包括链接存储库的所有历史记录。
感谢您的回答
关于迁移到Git和TFS,因为现在人们很难从他们所知道的变为未知。我在做这个工作....
另一个问题是我们必须停止工作几天(有多少人?谁知道?)在迁移过程中有丢失数据或部分代码的危险
但我相信我们会这样做
关于锁定文件我认为很难知道它是好还是坏。我相信这取决于具体情况
在我们的场景(小型/中型公司)中,开发人员在没有与其他项目交互的情况下处理特定项目,这是有效的
在你所写的世界各地人们的变化中,这是无效的
我也尝试过visual studio的合并,我发现它非常不安,我们改变1个代码行只是为了试一试!我不知道如果你必须合并更多的代码部分是怎么回事。更好的是Git的合并
开发人员在合并文件或修复代码时会丢失多少次?
关于VS支持多个存储库,我认为它不可能仅在一个月前
你能告诉我一些关于它的事吗?你写道我们将不得不使用子模块和很多Git命令行。与sourcesafe的管理相比,你不觉得这很不舒服吗?或者VS让我们打开存储库就像引用一样就足够了
我们还考虑过nuget包我们已经准备好从这些解决方案开始了,但是一些开发人员抱怨说他们无法在调试期间更改代码运行时(很难让很多人同意......)
另一个问题是每次你的nuget包及其依赖时你必须部署。它比作为项目的引用更复杂
我会珍惜你的答案,试图改变我们的心态
以上是关于Git和TFS版本控制团队工作的主要内容,如果未能解决你的问题,请参考以下文章