Scripting

一個可以自動化 git commit 消息內容的 bash 腳本

  • March 22, 2019

通常,當我在 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 腳本不是很有經驗。任何人都可以幫助提供實現此目的的實現嗎?

您在這裡缺少的關鍵語法是:

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

$()在雙引號內使用命令替換形式將git diff...to的輸出git commit作為帶有完整換行符的送出消息發送。

printf在這裡使用而不是echo在主題行前面,因為任何稍微複雜的事情——比如處理嵌入式轉義——echo基本上都是不可移植的,出於歷史原因。

腳本的其餘部分留給學生作為練習。:)

引用自:https://unix.stackexchange.com/questions/212719