
一度に複数のブランチに自動的にgit pushを実行する高速bashスクリプトを作成しようとしています。私の問題は、コミットメッセージを読み取り変数として入力すると、bashとgitが空白のために狂ってしまうことです。
これは私の現在のスクリプトです。
#!/bin/bash
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Pushing To all branches"
echo "What is your Commit Message?"
read message
git add *
git commit -m \"$message\"
git push origin
.... (push to other branches) ...
echo "Done!"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
私のコミットメッセージに1つの単語があれば完璧に動作します。しかし、これは事実ではないことが多いです。たとえば、次のように入力すると:
Testing test case
私のコミットメッセージに次のエラーが表示されます。
error: pathspec 'test"' did not match any file(s) known to git.
error: pathspec 'case"' did not match any file(s) known to git.
私のbashスクリプトがスペースを処理できるようにこの問題を解決する方法を知っている人はいますか?
とても感謝しています!
答え1
主な問題は、git commit -m
通話メッセージに二重引用符を使用することです。
与えられたコマンドラインは文字列のgit
場合は次のようになります。$message
some message here
git commit -m '"some' 'message' 'here"'
これは二重引用符によるものです。
代わりに、次のように動作します。
git commit -m "$message"
コミットメッセージテンプレートを使用してください。
ファイル内のテンプレートが次のと仮定しますtemplate.txt
。
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Pushing To all branches
# What is your Commit Message?
...これにより、エディタのコミットメッセージの上部にこの内容が挿入されます。
git commit -t template.txt
コミットメッセージを編集できるエディタを提供すると、ユーザーが正しいコミットメッセージの形式を適切に指定するのが簡単になります。
また、使用するテンプレートファイルのパス名をcommit.template
リポジトリファイル.git/config
に設定することもできます(-t
現在は必要ありません)。
テンプレートから次から始まる行はすべて#
送信されません。
また見なさい: