3

リモートとローカルの 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 t
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int
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 som
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, se
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

リモートリポジトリの別のブランチを「git checkout -b current」にします。
私のローカルリポジトリで、「git push」を実行すると成功します。
ただし、ローカルの変更はリモートのマスター ブランチにのみプッシュされます。
次に、リモート リポジトリで「git merge master」を実行して、変更を適用する必要があります。

私はgitの初心者です。
私は間違っていますか?

4

3 に答える 3

7

リモート リポジトリはベア リポジトリではなく、マスターがチェックアウトされています。また、デフォルトでは、git ではベアでないリポジトリのチェックアウト済みブランチにプッシュすることはできません。

git init --bareプッシュ先のリモート リポジトリは、理想的にはベア リポジトリ ( ) としてセットアップする必要があります。

于 2012-07-27T03:38:10.037 に答える
2

manojldsの答えは正しいですが、リモートリポジトリの目的を知るのに役立つ場合があります。

  • リモートリポジトリがバックアップ/コラボレーションの目的だけである場合->正しいアイデアがあれば、リモートリポジトリを「ベア」リポジトリに置き換えてそこから移動します。
  • リモートリポジトリが本番サーバーである場合は、問題が発生しています->別の構成にする必要があります。

「本番環境にプッシュ」できるようにするための適切な確認は、バックアップ/コラボレーションの目的で「ベア」レポジトリを用意することです。次に、デプロイメントサーバーにセットアップされ、ベアレポジトリから複製された別のレポジトリがあります。次に、ベアリポジトリに「受信後フック」を配置して、デプロイメントリポジトリにプルを実行させることができます。

これを行う方法についてのガイドがあると確信しています...私は一度自分自身をフォローしました:)

于 2012-07-27T05:53:42.597 に答える
1

私がgithubを初めて使用したとき、私のメンターは私に次のような親指のルールを教えてくれました。

コードをローカルで変更します。コミットするときは、次のようにします。

  1. do git pull(リモートリポジトリの内部参照ヘッダーをローカルリポジトリに同期することは非常に重要です)
  2. 異なるファイルに競合がある場合は、コピーまたはリモートコピーを選択するか、Kdiffで両方のファイルを開いて両方を組み合わせて、慎重にマージしてください。すべての競合を解決したら、マージをプッシュします。
  3. 手順2の後git pushで、最初にコミットしたいコードに加えたローカルの変更を保存します。

Subversionは苦痛になる可能性がありますが、同期を維持することは非常に重要です。これらの一連のルールは、githubを使用してサブバージョンを維持するのに大いに役立ちました。これがお役に立てば幸いです。

于 2012-07-27T04:24:33.673 に答える