git commit 添加了 2 个新行

git commit adds 2 new lines

我正在 Windows 上用 nodeJS 写一个 post-commit 钩子脚本。以下代码调用最后的提交消息:

#!/bin/env node

require('child_process').exec('git log -1 --pretty=%B', function(err, commit) {
    console.log(commit); // prints message in command prompt with 2 empty lines  
    var messages = commit.split(' '); // the delimiter is irrelevant
    console.log(messages); // prints the array and shows '\n\n' at the end of last element
    console.log(messages[messages.length - 1]); // yet this prints the last element WITHOUT '\n\n'
});

为什么有2条新线?我阅读了 Unix 和非 Unix 系统如何处理 CR 和 LF。 git config core.autocrlf 也有一点,但我认为这不是问题所在。

第一个换行符由您的格式生成--pretty=%B。 Git 默认使用 tformat 格式,它使用终止符语法(与分隔符语法相反,称为 format)。您可以使用 --pretty=format:%B 来避免该换行符,并考虑 man git-log 以获取更多详细信息。

第二个换行符是由 Unix 世界中几乎所有(默认)命令产生的。您可以使用以下方法之一删除换行符:How to remove all line breaks from a string?