バッチスクリプトなどで work tree の外から git pull を行いたい、ということはままあるシチュエーションであると思います。
git
コマンドは --git-dir
オプションでコマンドで操作する .git
ディレクトリを指定できるので、これを指定すれば済むと思うかもしれませんが、これではうまくいきません:
cd $HOME git --git-dir=$HOME/repos/@aereal/dotfiles/.git pull # Cannot pull with rebase: You have unstaged changes. # Please commit or stash them.
work tree も指定する必要があります:
git --git-dir=$HOME/repos/@aereal/dotfiles/.git --work-tree=$HOME/repos/@aereal/dotfiles pull
あるいは Git 1.8.5 以降であれば -C
オプションが使えます:
git -C $HOME/repos/@aereal/dotfiles pull
git-sh-setup.sh
の require_clean_work_tree()
関数が git diff-files --quiet --ignore-submodules
を実行して終了ステータスが非ゼロだと上記のようなエラーメッセージを出力して終了するようです。