0

私は git が初めてで、git システムでデータをプッシュする際に問題があります。私はgitとgitoliteをインストールしましたが、「git push origin master」を呼び出すと、次のエラーが表示されます:

Counting objects: 12, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (12/12), 1.47 KiB, done.
Total 12 (delta 1), reused 5 (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 gitolite@server.nl:gitolite-admin
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'gitolite@server.nl:gitolite-admin'

私はこのチュートリアルに従ってgitoliteをインストールしました:gitolink すべてが本来あるべきように機能しましたが、最後のステップでした。コマンドを実行すると、悲しいことにこのエラーが発生しました

誰かが私に何をすべきか、またはこれを修正する方法を教えてもらえますか? すでに thried : git config --bool core.bare true ブランチを変更します ((マスター) が使用されないように)

4

1 に答える 1

0

基本的な問題は、「何もない」git リポジトリにプッシュしようとしていることです。これは可能ですが、多くのドキュメントや書籍では、これが推奨されていないことが明確にされていません。

したがって、git は分散型/多マスター scm ですが、実際には、「マスター」または「中央」リポジトリを持っている傾向があり、そこからクローンを作成してプッシュ、「標準」リポジトリとして機能し、作業リポジトリ (たとえば、ラップトップ) にプルてプッシュする「マスター」から複製したもの。これらの「マスター」リポジトリは --bare で作成する必要があります。

server$ cd ; mkdir git
server$ git clone --bare /home/user/foo /home/user/git/foo.git

これが完了すると、ラップトップからプッシュできるようになります。

laptop$ cd foo
laptop$ git remote -v
laptop$ origin user@server:/home/user/git/foo.git (fetch)
laptop$ origin user@server:/home/user/git/foo.git (push)
laptop$ git push origin master

サーバー上で行うこともできます:

git config --global receive.denyCurrentBranch "ignore"

しかし、あなたが git の仕組みをよく理解するまで、私はこれをしません。

于 2011-08-05T00:36:53.110 に答える