Git提交消息:50/72格式

蒂姆·波普在他的博客文章中提出了一个特定的git commit消息风格: http : //www.tpope.net/node/106

以下是对他的build议的简要总结:

  • 第一行是50个字符或更less
  • 然后是一个空白行
  • 剩余的文本应该包装在72个字符

他的博客文章给出了这些build议的基本原理(为简洁起见,我将称之为“50/72格式化”):

  • 在实践中,一些工具将第一行作为主题行,第二段作为主体(类似于电子邮件)
  • git log不处理换行,所以如果行太长,很难读取。
  • git format-patch --stdout将提交转换为电子邮件 – 所以玩的很好,如果你的提交已经很好地包装,它会有所帮助。
  • 我想补充一点,我想蒂姆会同意的:总结你的提交行为在任何版本控制系统中都是一个很好的实践。 它可以帮助其他人(或者以后的人)更快地find相关的提交。

所以,我有几个部分对我的问题:

  • Git的“思想领袖”或“有经验的用户”大概包含50/72格式的风格? 我问这个,因为有些时候新用户不知道或不关心社区的做法。
  • 对于那些不使用这种格式的用户,是否有使用不同格式样式的原则性原因? (请注意,我正在寻找有关优点的争论,而不是“我从来没有听说过”或“我不在乎”。)
  • 从经验上讲,git存储库拥有这种风格的百分比是多less? (如果有人想对GitHub仓库进行分析…提示,提示。)

我的意思是不要推荐50/72风格或者打倒其他风格。 (为了开放,我更喜欢它,但是我愿意接受其他想法。)我只想得到为什么人们喜欢或反对各种git commit消息风格的理由。 (随意提出没有提到的点数。)

关于“总结”一行(公式中的50 ), Linux内核文档有这样的说法 :

 For these reasons, the "summary" must be no more than 70-75 characters, and it must describe both what the patch changes, as well as why the patch might be necessary. It is challenging to be both succinct and descriptive, but that is what a well-written summary should do. 

也就是说,看起来内核维护者确实试着保持50左右。下面是内核git日志中总结行长度的直方图:

git总结行的长度 ( 查看全尺寸 )

有一小撮提交的摘要行比这个图可以容纳更长的时间(更长一些),而不会使有趣的部分看起来像一条线。 (这里可能有一些奇妙的统计技术,但是噢,好吧:))。

如果你想看到原始长度:

 cd /path/to/repo git shortlog | grep -e '^ ' | sed 's/[[:space:]]\+\(.*\)$/\1/' | awk '{print length($0)}' 

或基于文本的直方图:

 cd /path/to/repo git shortlog | grep -e '^ ' | sed 's/[[:space:]]\+\(.*\)$/\1/' | awk '{lens[length($0)]++;} END {for (len in lens) print len, lens[len] }' | sort -n 

关于“思想领袖”: Linus着重提倡换行的完整信息:

除了具有特定行格式的引用材料之外,我们使用72个字符的列进行换行

例外主要是指“非散文”文本,即没有被人类提交的文本 – 例如编译器错误消息。

演示文稿和数据的分离驱动我在这里提交消息。

你的提交信息不应该在任何字符数上被硬包装,而应该使用换行符作为数据的一部分,而不是演示文稿来分隔想法,段落等。 在这种情况下,“数据”就是你想要传达的信息,而“呈现”就是用户看到的信息。

我在顶部使用了一个摘要行,我尽量保持简短,但是我不把自己限制为任意数字。 如果Git实际上提供了一种方法来存储摘要消息作为一个单独的实体从消息,但因为它不需要破解,我使用第一个换行符作为分隔符(幸运的是,许多工具支持这种分解数据的手段)。

对于消息本身,换行符表示数据中有意义的东西。 一个换行符表示列表中的开始/中断,而双换行符表示一个新的思想/想法。

 This is a summary line, try to keep it short and end with a line break. This is a thought, perhaps an explanation of what I have done in human readable format. It may be complex and long consisting of several sentences that describe my work in essay format. It is not up to me to decide now (at author time) how the user is going to consume this data. Two line breaks separate these two thoughts. The user may be reading this on a phone or a wide screen monitor. Have you ever tried to read 72 character wrapped text on a device that only displays 60 characters across? It is a truly painful experience. Also, the opening sentence of this paragraph (assuming essay style format) should be an intro into the paragraph so if a tool chooses it may want to not auto-wrap and let you just see the start of each paragraph. Again, it is up to the presentation tool not me (a random author at some point in history) to try to force my particular formatting down everyone else's throat. Just as an example, here is a list of points: * Point 1. * Point 2. * Point 3. 

下面是一个软文包装的查看器。

这是一个总结线,尽量保持简短,并以换行符结束。

这是一个想法,也许是对我以可读格式进行的解释。 它可能是复杂的,长期的由几个句子组成,描述了我的作品格式。 现在(作者)决定用户如何使用这些数据不是我自己决定的。

两个换行符分开了这两个想法。 用户可能正在通过手机或宽屏幕显示器阅读此内容。 你有没有试过在一个只能显示60个字符的设备上阅读72个字符的文本? 这是一个非常痛苦的经历。 此外,本段的开头句子(假定为短文格式)应该是段落的介绍,所以如果一个工具select它,可能不想自动换行,让你只看到每个段落的开始。 再一次,这是由演示工具,而不是我(在历史上的某个点随机作者),试图强迫我的格式化别人的喉咙。

举一个例子,这里有一个要点列表:
*第1点。
*第2点。
*第3点。

我的怀疑是,你连接的Git commit消息build议的作者从来没有编写软件,在软件/计算的发展过程中,在这之前(即一个网站),不同设备上的各种terminal用户将使用这些软件众所周知,根据用户体验,用硬编码的演示信息存储数据是一个坏主意。

我同意提出一种特定的工作风格是有趣的。 但是,除非我有机会去设定风格,否则我通常会遵循一致的做法。

看一下Linux Kernel Commits,如果你喜欢,启动git的项目, http: //git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit; h = bca476139d2ded86be146dae09b06e22548b67f3 ,他们不遵循50/72规则。 第一行是54个字符。

我会说一致性很重要。 设置合适的方式来标识提交用户(user.name,user.email – 尤其是在内部networking上),User @ OFFICE-1-PC-10293982811111不是有用的联系地址。 取决于项目,在提交中提供适当的细节。 很难说这应该是什么; 它可能是在开发过程中完成的任务,然后是发生了什么变化的细节。

我不相信用户应该使用git的一种方式,因为某些接口git对待提交在某些方面。

我还应该注意到还有其他的方法来查找提交。 首先, git diff会告诉你什么改变了。 你也可以像git log --pretty=format:'%T %cN %ce'来格式化git log的选项。