web-dev-qa-db-ja.com

現在のブランチへのフェッチを拒否するgit

リモートリポジトリを設定し、新しい変更をプッシュすることはできますが、そこから取得することはできません。常に(むしろ不可解な)エラーメッセージが表示されます。

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly

どういう意味ですか?フェッチを有効にするにはどうすればよいですか?

(このリモートリポジトリはバックアップリポジトリとしてのみ使用されるため、ローカルリポジトリの正確なコピーである必要があります。プッシュできてもフェッチできない理由を本当に理解できません...)

私の設定は次のようになります:

[remote "Origin"]
    url = ssh://blablablah
    fetch = +refs/*:refs/*
    mirror = true
56
Olivier Verdier

あなたがやろうとしているのは、作業中のブランチを取得することです。つまり、masterブランチでareを更新しようとします。それは可能ではありません。 remotes/*ブランチを更新してからローカルブランチにプルするのがより一般的です。あなたが望むのは、おそらく、

git remote add otherrepo thehost:/the/path.git

これにより、リポジトリがremotes/otherrepo/*にフェッチされるようにセットアップされます。 git fetch otherrepoはトリックを行う必要があります。別の方法として、手動で.git/configを編集し、リモートのfetchrefs/heads/*:refs/remotes/otherrepo/*などに設定できます。

特に現在のブランチにフェッチするために誰かがこれを見つけた場合は、--update-head-ok 国旗。 ドキュメント から:

-u
-update-head-ok
デフォルトでは、git fetchは現在のブランチに対応するヘッドの更新を拒否します。このフラグはチェックを無効にします。これは、純粋にgit pullがgit fetchと通信するための内部使用であり、独自の磁器を実装する場合を除き、使用することは想定されていません。

場合によっては、自動化やツールなどの独自の磁器コマンドを実装したいことがあります。

51
RobW

また、これはmasterブランチにいて、最新のものを取得したい場合に動作します

git pull Origin マスター

5
Sai

リポジトリを取得するのではなく、思いがけずにリポジトリを複製したため、両方のリポジトリがマスターであったため、この問題が発生しました。リモートリポジトリで作業を行っていない場合は、次のように基本的なgitコマンドで問題を修正できます。(1)リモートリポジトリを削除する、(2)ローカルリポジトリをリモートリポジトリがあった場所にコピーする、(3)削除するローカルのもの、そして(4)を使用してローカルリポジトリを設定

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

その後、git pullgit Pushが正しいことを行います。 Michaelのより効率的で原則的な答えによると、git remoteを回避する利点は、ブランチを追跡するセマンティクスについて考える必要がないことです。

1
Charles Stewart

致命的:非ベアリポジトリの現在のブランチrefs/heads/BRANCHNAMEへのフェッチを拒否

ブランチBRANCHNAMEをローカルに作成してから、コマンド「git fetchアップストリームpull/ID/head:BRANCHNAME」を実行し、致命的:現在のブランチrefs/heads/BRANCHNAME以外へのフェッチを拒否しました-bare repository

その後、ブランチを削除して、同じコマンドをもう一度呼び出します。

実際、プルリクエストブランチをチェックアウトしていました。

0
Adit choudhary

実際にGitコマンドをコマンドラインに入力していますか、それとも独自のコードからGit実行可能ファイルを実行していますか?
コードから実行している場合、Gitが正しいローカルディレクトリにフェッチしようとしていると確信していますか?

これを行うには、2つの方法があります。

  1. Gitを実行する前に、プログラミング言語が提供するオプションを使用して、正しい作業ディレクトリを設定します
    C#の例 、これは私が使用しているものだからです]

  2. 常に -Cパラメーター をGitに渡して、ローカルリポジトリのディレクトリを指定します。


C#コードからGit実行可能ファイルを呼び出しているプロジェクトがあり、誤って-C parameterを設定するのを忘れたときの質問と同じエラーメッセージが表示されました。

0