愚蠢的问题,并将我视为完全是版本控制的新手。
我是Git的新手(之前我曾经使用过subversion,但只是基础知识)我理解Git及其分支命令的基础知识,我有一个想象的情况需要你的建议。
假设我的软件目前处于v1.2,稳定并已发布。
My Software v1.0 v1.1 v1.1.1 v1.2 <- Current, Compilable and Released
我有两个开发人员,John和Eric。
现在是1月份。
John正在根据v1.2版本开发许多错误修复程序。每天他都需要将代码提交回存储库(GitHub),软件可能无法根据其状态进行编译。
Eric正在尝试这个新的wiki功能,从基本功能(如添加WYSIWYG编辑器)到高级功能(如差异/版本控制),再次,他需要将代码提交回存储库,软件可能无法编译,这取决于他的位置在。使用GIT,工作流程是什么?
如果我正确理解GIT,Eric和John都应该创建自己的分支,并且在2月,让他们合并与主人合作的东西吗?
由于
答案 0 :(得分:8)
我会在主存储库中设置两个集成分支:
请注意,这些分支仅应用于集成目的,即用于将完成的工作与其他所谓的功能分支合并。开发和错误修复应该在功能分支中完成。在此工作流程中,集成分支中的代码始终有效。
两个开发人员都应该为他们要完成的每项任务分配一个功能分支。在你的情况下,Eric会有一个名为wysiwyg的分支,它从master分支的顶端开始。当该功能准备好进入开发主线时,Eric可以简单地将所见即所得分支合并到主服务器中。
这同样适用于约翰。例如,如果John必须修复两个问题(例如,issue1和issue2),他应该有分支fix-issue1和fix-issue2。这些分支应该从1.2稳定分支的尖端开始。在解决了其中一个问题之后,比如问题1,John可以将分支fix-issue1合并回1.2-stable。如果master和1.2-stable分支中的代码没有太大分歧,那么Eric可能偶尔会将分支1.2-stable合并到master中,以便将累积的修复程序合并到下一个版本的产品中。
什么时候发布1.3 Eric应该确保1.2-stable分支和ready功能分支中的累积修复都已合并到master中。然后他可以简单地标记v1.3并创建一个新的1.3-stable分支。
答案 1 :(得分:3)
对于谁来维护主题分支从问号和kaitanie-Question Mark推荐John在master上工作而kaitanie推荐Eric在master上工作的相反建议 - 展示了Git的工作流程灵活性。
就Chris Nicola建议变基而不是合并而言,我会提供Pro Git by Scott Chacon中的read free online同样的警告,"Branching Workflows"可以使用,我强烈建议,“不要改变你的承诺已推到公共存储库。“由于“每天[约翰都需要将他的代码提交回存储库(GitHub)”,我可能会远离变基,除非John和Eric在本地使用它。
我建议您阅读 Pro Git 的"Distributed Workflows"部分,其中介绍了长期运行的分支和主题分支。您还应该查看{{3}}部分,其中介绍了集中式工作流程,集成管理器工作流程以及独裁者和中尉工作流程。
答案 2 :(得分:2)
GIT非常灵活,您可以根据具体情况定制使用方式。也就是说,我喜欢每个功能的分支方法,我也更喜欢“重新定位”到合并。
每个功能分支意味着您为正在处理的每个功能或缺陷创建分支。通常,分支仅在开发时存在,并且在与主服务器合并/重新绑定后将被删除。
Rebase意味着不是让分支与主服务器合并,而是实际从主服务器中提取更改,并将它们放在您在分支中所做的所有更改之前。实质上,它将HEAD与分支更改的开头合并。这使得您似乎在最新的HEAD修订版之后开始合并所有更改。
将分支机构推送到远程存储库也是一种很好的做法,以防其他人需要查看或使用分支机构,同时它还会为您的工作提供备份。再次当你完成一个分支我建议清理后删除旧 分支。
最后,最后一个最佳实践是保持您的提交较小,特定于一个特定任务或操作,以便其他人可以轻松检查每个提交以及快速理解的内容。然后,提交可以用来记录您的进度和活动。
答案 3 :(得分:1)
如果我正确理解GIT,Eric和John都应该创建自己的分支,并且在2月,让他们合并与主人合作的东西吗?
是
答案 4 :(得分:1)
John应该在master上工作,Eric应该在名为WYSIWYG的分支上工作,或者在某个分支上正确命名。
如果你想检查什么是1.3版本,你应该将John的主分支推送到一个名为stable的新分支,如果你还没有它,如果你已经有一个稳定的分支,只需将master再次合并到stable中,每次你想发布一些错误修复时都会这样做。
如果Eric在wysiwyg分支上完成了,那么将其合并,然后你就可以获得可编译的版本了。然后归档/销毁/忽略wysiwyg分支,因为它不再需要。