如何使用VCS正确管理提交,防止功能冲突以及管理依赖关系?


9

与大型团队合作已成为一个烦人的因素:如何管理签入,防止功能冲突以及通过源代码管理正确管理依赖项?

目前,在我的工作场所中,我们使用TFS 2008,并将在12月初迁移到TFS 2010。首先,任何源代码控制总比没有源代码要好,但是有人发现有什么方法可以防止源代码控制历史中的多次签入和回滚?在实现新功能时,一旦您很高兴地重新合并到中继线中,易失性中继线是最好的解决方法吗?

我真的很想听听其他人的经验,也许还有一些管理源代码管理的最佳实践。



3
我发现处理TFS的最佳解决方案是拥有自己的私有GIT,在其中我可以随意整理所有需要的分支,并按照较小的里程碑(小功能,部分功能)在TFS上进行提交,越小越好,但是您还必须确保在提交时代码是正确的。在每个功能/错误修正/迭代的一个分支上,我将在“分支”的末尾提交到TFS。但是在内部,对我来说,在不同的试验和探索中拥有多个分支是很常见的。这里的TFS Power工具对于自动执行合并很有用
Newtopian 2011年

1
请详细说明“多重签到”和“违反主干”的含义。我真正希望我的每位工程师在团队成员中进行多个检查。
曼弗雷德

源代码控制分支策略是一个大话题。programmers.stackexchange.com/questions/107884/...
蚊蚋

@
John-

Answers:


7

TFS?跑山!尽快移开。它可以做很多不同的事情,但没有一个能比现有的最佳工具好。

不过实话说:

一旦有了一个不错的版本控制系统(SVN,GIT等),我建议为分支机构管理设置规则,例如何时创建分支机构,何时创建分支机构,何时合并,谁以及更多。

直到最近,我们只使用一个分支进行新开发(“ trunk”)。对于发行版,我们将创建一个主干分支。最终质量检查将在该分支机构中完成,一旦完成,我们将发布(我们按月发布)。

我们已改用“后备箱中没有垃圾”的概念,以降低计划风险。这个概念基本上包含一个规则,通过该规则,您可以创建与主干分开的开发工作分支。例如,您可以为某个功能,一个小型开发团队或类似人员建立一个单独的分支。我们使用“史诗”来描述某个小功能或该功能的可释放部分,并为每个史诗创建一个分支。每天至少一次将所有来自主干的更改合并到史诗般的分支中。关键是通过版本控制或单独的工具(例如三向合并)提供良好的合并支持。史诗的质量检查将在史诗分支上进行。一旦通过,史诗般的分支将合并到主干中,并运行集成测试。我们仍然有发布分支。

有了史诗般的分支机构,我们现在可以从主干中释放出来,并包括所有成功合并到主干中的史诗,从而大大降低了计划风险。未完成的史诗将错过公共汽车,并将在下一个版本(下个月)发布。

当然,这可能仅在我们的环境中有效。您很有可能会遇到与我们不同的因素,这些因素会影响分支机构管理的最佳选择。

例如,如果您的团队中有很多人在远程工作,而不总是连接到版本控制服务器,那么您将要使用支持分布式模型的版本控制系统。GIT和其他一些将属于此类。据我所知,TFS需要连接到服务器才能使文件可写(在2010版中已修复?)。

我希望我能够证明没有“一刀切”的东西。从特定分支机构的流程开始,确定需求,最后选择最适合您需求的工具。也许是TFS,也许不是。


2
“ TFS?跑上山!” -我很想创建第二个帐户,以便我两次投票。
蚂蚁

很高兴听到这对您有效。我曾在类似的项目中要求这样做。但是,合并“史诗”分支的方式听起来很容易。我想说的是,这每次很可能会带来可怕的痛苦。
Lionel

1
@Lionel:我同意,这有可能发生。过去我也看到过类似的错误。以我的经验,成功使用此方法的关键是使主干和要素分支之间的差异尽可能小。每天至少需要从中继合并一次。同样重要的是,使史诗/功能尽可能地小,例如,在天/周的规模上要比在几个月内更多。极其有益的还有干净的体系结构和设计以及(完全)重构的代码。
曼弗雷德

@John完全同意您的最后评论。我过去遇到的主要问题是“新功能”通常很大,很复杂,并且包含对主干中现有代码的设计更改。实施和测试可能需要几个月的时间。当有多个团队从事不同功能时,将它们合并到主干中将是一场噩梦。
莱昂内尔(Lionel)

4

我建议每个功能一个分支,因为它在决定要发布和推迟哪些功能时具有很大的灵活性。

在您所处的情况下,效果如何取决于您的VCS处理分支的能力以及更重要的是合并。像Git和Mercurial这样的DVCS使这项工作相对琐碎。SVN更少。尽管我已经阅读了很多有关TFS的文章,但我设法避免了TFS,恐怕大多数情况下都是免费的。如果您对TFS感到困惑,请根据每个分支的一项功能进行一次小型试用版发布,并查看合并的效果如何。


2

首先,免责声明。很难说什么是管理您的源的最佳方法,因为我们不了解您的团队每天的工作方式。

通常,最好在后备箱上工作。对于每个主要发行版,请对其进行分支-以便该分支版本的错误修复在分支上,可以将其合并回主干。所有开发人员都在主干上工作并定期提交代码(每天最少一次)。

定期合并新代码可以最大程度地减少在大规模集成阶段合并大量代码的痛苦。通过散布疼痛,您会感觉减轻。您的团队成员提交代码的次数越多,合并的次数就越少-因为他们将始终处于最新消息源中。


2
我完全不同意在行李箱上工作。如果行李箱坏了,每个人都会受到影响。我也不同意在主要版本发布后进行分支,如果错误影响两个或多个版本,您会在每个分支中进行修复吗?
Trasplazio Garzuglio,2011年

@ marco-dinacci:如果您随时维护多个发行版,那么您所说的可能是正确的。但是,您忽略了这些错误的修补程序将合并回主干的事实。然后其他发行版可以撤消更改。关于后备箱的折断。在将代码提交到主干之前,应该确保拥有所有最新源,并且所做的更改不会破坏主干。如果它已损坏,则应在修复后再提交。当然,不同的方法当然有优缺点。
莱昂内尔(Lionel)

1

我从未使用过TFS 2008/2010,但是从我在各个论坛上所读到的内容来看,使用TFS进行版本控制存在很多负面影响。到目前为止,这使我对TFS保持清醒。

我目前正在使用SVN和Git,我发现它们都适合小型团队或单人团队,但个人不会为大型团队推荐SVN。

我一直在关注PlasticSCM,并将在不久的将来尝试这样做。

很抱歉没有回答您的特定问题,如果我的特权允许我会发表评论。


1

我认为git使所有其他源代码控制软件过时了。分支和合并很容易,并且如果有问题,它将得到控制,但是通过鼓励频繁的提交,分支和合并,可以避免很多问题。每个用户都会得到一份完整的回购副本(可以删除它,但是我使用的是相当庞大的代码库,这不是问题),因此有一些自动备份功能。提交/推送/拉动很快,最重要的事情之一是它打破了文件名和跟踪之间的耦合。文件数据(包括名称和路径)是树节点引用的数据blob,与路径无关。这不仅更安全,而且诸如SVN之类的某些“永不这样做”问题也不成问题。它可以用作传统的集线器配置或对等网络,并且可以在同一设置中自由混合使用。从密码学上讲,它可以防止未记录的插入。而且速度非常快。

我发现我现在一直在家里使用它,只是为了跟踪文档并在计算机之间同步它们,因为与将其备份到服务器或保存在文件服务器上相比,它更易于提交和推送到文件服务器。

缺点是学习曲线有点陡峭,因为它以微妙的方式破坏了人们习惯使用源代码控制的所有规则,但是学习曲线却很短。


1
Git确实很不错,但是(就像所有东西一样)它并不是每个人和所有事物的最佳解决方案。programmers.stackexchange.com/questions/111633/...
鲁克

4
Git如何使Mercurial过时?特别是在Windows开发环境中。最好说DVCS使其他VCS过时,而不是扔掉汽油炸弹并发动一场圣战。
mcottle

@mcottle-我什至不会走那么远。例如,SVN是质量非分布式VCS的一个很好的例子。可以说SVN使CVS过时了,但我会停在那里。Git不会使SVN过时-这是一种完全不同的方法,它对某些方法有好处,但对某些其他方法却不利(有关更多信息,请参见上面的链接)。例如,Git和Hg都相对“吸入”了二进制文件。
Rook

@ldigas:与svn相比,二进制文件中的git和hg“吮吸”更糟吗?除了每个文件的粒度外,任何一个都无法跟踪二进制文件的更改,并且会带来所有相关的后果。同样,它们都使svn几乎过时了,看看它们如何能完全完成svn的工作(除了一些晦涩的功能),然后是一些。您只需要以这种方式进行设置。我能想到的使用svn的最好原因是您已经在使用它,而迁移将非常痛苦/冒险/昂贵。
tdammers 2011年

@tdammers-我对拖钓讨论不感兴趣。对于以上几点,谷歌会发现您很快就会发现。
Rook

1

我们真正遵循并为我们提供了很多帮助的一些良好做法:

1)确保您在本地没有该文件的可写副本,并且始终要签出进行编辑。(如果有时您必须在本地工作,请尝试在EOD之前将其合并到源代码管理中。)

2)在任何重要的里程碑之后,定期为文件添加标签。

3)提供良好的结帐或签到注释。这在您查看时会有所帮助,有时您不必打开并在版本之间进行比较。


1

您如何管理签到并防止功能冲突并通过源代码管理正确管理依赖项?

从我的观点来看,这是两个因素的任务:您必须从技术(良好,轻松和防弹的分支等)和管理(行之有效的策略“什么”,“何时”,“如何”)方面来做。ALM中的两层甚至三层分离代码:类似“稳定”(通过单元测试),“不稳定”(每个包含的功能均已完成,但是作为产品的应用有集成后问题/是的,可能会发生 /)和“工作正在进行中”。这样,适当的项目经理可以减少共同开发人员对单独工作的干扰。

TFS(我不使用,不会使用和不会使用)在其源代码管理管理方面存在一些AFAIK基本问题。我只在这里链接到詹姆斯·麦凯的一些文章:


1

这里有一篇非常不错的近期文章,它简洁明了地比较和对比了使用源代码管理的几种不同方式:Source Control Done Right

我认为使用源代码管理没有任何一种策略/最佳实践。长期合作的成熟团队在该领域的“痛苦”要小得多,即使他们没有完全遵循流行的“最佳实践”。

至于哪些工具...几乎没有关系。真正重要的是,让团队中的每个人都在使用方面保持一致。这意味着每个人都需要了解代码行的管理方式以及期望执行的操作。而且,实际上,您通常没有选择使用哪种工具的选择。充分利用您正在使用的任何内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.