我应该在git提交消息中使用过去时还是现在时?

读一次, git提交的消息应该使用祈使式现在时,例如“为x添加测试”。我总是发现自己使用过去时,例如“为x添加测试”;不过,这对我来说更自然。

这是John Resig最近做的一件事显示两个在一个消息:

在操作测试中调整更多的jQuery集合结果。还固定了预期测试结果的顺序。

这重要吗?我应该用哪一种?

137280 次浏览

由你决定。只要使用提交消息就可以了。 但如果你不需要在时间和语言之间切换,这就更容易了

如果你是在一个团队中开发,那么这个问题应该讨论并解决。

这重要吗?人们通常足够聪明,可以正确地解释消息,如果他们不是,你可能不应该让他们访问你的存储库!

对当前时态、命令式提交消息的偏好来自Git本身。从Git repo中的文档/ SubmittingPatches:

描述你祈使语气的变化,例如“make xyzzy do frotz" 而不是&;[This patch] makes xyzzy do frotz"或"[I]改变xyzzy 执行frotz",就好像你在命令代码库进行更改 其行为。< / p >

因此,您将看到许多以这种风格编写的Git提交消息。如果您在一个团队或开源软件中工作,那么如果每个人都坚持这种风格,以保持一致性,这是很有帮助的。即使您正在处理一个私人项目,并且您是唯一一个会看到您的git历史的人,使用祈使式语气也很有帮助,因为它建立了良好的习惯,当您与他人一起工作时,这些习惯将受到赞赏。

坚持使用现在时祈使句,因为

  • 有一个标准是很好的
  • 它与bug跟踪器中的票据相匹配,这些票据自然具有“实现某些东西”、“修复某些东西”或“测试某些东西”的形式。

我在365年git上写了更详细的描述。

祈使句和现在时的使用需要一点时间 慢慢习惯。当我开始提到它时,它得到了回应 阻力。通常会出现“提交消息记录 我所做的”。但是,Git是一个分布式版本控制系统 可能有很多地方可以进行更改。而 写信息告诉别人你做了什么;考虑这些 消息作为应用提交将做什么的指令。 而不是用标题:

来提交

# EYZ0

就像这样:

# EYZ0

它告诉某人应用提交将做什么,而不是什么 你所做的。此外,如果您查看存储库历史,您将看到 Git生成的消息也是用这种时态写的- “合并”而不是“合并”,“Rebase”而不是“Rebase”所以写得一样 紧张使事情保持一致。一开始感觉很奇怪,但确实如此 有意义(申请时可提供推荐信),并最终 成为自然。< / p > 说了这么多-这是你的代码,你的存储库:所以设置你的 拥有自己的指导方针并坚持下去

如果,然而,你决定这样做,那么git rebase -i与 重写选项将是一个很好的事情,看看

你的项目应该几乎总是使用过去时态。在任何情况下,项目都应该使用相同的时态来保持一致性和清晰度。

我理解其他一些主张使用现在时的论点,但它们并不适用。以下是常用的现在时写作的理由,以及我的回答。

  • 用现在时写作告诉别人应用提交会做什么,而不是你做了什么。

这是人们想要使用现在时的最正确的原因,但只有在正确的项目风格下。这种思维方式将所有提交视为可选的改进或特性,您可以自由决定在特定的存储库中保留哪些提交,拒绝哪些提交。

如果您正在处理一个真正的分布式项目,这个论点是有效的。如果您正在处理一个分布式项目,那么您可能正在处理一个开源项目。如果它真的是分布式的,它可能是一个非常大的项目。事实上,它可能是Linux内核或Git。因为Linux可能是Git传播和流行的原因,所以很容易理解为什么人们会认为它的风格是权威的。是的,这两个项目的风格很有意义。或者,一般来说,它适用于大型、开源、分布式项目。

话虽如此,大多数版本控制中的项目都不是这样工作的。对于大多数存储库来说,这通常是不正确的。这是一种考虑提交的现代方式:Subversion (SVN)和CVS存储库几乎不支持这种类型的存储库签入。通常集成分支处理过滤坏的签入,但那些通常不被认为是“可选的”或“不错的特性”。

在大多数情况下,当您向源存储库提交时,您正在编写一个日志条目,其中描述了此更新所更改的内容,以便将来其他人更容易理解为什么进行了更改。它通常不是一个可选的更改-项目中的其他人需要合并或重新基于它。你不应该写这样的日记:“亲爱的日记,今天我是一个男孩,他向我问好。”而应该写“我是一个男孩,他向我问好。”

最后,对于这样的非分布式项目,人们阅读提交消息的99.99%的时间都是为了阅读历史——历史是用过去时阅读的。0.01%的时间将决定是否应该应用该提交或将其集成到他们的分支/存储库。

  • 一致性。这就是许多项目(包括git本身)中的情况。生成提交的git工具(如git merge或git revert)也会这样做。

不,我向你保证,在版本控制系统中登录的大多数项目都有过去时的历史(我没有参考文献,但这可能是对的,考虑到现在时的参数是Git以来的新参数)。“修订”消息或现在时态的提交消息只在真正的分布式项目中开始有意义——参见上面的第一点。

  • 人们阅读历史不仅是为了了解“这个代码库发生了什么”,也是为了回答诸如“当我选择这个提交时会发生什么”,或者“由于这些提交,我将来可能合并或不合并,我的代码库会发生什么样的新事情”这样的问题。

看第一点。人们阅读提交消息的99.99%的时间都是为了阅读历史——历史是用过去时阅读的。0.01%的时间将决定是否应该应用该提交或将其集成到他们的分支/存储库。99.99%胜过0.01%。

  • 通常比较短

我从来没有见过一个好的论点说使用不恰当的时态/语法,因为它更短。对于标准的50个字符的消息,你可能平均只保存3个字符。也就是说,一般现在时可能会短几个字。

  • 你可以在你的问题/特性跟踪器中更一致地命名提交(不使用过去时,尽管有时使用将来时)。

罚单要么是当前正在发生的事情(例如,应用显示是我点击这个按钮时的错误行为),要么是未来需要做的事情(例如,文本将需要是编辑的评论)。

历史记录(即提交消息)被写入过去所做的事情(例如,问题已修复)。

你在给谁写信?读者通常是在自己拥有所有权之前还是之后阅读消息?

我认为从两个角度都给出了很好的答案,我可能只是没有建议每个项目都有一个最佳答案。这次分裂的投票可能也说明了这一点。

即总结如下:

  • 消息主要是给其他人的,通常是在他们假设更改之前的某个时候阅读的:对现有代码进行更改会产生什么影响的建议。

  • 信息主要是作为日志/记录给你自己(或你的团队),但通常是从假设变化的角度来阅读,并回溯发现发生了什么。

不管怎样,这可能会为你的团队/项目带来动力。