通常,当我向 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
这将执行以下操作(大致):
- 暂存对指定子模块的任何更改(
Core
在本例中) - 区分对子模块的更改并存储稍后生成的消息的输出文本
- 运行
git commit
并提供主题行(Updated $1 Submodule
,或类似的内容,本例中$1
为whereCore
)。 - 还将之前存储的差异结果添加到提交消息中
我没有运气为此编写一个简单的脚本。我对 bash / shell 脚本不太有经验。任何人都可以帮助提供实现这一目标的实现吗?
答案1
您在这里缺少的关键语法是:
git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"
使用双引号内的命令替换形式将to$()
的输出发送为带有完整换行符的提交消息。git diff...
git commit
我printf
在这里使用而不是echo
在主题行前面添加主题,因为对于任何稍微复杂的事情(例如处理嵌入式转义符)echo
基本上都是不可携带的,由于历史原因。
脚本的其余部分留给学生作为练习。 :)