困りごと
gitのオレオレ便利コマンドをgit aliasに設定したら以下のエラーで動かなぁい!
原因と解決法
aliasにダブルクォート使っていたため。シングルクォート('
)にするかエスケープ(\"
)する。
変数展開のタイミングの問題。簡単な詳細(←?)は「シェルのエイリアスで環境変数を使うときはクォーテーションに気をつけよう」という記事を参照
困るまでの具体的な流れ
「git logでいい感じにtreeみたいな。あ、この「git logのオプションと綺麗にツリー表示するためのエイリアス」という記事パクろ。」↓
$ git log --graph --pretty=format:"%C(auto) %h %ad %d %s" --date=format:"%y/%m/%d-%H:%M:%S"
* XXXXXXX 19/10/30-18:20:09 fix
* XXXXXXX 19/10/30-11:47:17 Merge pull request #191
|\
| * XXXXXXX 19/10/30-11:46:52 (origin/mybranch, mybranch) Merge branch 'master' into mybranch
| |\
| |/
|/|
* | XXXXXXX 19/08/06-10:18:52 update
* | XXXXXXX 19/06/27-16:05:08 #188
* | XXXXXXX 19/06/27-16:04:31 #188
「天才きたな。aliasに登録したろ。」↓
~/.gitconfig
[alias]
tree = log --graph --pretty=format:"%C(auto) %h %ad %d %s" --date=format:"%y/%m/%d-%H:%M:%S"
「やったぜ。打ったろ。」↓
$ git tree
fatal: ambiguous argument '%h': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
「は?すまんもう会社辞めるわ。」
「と思ったけどやっぱ続けるわ。とりあえず(いろいろあってから)シングルクォートにしてみよ」↓
~/.gitconfig
[alias]
tree = log --graph --pretty=format:'%C(auto) %h %ad %d %s' --date=format:'%y/%m/%d-%H:%M:%S'
$ git tree
* XXXXXXX 19/10/30-18:20:09 fix
* XXXXXXX 19/10/30-11:47:17 Merge pull request #191
|\
| * XXXXXXX 19/10/30-11:46:52 (origin/mybranch, mybranch) Merge branch 'master' into mybranch
| |\
| |/
|/|
* | XXXXXXX 19/08/06-10:18:52 update
* | XXXXXXX 19/06/27-16:05:08 #188
* | XXXXXXX 19/06/27-16:04:31 #188
「いけたわ。変数展開のタイミングに違いありと教えてくれた前述の記事と神と会社に感謝。」
追伸
シングルクォートとダブルクォート併用するときは、ダブルクォートの前に\
でエスケープしよう。
またしょっぱい記事を書いてしまった。