我是一个惯常的提交者,我发现它很适合我,但是请记住,我的提交消息几乎总是像,
Age: 9 mins [*] Working on implementing and testing PaintSystem.
Age: 17 mins [*] Working on implementing and testing PaintSystem.
Age: 37 mins [*] Working on implementing and testing PaintSystem.
Age: 52 mins [*] Working on implementing and testing PaintSystem.
因此,我不能确切地说对我的分支(Mercurial)进行如此频繁和惯常的提交正是鼓励了最详细的提交日志。有时,如果我的妻子要我出去吃饭,我什至会中途提交代码,此时我只是匆忙复制并使用前面的“正在处理”提交消息。
我的提交日志模式通常是这样的, "Working on [...] Working on [...] Working [...] Completed [...] Started working on [...] Working on [...] Completed [...] Started working on [...]"
另一方面,它挽救了我的屁股。有时,我确实遇到了我没有预料到和无法测试的极端情况,这时频繁的提交可以帮助我弄清楚我在哪里引入了错误。
因此,我不了解最佳习惯,就理想的提交日志记录习惯而言,我当然不是一个人,但是我可以肯定地说,更频繁地提交绝对可以在需要执行回归操作时提供帮助。
每个单行更改都应该提交吗?
我之前进行过单行更改,但是通常比较棘手,也许我的时间很短。我的承诺并不总是类似于完美或完整的工作或变更单元。如上所述,有时候这只是我妻子要求我出门吃晚饭的结果。
TBH我遵循该"Working on [...]"
日志模式所做的许多承诺都没有对变化的统一单位进行建模(为什么我常常无法提出比更好的信息"Working on [...]"
),而仅仅是我喘口气的结果,例如让自己喝杯咖啡。该"Completed [...]"
消息指示该工作单元的结束,并且"Started working on [...]"
在我刚开始从事某些工作时,我通常会在其中写上更详细的消息以及第一类消息。如果您平均每15分钟提交一次,则那些“正在处理”消息更像是中间人,代表某人可能在一次更大的提交中提交了更详细的消息。
我应该在任何测试之前提交(例如,至少针对语法/编译错误,然后必须完全撤消它;因为该想法行不通或消息是谎言)?
我只是继续提交它,甚至在有时甚至运行测试之前再次提交(同样,如果发生意外事件)。同样,即使我是独奏,我也会推送到执行CI的服务器(仅在局域网上在家中运行的一台服务器)。这似乎有些过分,但不知道,我已经习惯在以前的工作场所中依靠它了。另外,我不必每次都必须手动运行所有单元测试和集成测试。我喜欢将所有这些都与推送相关。如果测试失败,那么以前进的方式进行回归就很容易了,我可以进行回归分析,更正最新版本中的错误,然后继续进行。就是说,我至少在提交之前针对调试版本构建了代码。
我应该确定每天早晨/下午都下班之前,还是在仍然新鲜的时候停止吃晚饭吗?
我喜欢在出门之前先提交,然后在编程之间休息一下。在遇到这个问题之前,我并没有真正思考为什么要这么做。我想这是为了防止自己在没有提交日志的情况下接管我离开的地方,而不是在我可以进行差异等操作的地方离开。嗯,我需要就此向您回复,因为从理论上讲,考虑到我的承诺频率,这可能不是必需的。无论出于何种原因,在离开计算机之前,我仍会更愿意提交和推动。其中一些可能是以前的心理恐惧,例如,我离开后,电脑开始着火,在我们使用SVN的日子里,项目经理回到过去,有时开发人员要花数周的时间,而不会冒犯我们的脖子,并不断提醒我们尽可能频繁地检入代码,同时提醒我们我们的代码是公司的财产。另外,这样做特别有效率,特别是在推动时,这样我的CI流程就可以在我不在的时候开始运行所有测试,以便可以返回并查看结果。
哦,有时候离开后我会有点醉,在醉酒时尝试编写复杂的代码通常是一个坏主意(尽管并非总是如此;有一次我在醉酒的时候有一个尤里卡的时刻,想出了一个非常不错的上下文菜单系统,但我只喝了6杯啤酒,编写起来并不复杂。如果我尝试这样做,至少我提交了清醒的代码,然后才离开,而不是将醉汉的代码与清醒的代码混合,这时我的提交日志可能看起来像这样,"Reverting back to code written before Jagermeister shots."
我不这样做除非我得到醉酒的代码启发,否则我会经常这样做,但是在极少数情况下,确实可以帮助我在出门喝醉之前做出一些贡献。