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)を提供しますCore
  4. また、以前に保存された diff 結果をコミットメッセージに追加します。

私はこれのための簡単なスクリプトを書く運がありません。私はbash / shellスクリプトの経験があまりありません。誰もがこれを達成するための実装を提供するのに役立ちますか?

答え1

ここで欠けている主な構文は次のとおりです。

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

$()完全な改行を含むコミットメッセージに出力を送信するには、二重引用符でコマンド置換形式を使用してください。git diff...git commit

タイトル行の前にプレフィックスを付けるprintf代わりに、ここを使用しています。リモートで複雑なもの(組み込みエスケープ処理など)の場合、基本的にechoechoポータブルではありません、歴史的な理由のため。

スクリプトの残りの部分は生徒に練習課題として残されます。 :)

関連情報