リモートが構成されているGitリポジトリの1つでgit remote -v
を実行すると、各リモートにフェッチとプッシュの両方の仕様があることがわかります。
$ git remote -v
<remote-name> ssh://Host/path/to/repo (fetch)
<remote-name> ssh://Host/path/to/repo (Push)
ピア開発者を指すリモートの場合、プッシュする必要はありません。Gitは、とにかく非ベアリポジトリへのプッシュを拒否します。これらのリモートをプッシュアドレスや機能を持たない「フェッチ専用」として設定する方法はありますか?
削除プッシュURLではなく、オーバーライドプルURL以外のものにできるとは思いません。だから私はあなたが得る最も近いものはこのようなものだと思う:
$ git remote set-url --Push Origin no-pushing
$ git Push
fatal: 'no-pushing' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
プッシュURLをno-pushing
に設定しています。作業ディレクトリに同じ名前のフォルダーがない限り、gitは検索できません。基本的に、存在しない場所を使用するようにgitに強制します。
プッシュURLを無効なもの(たとえば、git remote set-url --Push Origin DISABLED
)に変更する以外に、pre-Push
フックを使用することもできます。
git Push
を停止する簡単な方法の1つは、/usr/bin/false
をシンボリックリンクにしてフックにすることです。
$ ln -s /usr/bin/false .git/hooks/pre-Push
$ git Push
error: failed to Push some refs to '...'
フックを使用すると、必要に応じて、プッシュをより詳細に制御できます。進行中のコミットのプッシュを防ぐ方法の例については、.git/hooks/pre-Push.sample
を参照してください。
一般的なステートメント「Gitは非ベアリポジトリへのプッシュを拒否します」は正しくありません。 Gitは、リモートリポジトリのチェックアウトされた作業ディレクトリと同じブランチにある変更をプッシュしようとする場合にのみ、非ベアリモートリポジトリへのプッシュを拒否します。
この答えは簡単な説明を与えます: https://stackoverflow.com/a/2933656/1866402
(コメントを追加するのに十分な評判がないため、これを回答として追加しています)
リポジトリを制御できる場合は、権限を利用してこれを実現できます。リポジトリを取得するユーザーには、マスターリポジトリへの書き込み権限を付与しないでください。