[小ネタ] Gitのコマンド実行に失敗した時に目立つメッセージを表示する

2017.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日Gitでrebaseをしたつもりがされていないという事故が起きました。 話を聞いたところ、「明らかにrebaseのコマンドは打ったが、エラーメッセージをスルーしていてrebaseできてなかった」という状況でした。

たしかにGitでコマンドの実行に失敗した時のエラーメッセージはわりとさっぱりしている気がします。

$ git rebase develop
Cannot rebase: You have unstaged changes.

Please commit or stash them.

もっと「失敗した!」感が強いメッセージが表示されれば事故を防げるのかな、と思いましたので、Gitのエイリアスを利用してGitのコマンド実行に失敗した時に目立つメッセージを表示するように設定してみます。

また、試した際の環境は以下です。

  • OS: macOS Sierra 10.12.6(16G29)
  • Git: git version 2.11.0 (Apple Git-81)

ターミナルはiTerm(Build 3.0.15)とmacOS標準のターミナル(バージョン2.7.3)で動作確認しました。

やってみる

今回は文字列のエスケープがややこしいので、設定ファイルを直接編集します。

$ vi ~/.gitconfig

[alias]に以下を設定します。

[alias]
        rbg = !sh -c 'git rebase $@ || (echo "_人人人人_" && echo "> だめ <" && echo " ̄Y^Y^Y ̄")' -

rbgコマンドが、rebaseしてもし失敗したらメッセージを表示する、というコマンドとして定義できました。

実際にrebaseに失敗してみます。

$ git rbg xxxxbranch
fatal: Needed a single revision
invalid upstream xxxxbranch
_人人人人_
> だめ <
 ̄Y^Y^Y ̄

派手なメッセージが出ました。

もっと派手にしてみる

以下の設定でメッセージに色がつきます。

[alias]
    rbg = !sh -c 'git rebase $@ || (printf "\\\\e[31m%s\\\\n%s\\\\n%s\\\\n\\\\e[m" "_人人人人_" "> だめ <" " ̄Y^Y^Y ̄")' -

実際にrebaseに失敗すると以下の様になります。

command

これで見逃さずに済みそうです。

最後に

メッセージを追加で出力できるので、Gitの外につながる次のフローへのリマインドなどに使うと便利なのではないかと思います。

参考資料

Aliases - Git SCM Wiki
Git - Git Aliases
【Git】Tips: Gitのエイリアスを使う
ターミナルのechoやprintfに256色で色をつける 完全版