我想设置一个git别名来执行git commit并使用自动生成的消息,如下所示:
"受影响的文件:[...],[...],[...]。"
Whereby [...]是针对相应文件名的正则表达式匹配。
我在windows上使用git bash。 我使用git的技巧非常基本(添加,提交,推送)。
感谢。
答案 0 :(得分:1)
您可以通过在项目的commit-msg
目录中放置.git/hook
挂钩(读取:脚本)来实现此目的。
运行git diff --cached --name-status
应该会提供有关[即将提交]已提交文件的所有信息,您可以使用awk
(或一堆grep
和{{1}来解析这些文件s)然后用cut
组织它。总而言之,您的脚本应该或多或少地看起来像这样:
paste
请注意,默认情况下,这仍然会打开编辑器窗口,但您可以通过在提交时运行modified_files=`git diff --cached --name-status | awk '$1 == "M" { print $2 }'| paste -d', ' -s`
if test "" != "$modified_files"
then
echo "Affected files: $modified_files" >> $1
fi
(或其他一些消息)来解决此问题。
注意:强>
我在Fedora 24笔记本电脑上使用git commit -m ""
进行了测试,效果很好。我不确定Windows上的git bash是否具备所有这些功能,但至少它应具有相同的功能。
修改强>
正如@torek在评论中建议的那样,可以使用/bin/sh
选项简化:
--diff-filter
答案 1 :(得分:0)
需要zsh,GNU sed,ripgrep和NightMachinary / prefixer。
trimsed () {
gsed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
git-commitmsg () {
local msg="$(git -c color.status=false status | command rg --color never -e 'deleted:' -e 'modified:' -e 'new file:'| trimsed | prefixer --skip-empty -o '; ')"
print -r -- "${msg:-.}"
}