我正在Windows上用nodeJS编写提交后钩子脚本。以下代码调用最后的提交消息:
#!/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
也有一点,但我认为这不是问题。
答案 0 :(得分:3)
第一个换行符由您的格式--pretty=%B
生成。默认情况下,Git使用tformat
进行格式化,该格式使用终结符语法(与称为format
的分隔符语法相反)。您可以使用--pretty=format:%B
来避免换行,并考虑man git-log
以获得更多详细信息。
第二个换行符由Unix世界中几乎所有(默认)命令产生。您可以使用以下方法之一删除换行符:How to remove all line breaks from a string?