通常,当我在 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'
Run Code Online (Sandbox Code Playgroud)
我一直在尝试编写一个脚本来自动执行此操作,我可以将其绑定到我的 git 配置中的别名。要生成上面的文本,理想情况下我想运行一个命令,例如:
$ git submodule-commit Core
Run Code Online (Sandbox Code Playgroud)
这将执行以下操作(大致):
Core
在本例中)git commit
并提供主题行(Updated $1 Submodule
,或者类似的东西,在这个例子中$1
是哪里Core
)。我没有运气为此编写一个简单的脚本。我对 bash / shell 脚本不是很有经验。任何人都可以帮助提供实现此目的的实现吗?
您在这里缺少的关键语法是:
git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"
Run Code Online (Sandbox Code Playgroud)
$()
在双引号内使用命令替换的形式将git diff...
to的输出发送git commit
为带有完整换行符的提交消息。
我printf
在这里使用而不是echo
在主题行前面加上,因为对于任何稍微复杂的事情——比如处理嵌入式转义——echo
基本上都是不可移植的,因为历史原因。
脚本的其余部分留给学生作为练习。:)