質問:ワークツリーがむき出しになっていない場合、ローカルコミットを開発サーバーにプッシュするにはどうすればよいですか?
私の状況:
- 開発サーバーにgitを設定して、ローカルの変更をプッシュすると、それらが切り離された作業ツリーに追加されるようにしました(ここで説明し、この投稿のように)。
git status
次に、gitが作業ツリーを見つけられなかったため、開発サーバーでgitを実行する際に問題が発生しました(例:)。- 私はSOについて尋ね、設定ファイルに設定してワークツリーを指定する必要があるというヒントを得ました。
bare = false
甘い。
しかし、コミットを開発サーバーにプッシュしようとすると、次のエラーが発生します。
$ git push origin master
xxxx@xxx.xxx.xxx.xxx's password:
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (18/18), 2.56 KiB, done.
Total 18 (delta 8), reused 0 (delta 0)
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:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ssh://xxxx@xxx.xxx.xxx.xxx/xxx/xxx/xxxxxx.git
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://xxxx@xxx.xxx.xxx.xxx/xxx/xxx/xxxxxx.git'
この他のユーザーにも同じ問題があったようです。残念ながら、彼のために働いた解決策は彼の設定bare = true
で設定することでした。それは私が上記のステップ3で抱えていた問題を再現するでしょう。
エラーメッセージには
'receive.denyCurrentBranch'構成変数をリモートに設定できます:エラー:'無視'または'警告'
私の場合、これをしても大丈夫ですか?それは私には良いことのように聞こえますが、私はまだgitに精通していないので、悪い考えが出てきたときにそれを認識できません...
編集
明確にするために、私はすでにポストレシーブフックを追加しました、そしてそれはスムーズに働いています。問題は、bare=true
(開発サーバーにプッシュできる)とbare=false
(開発サーバーでgitコマンドを実行できる)のどちらかを選択する必要があるように見えることです。