3

「git init」を使用して git リポジトリを作成しました。すべて正常に動作しますが、ホストから「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: 
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 root@10.111.44.77:/var/cache/git/h.git
 ! [remote rejected] master -> master (branch is currently checked out)

この old.git リポジトリを new.git リポジトリにクローンしgit clone --bare old.git new.git、ファイルを new.git にプッシュすると、正常に動作します。

しかし、新しいベアリポジトリを作成するとgit init --bare、「git add」コマンドが許可されません。次のエラーが発生します。

fatal: This operation must be run in a work tree

git init --bare作成する .git フォルダを作成しませんgit init

どんな助けでも大歓迎です。

4

1 に答える 1

4

--bare オプションを使用して git リポジトリを作成すると、作業ツリーを必要とせず、リポジトリ構造だけを必要とするリポジトリが作成されます。

これは、(直接) 追加するインデックスがないと予想されることを意味します。これを指定することで、プルとプッシュが想定されているが git add コマンドで追加されていないリポジトリを設定しています。

git init --bareフォルダー内で実行すると、プロジェクト内のフォルダーに表示されることが期待されます。.git

branches
config
description
HEAD
hooks
info
objects
refs

これが、あなたが見ている問題を抱えている理由です。

git の man ページを読んでみてください。とても助かります。また、ベア リポジトリの管理方法を示すドキュメントが掲載されたすばらしい Web ページもあります。 http://git-scm.org

質問のコメントを読んだ後、あなたが達成しようとしていることがわかります。

編集:はい、サーバー上でbareリポジトリを実行する必要があります。そこから押したり引いたりするだけです。

次に、作業を行う「通常の」リポジトリを、場合によっては複数のマシンで作成します。git addコマンドを実行し、そこで git pull と git push を実行します。「サーバー」がある場所にリモートを追加する必要があります。これは実サーバーに限定されるものではなく、単に別のディレクトリにすることもできます。たとえば、ネットワークドライブまたは USB サムドライブ上にある可能性があります。

Git は非常に柔軟で、man ページとドキュメントをよく読むと非常に役立ちます。

于 2013-08-09T10:26:49.543 に答える