如何在GitHub上控制项目的版本


13

如今,我试图在GitHub上花费尽可能多的时间(即使我是团队中唯一的团队成员),以真正感受到现实世界中企业应用程序的情况。

我要解决的一个问题是控制版本。假设我们开始了一个项目。然后,团队成员创建了一些分支并在那里发展。准备好进行生产时,我们将所有分支与master分支合并。最后,我们开始使用version 1.0

现在该版本1.0已发布,并且该软件的该版本存在一些问题。我们希望开始开发版本1.1,以解决由于匆忙执行项目而引入的问题。

现在,问题是这样的:

我们应该如何在这里控制版本控制?

我们是否应该为此创建一个新分支,v1.0并在其中保留1.0软件的版本,并在某些分支上(或不进行)开发,与之合并master,一起使用version 1.1

是否有针对此类情况的约定?

Answers:


19

我发现(并开始采用)以下分支模型

图片来自nvie.com

(图片摘自)

该文章中描述了许多好的做法和严格的规则,我强烈建议您这样做。

兴趣点:

  • master分支是您标记版本的地方。这里没有发展。如果在生产环境中部署了错误,请在修补程序分支上修复该错误,并合并并标记新版本。
  • 开发发生在开发分支和功能分支上。就个人而言,我会在devel分支和功能分支上的功能上进行错误修复。
  • 当软件开始发行时,我分支到发行分支。发布分支是我做最后润饰的地方。突出版本号,更改元数据等。以及一些小错误修正。完成后,我将其合并到母版,标记并称为版本。
  • 两个主要分支:主人是“圣洁的分支”;它的HEAD始终是最新的生产代码,develop是夜间分支。它的HEAD总是反映出最新(但可能不稳定)的代码添加。

在您的特定情况下,步骤将取决于该版本的紧急程度。如果遗漏了某些功能,我将返回到开发版本并再次进行整个操作。如果它是已部署版本中的错误,我将分支到一个修补程序分支,修复该错误,并合并并标记v1.1。如果两者都存在,我将首先修复错误,然后再按照说明添加功能。


非常翔实和详细。也是一种完美的做法。这也很有意义。拥有产品主控器只会使其易于维护。我不熟悉标记分支(或提交?)。你能给我一些细节吗?根据上面的模型怎么办?
tugberk 2012年

1
在git中,标记的目标是提交。这意味着您说:“这是提交,从现在开始,我将其称为'v1.3'”。在实践中,这意味着您切换到master分支,合并到(现在稳定的)devel分支中,进行提交和标记。然后,您可以列出所有标签,并恢复为该代码,以防您需要查看上一发行版中的内容。标记要比标记多得多(对于大规模分布式开发(例如linux内核)很有用)。如果您有兴趣,我建议您读一progit书
陶Szelei

ProGit是我绝对会从头开始阅读的书籍之一。现在,我只阅读我感兴趣的部分以完成工作。到目前为止,我们已经在master分支上进行了开发,我认为我应该保持这一点。但是我将打开另一个名为的分支, productionmaster根据上述模型将其用作分支。
tugberk 2012年

当我尝试该模型时,我正在苦苦挣扎的是:在给定的文章中讨论了一些支持分支,功能和发行分支。将来可能会有多个分支。例如,FeedbackForm是一个未来分支,而ContactForm是另一个分支。我猜这个模型可以吗?是否还应该有多个发行分支?如果是这样,我应该如何命名?
tugberk 2012年

首先,您无需遵循这封信,只需建立已建立的规则即可。做最适合您和团队风格的事情。其次,是的,除非您的项目只有一个功能和一个发行版:),否则多个功能和发行版分支都是正常的。根据文章的命名是release- *和feature- *。我猜您将将来的版本号替换为该版本的星号,并在功能分支的情况下将问题跟踪器ID放了进去。
陶Szelei

1

我大部分时间目睹的是:

  • 主人是您的产品。最终,所有将来的x.0版本都将成为主版本。
  • 您为生产中的每个版本创建标签/分支,因此仍可以为需要它的任何客户提供支持。
  • 合并一个或另一个的修复程序将根据具体情况进行处理。

谢谢!所以您认为保留名为v1.0的分支是合理的,而v1.2则合理吗?
tugberk'1

@tugberk,只要相应的软件存在于该版本中,就可以保留分支,以便在需要特定的修补程序分支时可以快速将其分支。当该版本不再存在该软件时(不再受支持,因此无法进行更多工作),可以对分支进行最终合并,然后将其删除,这是有意义的。您甚至可以创建一个最终的空提交(我经常在分支的开头执行此操作),只说“关闭分支XXXX”,否则您将不会保留分支历史记录(reflog可以有所帮助,但这是针对每个存储库的)
Patrick Mevzek
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.