あんパン

こしあん派

git addするときにerror: 's/' does not have a commit checked outというエラーが出て困ったので原因を追う

小ネタです。

$ git add -A
error: 's/' does not have a commit checked out
fatal: adding files failed

addできない。困った。

何が起きているのか

$ ls
README.md  s/
$ ls -la s
total 12
drwxr-xr-x 3 masawada masawada 4096 Jan  7 16:46 ./
drwxr-xr-x 4 masawada masawada 4096 Jan  7 16:46 ../
drwxr-xr-x 7 masawada masawada 4096 Jan  7 16:46 .git/

どうやら s というディレクトリが作られていて、中に .git ディレクトリが作られている状態。しかしこんなディレクトリを作った記憶はない… 一体何故…

ディレクトリが作られた原因を探る

ひとまずhistoryを眺めたところ、いつもと様子がおかしいコマンドを発見しました。

$ git git s

自分はgitconfigのaliasで git sgit status -sb に指定しています。

[alias]
    s = status -sb

しかし git を重ねてしまっているのがおかしそう。実行してみましょう。

$ git git s
WARNING: You called a Git command named 'git', which does not exist.
Continuing in 0.1 seconds, assuming that you meant 'init'.
Initialized empty Git repository in /home/masawada/sandbox/git/s/.git/

やはりこれが原因でディレクトリが作られていた!! しかし平時は git git と重ねても単にエラーが出て終了するだけです。

assuming that you meant 'init'

これはgitconfigでautocorrectを有効にしているから。git git と重ねると git init に補完されてリポジトリのディレクトリが作られてしまう、というオチでした。

[help]
    autocorrect = 1

autocorrectについてはこちら

git-scm.com