如何在提交消息中自动添加全局配置变量?
How to automaticaly add global config variable in commit messge?
我想在提交消息中自动添加我的团队名称,我已使用以下命令在全局配置中注册:
git config --global user.team "Seawolves"
有很多团队在同一个项目中工作,我们共享一个在 git 配置文件中指定的模板文件。
[commit]
template = /mnt/share/gitmessage
这是我的 ~/.gitconfig 的一部分:
cat ~/.gitconfig
[user]
name = Rajesh Khanna
email = rajesh.khanna@somthing.com
team = Seawolves
从 ~/.gitconfig 和 git 获取团队名称到提交消息中的最佳方法是什么?我应该使用 prepare-commit-msg 挂钩吗?或者它是一种更简单的方法来获取消息,就像自动完成电子邮件和姓名一样?
或者我需要使用以下命令获取它:git config user.team
然后将其回显到类似于我在此处找到的消息中:
https://gist.github.com/bartoszmajsak/1396344/97081e76ab275f5fe526347908503febd1340495
处理这个问题的最好方法确实是使用 prepare-commit-msg
钩子。当你创建一个时,你应该注意传递给它的参数,并且,除非你想让你的生活不必要地困难,否则在你使用 git commit --amend
时避免修改它(例如当第二个参数是 commit
).
请注意,挂钩需要修改作为第一个参数的文件,这与许多人的预期不同。因此,您通常需要使用诸如 -i
Perl 参数、Ruby 或 sed
之类的东西,或者像 ed -s
或 [=18= 这样的可编写脚本的行编辑器] 使用 w
命令。
如果您尝试添加预告片,那么 git interpret-trailers
可能有助于根据配置添加您想要的条目,并且您可以自定义它以在条目已存在时不添加条目.它不能使用user.team
,但可以使用其他配置选项来设置预告片。
您尝试用 user.team
的值简单地替换模板中的 %(team)
标记的示例如下所示:
#!/bin/sh
file=""
from=""
[ "$from" = commit ] && exit 0
TEAM=$(git config user.team) perl -i -e 's/\%\(team\)/$ENV{TEAM}/g' "$file"
这会将配置值拉入传递给 Perl 的 TEAM
环境变量,然后 %(team)
被该环境变量的值替换。您也可以使用 sed
执行此操作,但您必须确保您的 user.team
值不包含斜杠(或您使用的任何其他分隔符):
sed -i -e "s/%(team)/$(git config user.team)/g"
请注意,此构造适用于 GNU sed; BSD sed,就像在 macOS 上一样,在使用 -i
时需要一个额外的参数。由于这不可移植,您应该避免使用此语法并改用 Perl 或 Ruby,除非您确定它只会用于单个 OS.
我想在提交消息中自动添加我的团队名称,我已使用以下命令在全局配置中注册:
git config --global user.team "Seawolves"
有很多团队在同一个项目中工作,我们共享一个在 git 配置文件中指定的模板文件。
[commit]
template = /mnt/share/gitmessage
这是我的 ~/.gitconfig 的一部分:
cat ~/.gitconfig
[user]
name = Rajesh Khanna
email = rajesh.khanna@somthing.com
team = Seawolves
从 ~/.gitconfig 和 git 获取团队名称到提交消息中的最佳方法是什么?我应该使用 prepare-commit-msg 挂钩吗?或者它是一种更简单的方法来获取消息,就像自动完成电子邮件和姓名一样?
或者我需要使用以下命令获取它:git config user.team
然后将其回显到类似于我在此处找到的消息中: https://gist.github.com/bartoszmajsak/1396344/97081e76ab275f5fe526347908503febd1340495
处理这个问题的最好方法确实是使用 prepare-commit-msg
钩子。当你创建一个时,你应该注意传递给它的参数,并且,除非你想让你的生活不必要地困难,否则在你使用 git commit --amend
时避免修改它(例如当第二个参数是 commit
).
请注意,挂钩需要修改作为第一个参数的文件,这与许多人的预期不同。因此,您通常需要使用诸如 -i
Perl 参数、Ruby 或 sed
之类的东西,或者像 ed -s
或 [=18= 这样的可编写脚本的行编辑器] 使用 w
命令。
如果您尝试添加预告片,那么 git interpret-trailers
可能有助于根据配置添加您想要的条目,并且您可以自定义它以在条目已存在时不添加条目.它不能使用user.team
,但可以使用其他配置选项来设置预告片。
您尝试用 user.team
的值简单地替换模板中的 %(team)
标记的示例如下所示:
#!/bin/sh
file=""
from=""
[ "$from" = commit ] && exit 0
TEAM=$(git config user.team) perl -i -e 's/\%\(team\)/$ENV{TEAM}/g' "$file"
这会将配置值拉入传递给 Perl 的 TEAM
环境变量,然后 %(team)
被该环境变量的值替换。您也可以使用 sed
执行此操作,但您必须确保您的 user.team
值不包含斜杠(或您使用的任何其他分隔符):
sed -i -e "s/%(team)/$(git config user.team)/g"
请注意,此构造适用于 GNU sed; BSD sed,就像在 macOS 上一样,在使用 -i
时需要一个额外的参数。由于这不可移植,您应该避免使用此语法并改用 Perl 或 Ruby,除非您确定它只会用于单个 OS.