在git log中显示带有%N的注解时,是否可以轻松地修剪换行符?我想通过使用git-notes添加提交的元数据,并使用如下方式查看它:
git log
git log --format=format:'%h [%N] %an %s %D'
这看起来比创建带有元数据前缀的提交消息要干净得多,这是目前的常见做法,但似乎注解上总是有一个尾随的换行符。关于如何轻松地删除它而不通过外部工具过滤的任何建议?
bfrts1fy1#
使用%N%-C()。%N你懂的%-C()中的-表示“如果为空,则删除紧接在前的换行符”,并且空颜色规范C()为空。来自评论:OP使用的是%<(20,trunc)%N,默认情况下,注解有一个格式化程序不剥离的显式编码的尾随换行符,因此一个10字节的注解将有一个第11字节的换行符,然后固定宽度将用空格将其填充为20字节。. .和%-C()将看到紧接在前面的空间并且什么都不做。此OP的一个解决方法如下:使用%>(20,trunc)代替,短注解将右对齐,因此尾随的换行符将始终出现在那里。另一个是@Guildenstern在评论这个问题时提出的:使用一个trailer,它的值在概念上不包含嵌入的尾随换行符。git notes将为添加的注解提供任何“缺失”的尾随换行符,即使是来自文件;要自己创建一个没有尾随换行符的注解,你必须手动创建blob,并使用预制的对象创建它,但即使这样,git log的格式化程序也会将它添加回去。因此,如果你想在固定宽度的字段中格式化数据,并保持notes相对于trailers的灵活性优势,看起来rj几乎是唯一的选择。
%N%-C()
%N
%-C()
-
C()
%<(20,trunc)%N
%>(20,trunc)
git notes
epggiuax2#
当前的git似乎不支持此功能,但以下修补程序似乎可以工作:
git
diff --git a/notes.c b/notes.c index 02f1aa39ae..21001b2261 100644 --- a/notes.c +++ b/notes.c @@ -1306,7 +1306,9 @@ static void format_note(struct notes_tree *t, const struct object_id *object_oid if (!raw) strbuf_addstr(sb, " "); strbuf_add(sb, msg_p, linelen); - strbuf_addch(sb, '\n'); + if (!raw) { + strbuf_addch(sb, '\n'); + } } free(msg);
2条答案
按热度按时间bfrts1fy1#
使用
%N%-C()
。%N
你懂的%-C()
中的-
表示“如果为空,则删除紧接在前的换行符”,并且空颜色规范C()
为空。来自评论:
OP使用的是
%<(20,trunc)%N
,默认情况下,注解有一个格式化程序不剥离的显式编码的尾随换行符,因此一个10字节的注解将有一个第11字节的换行符,然后固定宽度将用空格将其填充为20字节。. .和%-C()
将看到紧接在前面的空间并且什么都不做。此OP的一个解决方法如下:使用
%>(20,trunc)
代替,短注解将右对齐,因此尾随的换行符将始终出现在那里。另一个是@Guildenstern在评论这个问题时提出的:使用一个trailer,它的值在概念上不包含嵌入的尾随换行符。
git notes
将为添加的注解提供任何“缺失”的尾随换行符,即使是来自文件;要自己创建一个没有尾随换行符的注解,你必须手动创建blob,并使用预制的对象创建它,但即使这样,git log
的格式化程序也会将它添加回去。因此,如果你想在固定宽度的字段中格式化数据,并保持notes相对于trailers的灵活性优势,看起来rj几乎是唯一的选择。epggiuax2#
当前的
git
似乎不支持此功能,但以下修补程序似乎可以工作: