Scripting
一個可以自動化 git commit 消息內容的 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
這將執行以下(大致):
- 暫存對指定子模組的任何更改(
Core
在這種情況下)- 區分對子模組的更改並將該輸出文本儲存為稍後生成的消息
- 執行
git commit
並提供主題行(Updated $1 Submodule
或類似的東西,在本例中$1
是whereCore
)。- 將之前儲存的差異結果也添加到送出消息中
我沒有任何運氣為此編寫一個簡單的腳本。我對 bash / shell 腳本不是很有經驗。任何人都可以幫助提供實現此目的的實現嗎?
您在這裡缺少的關鍵語法是:
git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"
$()
在雙引號內使用命令替換形式將git diff...
to的輸出git commit
作為帶有完整換行符的送出消息發送。我
printf
在這裡使用而不是echo
在主題行前面,因為任何稍微複雜的事情——比如處理嵌入式轉義——echo
基本上都是不可移植的,出於歷史原因。腳本的其餘部分留給學生作為練習。:)