使用正则表达式

时间:2016-10-13 09:51:15

标签: git

我想设置一个git别名来执行git commit并使用自动生成的消息,如下所示:

"受影响的文件:[...],[...],[...]。"

Whereby [...]是针对相应文件名的正则表达式匹配。

  • 我只想在更新现有文件时使用它(没有添加,删除)。
  • 如果正则表达式部分过于笨重,我可以使用完整的文件名。
  • 使用内联逗号分隔列表(而不是多行)是至关重要的要求。
  • 不必在编辑器中触摸消息是至关重要的要求。

我在windows上使用git bash。 我使用git的技巧非常基本(添加,提交,推送)。

感谢。

2 个答案:

答案 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:-.}"
}