Git和TFS版本控制团队工作

时间:2018-03-02 10:33:20

标签: c# git visual-studio tfs version-control

我们是一家拥有约15名C#开发人员的中型公司

我们想解雇sourcesafe(五年谈论它!!!)并使用Gi​​t和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子目录)。

是不是?

我们怎样才能以另一种方式获得这个结果?

我们希望避免的是创建一个独特的存储库并强制开发人员下载所有类和解决方案

2 个答案:

答案 0 :(得分:3)

您的解决方案设置听起来非常安全(这是有道理的,因为这就是您正在使用的),但旧策略不会轻易地转入Git或TFVC。两个系统都缺少VSS Pin功能,因此您无法在多个文件夹 1)中使用相同的文件。

让我们回答你的问题:

我们想解雇sourcesafe(五年来谈论它!!!)并去使用Git和TFS

大!这听起来真是个好主意。当你在这里时,我真的建议你研究一下Visual Studio Team Services 而不是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代理)也支持子模块。

2018年TFS和Visual Studio Team Services提供了一个内置的NuGet存储库功能(包管理),您可以利用它来共享和管理这些共享类。我个人推荐这条路线。为共享代码创建一个separarte存储库,并配置CI构建以自动创建具有最新更改的NuGet包。然后,您可以从依赖项目中引用此NuGet包。

无论您的目标解决方案如何,您可能都需要重构一下您的解决方案结构。子模块只能加载到子目录中。

我们希望避免的是创建一个独特的存储库并强制开发人员下载所有类和解决方案

我想知道为什么,但是如果你想分成不同的存储库,那么子模块或单独的Git存储库+ NuGet包将为你解决这个问题。 NuGet解决方案也适用于TFVC。

还要记住,使用Git,您始终可以创建完整的本地副本,包括链接存储库的所有历史记录。

答案 1 :(得分:1)

感谢您的回答

关于迁移到Git和TFS,因为现在人们很难从他们所知道的变为未知。我正在努力......

另一个问题是我们必须停止工作几天(有多少人?谁知道?)在迁移过程中有丢失数据或部分代码的危险

但我知道我们会这样做

关于锁定文件我认为很难知道它是好还是坏。我相信它取决于具体情况

在我们的场景(中小型公司)中,开发人员在没有与其他人交互的情况下处理特定项目,它是有效的

在世界各地的人们发生变化的情况下,正如您所写,它无效

我也尝试过visual studio的合并,我发现它非常不安,我们改变1个代码行只是为了试一试!如果你必须合并更多的代码部分,我不知道它是怎么回事。更好的是Git的合并

开发人员在合并文件或修复代码时会丢失多少次?

关于支持多个存储库的VS我只是在一个月之前就不可能了

你能告诉我一些关于它的事吗? 你写道我们将不得不使用子模块和很多Git命令行。与Sourceafe的管理层相比,您认为它不是很不舒服吗? 或者,VS让开放式存储库如引用

就足够了

我们也考虑过nuget包 我们已经准备好从这些解决方案开始,但是一些开发人员抱怨说他们无法在调试期间更改代码运行时(它很难实现许多人的同意......)

另一个问题是每次你的nuget包及其依赖时你必须部署。它比参考项目更复杂

我会珍惜你的答案,试图改变我们的心态