• ..

Lighthouse

    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