1

我正在使用 git。到目前为止,我们是两个团队成员,致力于一个项目。到目前为止,这两项工作都略微独立,一个专注于 UI,另一个专注于 api。我喜欢每天签到多次。我的典型工作流程是:

http://amiridis.net/posts/13

所以我创建了一个功能分支,然后处理它,将它合并到主分支,然后推送它。删除分支并重新创建相同的分支。

该产品仍然是第一个版本,我们有一个持续集成构建服务器设置。推送的主要目的是获取监督者的增量更新。

我的问题是,

  • 如果我还没有完全完成一个功能,如果它仍然是版本 1,将小单元的可编译更改推送到主分支上的主服务器是一个好习惯吗?
  • 创建分支,合并到主,推送它,删除本地分支然后重新创建它是一个好习惯吗?
4

1 回答 1

3

问题 #1

如果我还没有完全完成一个功能,如果它仍然是版本 1,将小单元的可编译更改推送到主分支上的主服务器是一个好习惯吗?

不,将未完成的代码引入主分支通常不是一个好习惯。您应该始终有一个模仿生产代码状态的分支。对于大多数人来说,这个分​​支被称为master.

为什么这很重要的一个例子是生产中的错误。如果您已经在主分支中引入了一堆半完成的工作,那么您发布的任何修复也将包括未完成的工作。此外,如果其他开发人员从该分支中​​撤出,并且您添加了未经测试的代码,则可能会使他们的开发复杂化。

即使您的代码尚未发布 - 您也希望拥有一个仅包含工作且经过全面测试的代码的分支。一般来说,您应该尝试尽可能地分解功能并测试小的更改。如果它们不会对已经在工作的其他任何东西产生负面影响,它们可以合并到主分支中。

无论您如何工作,您都应该尝试保留一个具有某种“权限”级别的分支 - 一个仅在满足某些条件后才合并的分支。这个标准是什么,取决于你。

您可能会决定保留一个主分支,该分支的唯一修改时间是发布新版本时。相反,您决定在您的工作经过测试后立即合并到您的主分支中。您如何决定这样做通常取决于发布策略和更广泛的工作流程。

问题2

创建分支,合并到主,推送它,删除本地分支然后重新创建它是一个好习惯吗?

无法回答是/否。对于团队如何处理代码版本控制、成员之间的协作和发布周期,有许多策略。

一般来说,在合并到主分支后立即删除分支是一种很好的做法。通常最好摆脱并避免继续使用相同的分支(通常称为具有“长寿命”的分支)。在大多数情况下,短期分支是个人开发任务的首选——但这可能会根据您的团队偏好和选择而改变。

工作流程问题

你有一个小团队,你的代码还没有发布——所以压力会更低,解决方案也会更容易,因为只有你们两个。然而,一旦你的产品上市,解决错误的压力就会更大——可能会出现发布修补程序/补丁的需求。发布周期将因越来越多的同步开发而复杂化。随着您将越来越多的开发人员添加到您的团队中,并且对版本控制有不同程度的理解,协作将变得更加混乱和容易出错。

因此,我建议您在决定工作流程时牢记以下几点。

  • Hotfixes/Patches - 如果您已经完成了版本 2 的一半,但现在您在 1.0 中发现了一个严重错误,那么在没有它的情况下发布 v1.1 是多么容易,包括 2.0 的不完整工作
  • 回滚 - 如果在此过程中引入了错误,您可以轻松地退出错误版本吗?
  • 分隔 - 尽量不要与没有专门从事同一工作的团队成员共享损坏或未经测试的代码。如果我在开发时总是拉入您未经测试的代码,我将很难知道错误是由我引起的,还是由其他团队成员引起的代码中其他地方的更改引起的。只有在经过测试和验证后,我才应该引入其他人的代码。通过使分支保持短暂的生命周期,并进行小的、易于测试的更改——这些经过测试的更新将更快地传递给您的团队成员,并且会更快地发现错误。
  • 协作 - 有时人们实际上需要彼此的代码才能继续他们自己的工作。这就是为什么短暂的、微小的变化很重要。然而,有时两个人实际上是在做完全相同的事情——他们一起在相同的功能上工作。在这种情况下,他们在同一个远程分支上工作是合理的。但是请注意,git-reset、git-rebase、执行强制推送或执行任何修改远程提交的操作都会给你的队友带来很大的伤害。共享分支时,请注意该分支的历史记录。
  • 复杂性 - 团队成员对一般版本控制和特别是 git 的理解程度不同。即使他们都是 git 专家,通常越简单越好。任何人为了测试某样东西、将某样东西合并到一个权威分支或与其他开发人员共享代码而必须执行的步骤数应该保持在尽可能低的水平。这是每个人每天都会做很多次的事情。复杂的流程不仅会占用开发人员的时间,而且每个人都更容易出错,经验不足的人更容易出错。当其他人努力解决问题时,这些错误可能会导致进一步的延迟。这种考虑通常与其他考虑相反,因为其他考虑往往意味着增加更多层次的复杂性。只要记住要控制这种复杂性。

一个流行的工作流程被称为“ git flow ”,甚至还有一个命令行工具来帮助自动化所涉及的步骤。作为一个小团队,你可能会发现它过于复杂——但我建议如果你有一个基于迭代的发布周期,这是你至少应该做的。

我其实不是 git-flow 的忠实粉丝,只是因为我觉得它实际上过于简单和二维。(我不喜欢“分散但集中”,我更喜欢实际分布式的工作流程)。

但是,如果您的发布周期非常快——在这种情况下,您可能希望采用github 本身使用的模型。他们的模型与您的模型相似,因为它们只是合并到 master 中-但是它们仅在代码通过了一些自动化测试后才这样做。github 所做的关键点还在于它们每天部署多次——而不是像大多数团队那样在发布周期内进行部署。这样一来,几乎总是会在最近引入将其投入生产的错误。这是一个更简单的策略,但并不适合所有人,请记住上面的要点,尤其是如果您有更典型的发布周期。

于 2013-04-03T00:06:52.437 回答