一个可以自动执行 git 提交消息内容的 bash 脚本

一个可以自动执行 git 提交消息内容的 bash 脚本

通常,当我向 Git 中的子模块提交更改时(如果这是唯一的更改),我将向git diff <submodule-name>提交消息的正文提供结果(在我的 git 配置中diff.submodule设置为)。log所以消息看起来像这样:

Updated Core Submodule

Submodule Core eaedd3f..0721763:
  < Fixed ZA-123: Crash in rendering module
  < Merge 'develop' into 'master'

我一直在尝试编写一个脚本来自动执行此操作,我可以将其绑定到我的 git 配置中的别名。要生成上面的文本,理想情况下我想运行如下命令:

$ git submodule-commit Core

这将执行以下操作(大致):

  1. 暂存对指定子模块的任何更改(Core在本例中)
  2. 区分对子模块的更改并存储稍后生成的消息的输出文本
  3. 运行git commit并提供主题行(Updated $1 Submodule,或类似的内容,本例中$1为where Core)。
  4. 还将之前存储的差异结果添加到提交消息中

我没有运气为此编写一个简单的脚本。我对 bash / shell 脚本不太有经验。任何人都可以帮助提供实现这一目标的实现吗?

答案1

您在这里缺少的关键语法是:

git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"

使用双引号内的命令替换形式将to$()的输出发送为带有完整换行符的提交消息。git diff...git commit

printf在这里使用而不是echo在主题行前面添加主题,因为对于任何稍微复杂的事情(例如处理嵌入式转义符)echo基本上都是不可携带的,由于历史原因。

脚本的其余部分留给学生作为练习。 :)

相关内容