请解决签出并锁定vs更新和合并版本控制辩论

时间:2009-09-16 16:35:58

标签: visual-studio merge version-control sourcegear-vault

我已经使用了几年的源代码管理(如果算上Source Safe年份),但我绝不是专家。我们目前使用的是较旧版本的Sourcegear Vault。我们的团队目前使用结账和锁定模式。我宁愿切换到更新和合并模型,但需要说服其他开发人员。

开发人员(不是我)设置为检出和锁定的原因是由于叛逆文件。我们公司与一家咨询公司合作,完成我们的大部分开发工作。几年前,在我离开这里之前很久,他们已经设置了源代码控制以进行更新和合并。顾问去办理登机手续,但遇到合并错误。然后他们选择以断开连接模式工作 。当最后时间测试项目时,出现了错误,并且发现代码库有很大不同。几周的工作最终不得不重做。所以他们去检查并锁定解决方案。

我不喜欢签出和锁定,因为这使得2个或更多人同时在同一个项目中工作变得非常困难。每当您添加任何类型的新文件或更改文件名时,源代码管理都会检出.csproj文件。这可以防止任何其他开发人员添加/重命名文件。

我考虑过只将.csproj文件设为可合并,但Sourcegear网站说这是一个坏主意,因为csproj是IDE自动生成的,你不能保证两个不同的VS生成的文件会产生相同的代码。

我的朋友(另一位开发人员)告诉我,解决方案是立即检查您的项目。对我来说,问题在于我可能有一个不会构建的本地副本,它可能需要一些时间来构建。我可能需要几个小时才能使构建工作,这意味着在此期间,没有其他人能够创建和重命名文件。

我反驳说正确的解决方案是切换到可靠的模型。我对“叛徒档案”问题的回答是,这是一个程序员纪律差的问题,你不应该使用较弱的程序员选择来解决不良的纪律;相反,你应该采取行动来解决缺乏程序员纪律的问题。

那么谁是对的?办理登机手续 - 查看叛徒档案问题的合理答案?或者.csproj问题是否对多个开发人员来说太麻烦了?或者Sourcegear是错的,并且可以将csproj文件设置为更新和合并吗?

6 个答案:

答案 0 :(得分:5)

您遇到的更新和合并问题源于您的小组与咨询小组之间缺乏沟通,以及咨询小组与您的小组之间缺乏沟通问题是什么,并不一定是版本控制方法本身的问题。理想情况下,需要首先解决通信问题。

我认为您对两种版本控制方法之间差异的技术分析是合理的,我同意更新/合并更好。但我认为真正的问题在于与群组中的人员进行沟通,以及在使用版本控制时这种情况如何变得明显,以及群组中的人员是否都在使用版本控制流程?选择了。请注意,正如我所说的那样,我自己的小组正在努力完成同样的事情,只有Agile / SCRUM而不是VC。这很痛苦,令人讨厌,令人沮丧,但诀窍(我认为)是确定根本问题并修复它。

我认为这里的解决方案是确保(无论选择哪种VC方法)都能很好地传达给每个人,而这是一个复杂的部分 - 你不仅要让你的团队加入特定的VC技术,还要咨询团队。如果咨询团队中的某个人不确定如何执行合并操作,那么,请尝试对其进行培训。关键是要保持沟通畅通,以便在出现问题时解决问题。

答案 1 :(得分:2)

  1. 使用适当的源控制系统(svn,mercurial,git,...)
  2. 如果要进行大量分支,请不要使用比svn 1.6更新的东西。我猜测mercurial / git会是一个更好的解决方案,但我还没有那么多使用它的实践经验。
  3. 如果人们经常在系统的相同部分工作,请考虑系统设计。这表明每个单位都有太多的责任。
  4. 永远不要让人们离线超过一天左右。此规则的例外情况应该非常罕见。
  5. 互相交谈。让其他开发者知道你在做什么。
  6. 就个人而言,我会避免在我的存储库中有项目文件。但话说回来,我永远不会将开发人员锁定在一个工具上。相反,我会使用一个生成项目文件/ makefile / /的构建系统(CMake是我做这个的味道)。

    编辑:我认为锁定文件正在修复症状,而不是疾病。如果这成为一种习惯,你最终会让开发者无所事事。

答案 2 :(得分:2)

我使用更新和合并模型与40多名开发人员组成的团队合作。使这种方法有效的方法是经常合并:独立工作者不断更新(合并)来自存储库的更改,并且每个人都经常合并他们的更改(一旦他们通过基本测试)。

经常合并往往意味着每次合并都很小,这有很大帮助。经常进行测试,无论是在单个代码库还是从存储库中进行夜间检查,都会有很大的帮助。

答案 3 :(得分:0)

我们正在使用subversion,对高度并行环境中的任何文件都没有签入/签出限制。我同意叛徒档案问题是一个纪律问题。不使用合并并不能解决根本问题,是什么阻止开发人员将自己的“固定”代码副本复制到其他人的更新中?

合并是一个皮塔饼,但可以通过提前和经常检入并更新本地副本来最小化。我同意你关于打破签到,我们应该避免。另一方面,通过已签入的更改更新本地副本将强制您正确合并您的更改,以便在您最终签入时顺利进行。

关于.csproj文件。它们只是文本,如果您花时间弄清楚文件的结构,并且需要维护内部引用,它们确实可以合并。

我认为不应该从版本控制中排除构建项目所需的任何文件。如果没有记录项目的某些部分,您如何可靠地重建或跟踪变更?

答案 4 :(得分:0)

我是一家小公司的开发经理,只有3名程序员。 我们工作的项目有时需要数周时间,我们采用了大爆炸,震撼和敬畏的实施方式。这意味着我们有很多数据库更改和程序更改,必须在我们实施的那个晚上完美地工作。我们检查一个程序,改变它并将它放在一边,因为在其他一切之前实现它会使另外20个事情爆炸。我是退房和锁定。否则,另一个人可能会改变一些没有意识到程序已经发生了巨大变化的事情。如果您没有对源代码控制下的其他系统进行数据库更改或更改,则合并仅有帮助。 (Microsoft CRM,基本上任何可通过配置扩展的打包软件)

答案 5 :(得分:-1)

IMO,.csproj等项目文件不应该是版本控制系统的一部分,因为它们不是源代码。

他们几乎肯定不会合并。