通常、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
)を提供しますCore
。 - また、以前に保存された diff 結果をコミットメッセージに追加します。
私はこれのための簡単なスクリプトを書く運がありません。私はbash / shellスクリプトの経験があまりありません。誰もがこれを達成するための実装を提供するのに役立ちますか?
答え1
ここで欠けている主な構文は次のとおりです。
git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"
$()
完全な改行を含むコミットメッセージに出力を送信するには、二重引用符でコマンド置換形式を使用してください。git diff...
git commit
タイトル行の前にプレフィックスを付けるprintf
代わりに、ここを使用しています。リモートで複雑なもの(組み込みエスケープ処理など)の場合、基本的にecho
echo
ポータブルではありません、歴史的な理由のため。
スクリプトの残りの部分は生徒に練習課題として残されます。 :)