non-bare なリポジトリにプッシュする

non-bare で現在選択中のリポジトリにgit pushしようとすると以下のようなエラーがでます。

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 

これは以下をignoreの設定をするとこで弾かなくできます。

git config receive.denyCurrentBranch ignore 

何かリモート先の自動スクリプトか何かでうまくgit pushできないことがあると、リモートのファイルの元の状態と更新後の状態とで差分(更新後の状態から、元の状態に変更したような状況)がでる時があるので、それはgit reset --hardで更新後の状態に戻しましょう。

ちなみにこれはpost-receiveフックを使うと自動化できるので、権限があるなら設定しておくと便利です。post-receiveファイルはこのような感じになります。

#!/bin/sh

cd <target_dir>;
git --git-dir=.git reset --hard

実行権限も与えておきます。

chmod +x .git/hooks/post-receive