90

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

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
4

10 に答える 10

80

特に現在のブランチにフェッチしたいために誰かがこれを見つけた場合は、--update-head-okフラグを使用できます。ドキュメントから:

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

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

于 2013-10-06T05:17:03.093 に答える
47

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

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

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

于 2010-02-10T12:45:16.180 に答える
0

リポジトリをフェッチする代わりに無意識にクローンを作成したときに、この問題が発生したため、両方のリポジトリがマスターになりました。リモート リポジトリで作業を行っていない場合は、次のように基本的な git コマンドを使用して問題を修正できます。(1) リモート リポジトリを削除する、(2) ローカル リポジトリをリモート リポジトリがあった場所にコピーする、(3)ローカルのもの、そして(4)を使用してローカルリポジトリをセットアップします

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

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

于 2011-09-14T12:14:04.907 に答える
0

私も同じ問題を抱えてる。まず、これを使用して取得しようとします

git fetch [remote_name] [branch_name] 

私はあなたが言及したのと同じ問題を抱えていました。その後、この簡単なコマンドを試しました。

git pull [remote_name] [branch_name]

Note は変更を取得してマージします。ターミナルを使用してファイルを開く場合は、メッセージをコミットする必要があります。このメッセージで、最新のコミットをプッシュします。このコマンドを試すと、最終的にリクエストをプッシュできるようになります。

git push [remote_name] [branch_name_local] 
于 2015-04-11T06:10:19.787 に答える