如何在git标签信息中包含换行符

21

我在git中为有版本的代码打标签时,喜欢在标签消息中使用项目符号。

这可以通过使用带注释的标签轻松完成:

git tag -a v1.0.0

* Change number 1
* Change number 2
#
# Write a tag message
#

然而,如果我尝试使用-m选项运行相同的标签,标签消息并不是我所期望的内容:

git tag -a v1.0.0 -m "* Change number 1\n* Change number 2"

git show v1.0.0

...

* Change number 1\n* Change number 2
....

字符 '\n' 被直接解释为 '\' 和 'n' 两个字符,而不是一个换行符。我想使用 -m 选项来自动化标签过程。

有没有办法在使用 -m 选项时,将实际的换行符包含在 git tag 中?

4个回答

22

我找到的最接近的解决方案是使用多个-m选项,每个选项对应一行。例如:

git tag -a v1.0.0 -m "* Change number 1" -m "* Change number 2"

来自git-tag手册页面

-m <msg>
   Use the given tag message (instead of prompting). If multiple
   -m options are given, their values are concatenated as separate
   paragraphs. (...)

更新:查看"Add line break to git commit -m from command line"获取更多基于shell的解决方案。


好的回答。哦,手册中隐藏的宝藏真是不少。谢谢,Aziz! - Eric Peterson
3
这样做会在消息之间添加额外的换行符,这可能不是期望的结果。 - Max Nanasy
我的命令:git tag -a v1.1.0 -m "+ 在查找和替换控制台中添加了正则表达式的语法高亮," -m "+ 添加了有关自定义某些图形参数的 Windows 10 用户说明。"结果。我做错了什么?谢谢。 - Саша Черных
帮我一下:tag -a st3-1.1.0 -m "版本1.1.0" -m "+ 在查找和替换控制台中添加了正则表达式的语法高亮功能," -m "+ 添加了有关自定义某些图形参数以适用于Windows 10用户的说明。"结果。谢谢。 - Саша Черных

13

最佳解决方案是从您的默认代码编辑器中编写提交和标签消息。

  • 使用命令git tag -a v1.0.0并按Enter键。不要写-m
  • 它会打开您的默认代码编辑器,编写消息,保存并关闭文件。
  • 命令行将被恢复。

4

假设您正在使用Unix shell,那么您的换行符语法是错误的。

git tag -a v1.0.0 -m "* Change number 1
* Change number 2"

应该可以工作。


4
git tag -a v1.0.0 -m $'* 改变数字1\n* 改变数字2'是什么意思? - Damien Flament
@DamienFlament 这也可以,在bash中至少是这样。虽然我刚刚在csh中尝试了一下我的答案语法,但它在那里不起作用,所以“unix shell”对于我的答案也不准确 :P - Max Nanasy

4

另一种选择是将格式化的消息放入一个(临时)文件中,并使用git tag -F <filename> <tag>从该文件中读取消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接