合并由 Git 包装的提交消息行
Merge Commit Message Lines wrapped by Git
当我为我的一个项目键入提交消息时,它们通常采用以下格式:
My Commit Header
main: Added a new class
doc: Documented the method that was added to main under the name `FooBar.baz()`.
subproject: Did something that requires a really long description.
这些的问题在于它们被 Git 自动包装。当使用 git log
生成变更日志时,我通常会得到这样的结果(使用仅打印正文的格式):
main: Added a new class
doc: Documented the method that was added to main
under the name `FooBar.baz()`.
subproject: Did something that requires a
really long description.
我现在要做的是合并这些行,以便输出中的每一行都以 tag:
开头并以句点 .
结尾。不幸的是,线条也可以包含点,如第二个示例所示。所以行尾可能定义为一个句点后跟一个换行符。
我可以使用正则表达式 ^[\w()]+:.*\n.*\.$
,但我不知道如何使用 grep
.
将其应用于多行
有没有办法使用标准 Unix / Mac OS 命令合并匹配正则表达式的两条线?
不是 git 在您的提交消息中换行。它是您用来编写提交消息的编辑器。因此,要禁用换行,您必须正确配置编辑器。但是请注意,这可能与普遍接受的 etiquette of writing good commit messages.
相反
因此,更明智的做法是允许编辑器换行,并在查看更新日志时恢复它们,正如您所要求的那样。以下脚本将完成展开工作(展开不会跨越由空行定义的边界):
unwrap_commit_message_lines
#!/bin/bash
# This script is for the GNU variant of sed!
sed -n -e '/^$\|^[^ :]\+: / {x;p;d}' \
-e '/^[^ :]\+: /! {H;x;s/\(^[^ :]\+: .\+\) *\n */ /;x};' \
-e '$ {x;p};' \
用法示例:
$ git log --format=format:'------------%ncommit %H%n%n%b'|unwrap_commit_message_lines
当我为我的一个项目键入提交消息时,它们通常采用以下格式:
My Commit Header
main: Added a new class
doc: Documented the method that was added to main under the name `FooBar.baz()`.
subproject: Did something that requires a really long description.
这些的问题在于它们被 Git 自动包装。当使用 git log
生成变更日志时,我通常会得到这样的结果(使用仅打印正文的格式):
main: Added a new class
doc: Documented the method that was added to main
under the name `FooBar.baz()`.
subproject: Did something that requires a
really long description.
我现在要做的是合并这些行,以便输出中的每一行都以 tag:
开头并以句点 .
结尾。不幸的是,线条也可以包含点,如第二个示例所示。所以行尾可能定义为一个句点后跟一个换行符。
我可以使用正则表达式 ^[\w()]+:.*\n.*\.$
,但我不知道如何使用 grep
.
有没有办法使用标准 Unix / Mac OS 命令合并匹配正则表达式的两条线?
不是 git 在您的提交消息中换行。它是您用来编写提交消息的编辑器。因此,要禁用换行,您必须正确配置编辑器。但是请注意,这可能与普遍接受的 etiquette of writing good commit messages.
相反因此,更明智的做法是允许编辑器换行,并在查看更新日志时恢复它们,正如您所要求的那样。以下脚本将完成展开工作(展开不会跨越由空行定义的边界):
unwrap_commit_message_lines
#!/bin/bash
# This script is for the GNU variant of sed!
sed -n -e '/^$\|^[^ :]\+: / {x;p;d}' \
-e '/^[^ :]\+: /! {H;x;s/\(^[^ :]\+: .\+\) *\n */ /;x};' \
-e '$ {x;p};' \
用法示例:
$ git log --format=format:'------------%ncommit %H%n%n%b'|unwrap_commit_message_lines