我已经看到了很多有关git分支模型的建议,最普遍的观点似乎是直接在master分支上进行更改是一个坏主意。
我们的一位同事很高兴直接在主分支上进行更改,尽管进行了几次交谈,但他们似乎不太可能更改此更改。
在这一点上,我无法说服一个不擅长直接在师傅上工作的同事,但我想了解会与他的工作方式相抵触的事物,知道何时需要重新访问这个问题。
我已经看到了很多有关git分支模型的建议,最普遍的观点似乎是直接在master分支上进行更改是一个坏主意。
我们的一位同事很高兴直接在主分支上进行更改,尽管进行了几次交谈,但他们似乎不太可能更改此更改。
在这一点上,我无法说服一个不擅长直接在师傅上工作的同事,但我想了解会与他的工作方式相抵触的事物,知道何时需要重新访问这个问题。
Answers:
将提交直接推送到主目录时会遇到一些问题
向他解释,新功能需要他们自己的开发分支,该分支可以在投入生产之前先部署到测试环境。
否则,您将永远处于功能未完成的状态。您无法将半完成的功能部署到生产中,因此,如果您直接在master分支上工作,则其他任何人都必须等待您完成功能,然后其他人的更改才能投入生产(包括错误修复)。
对功能使用独立的分支意味着可以独立于其他每个功能来测试和部署每个新功能。
主人应该是潜在的释放者。期。主机中不应有任何完成的工作(除非已通过功能标记禁用)
如此说来,我已经看到一些团队使他们的流程复杂化。
集成到母版时不使用PR是一个错误,因为开发人员将无法选择何时进行集成。
一个开发分支带来的价值很小。通常,它只会使事情复杂化。许多功能分支带来了很多价值。
为每个环境(开发,测试,生产)建立分支是一个错误。这超出了git的范围,应由发布管道处理。应该将完全相同的构建部署到所有环境,如果每个环境都有分支,则不可能。
如果某个功能太大,那么一两天之内无法完成,那么功能分支的所有工作都应该放在单独的分支中并与PR集成。
首先,我想指出的是,在git中,每个pull
实际上都是分支操作,而每个push
都是合并。该master
开发人员的机器上是从一个完全独立的分支master
上您共享中心回购,从技术角度讲平等的地位。我偶尔会将本地版本重命名为upstream
如果我更适合我的目的,或其他名称。
我指出这一点是因为许多组织认为他们比您的同事更有效地使用分支机构,而实际上他们所做的只是为分支机构创建其他名称而已,而这些都不会保存在历史记录中。如果您的同事正在一次原子提交中提交要素,那么撤消就像要素分支的合并提交一样容易。绝大多数功能分支应该是短暂的,并且无论如何都应经常合并。
话虽如此,他的工作方式的主要弊端是双重的。首先,这使得在未完成的功能上进行协作非常困难。但是,在需要协作的那些时间创建分支并不困难。
其次,这使得合并前的审核非常困难。在这一点上,您实际上不需要说服他。您可以采用github,gerrit或gitlab之类的工具,并要求拉取请求代码进行审查,并通过所有合并的自动化测试。如果您没有做这样的事情,坦率地说,您没有充分利用git的潜力,也难怪您的同事没有看到这种潜力。
pull
将如何创建新分支或a push
将如何进行合并操作。相反,a pull
的字面意思是fetch
后面跟有一个merge
!
master
的不同分支origin master
。从技术上讲,它们是两个不同遥控器上的不同分支,每个都有自己的历史记录。
pull
:之前:两个分支可能指向不同的提交-之后:两个分支指向相同的提交-没有创建分支,因此,我不会将其称为“分支操作”。如果使用这两个命令中的任何一个,我会称之为push
,因为它可能会在远程中创建一个新分支。它能做什么不能做什么,是合并。
直接在分支机构上工作没有“坏习惯”。但是,您必须决定哪种方法最能支持您的流程:
问题1:您的母版是否可以代表软件的当前发行状态?然后,您应该引入一个全球开发分支,并在发布开发结束时合并开发。
问题2:您是否要进行代码审查流程?然后,您应该具有“功能分支”,这些特征分支将通过拉取请求合并到主节点(或开发,如果有的话)。
问题3:是否需要与其他开发人员共享中间代码状态,而这些中间状态不应发布到生产(或测试)中?就是这种情况,不止一个开发人员开发了一项功能。然后,您应该引入“功能分支”。