git clone --mirror と git clone --bare の違いは何ですか? 質問する

git clone --mirror と git clone --bare の違いは何ですか? 質問する

git clone のヘルプ ページには、次のことが書かれています--mirror

リモート リポジトリのミラーを設定します。これは次のことを意味します--bare

--mirrorしかし、クローンとクローンの違いについては詳しく説明されていません--bare

ベストアンサー1

違いは、 を使用すると--mirrorすべての参照がそのままコピーされることです。つまり、リモート追跡ブランチ、メモ、refs/originals/* (filter-branch からのバックアップ) など、すべてが含まれます。クローンされたリポジトリには、これらすべてが含まれます。また、リモート更新によって origin からすべてを再取得するように設定されています (コピーされた参照を上書きします)。アイデアは、リポジトリをミラーリングして完全なコピーを作成し、たとえば中央リポジトリを複数の場所でホストしたり、バックアップしたりできるようにすることです。リポジトリをそのままコピーするだけですが、はるかにエレガントな git の方法であると考えてください。

新しいドキュメンテーションほぼこのことを言っています:

--mirror

ソース リポジトリのミラーを設定します。これは を意味します--bare。 と比較すると--bare、はソースのローカル ブランチをターゲットのローカル ブランチにマップするだけでなく、すべての参照 (リモート ブランチ、メモなどを含む) をマップし、これらすべての参照がターゲット リポジトリで--mirrorによって上書きされるように refspec 構成を設定します。git remote update

私の最初の回答では、ベア クローン と通常の (非ベア) クローンの違いについても言及しました。非ベア クローンはリモート追跡ブランチを設定し、 のローカル ブランチのみを作成しますHEADが、ベア クローンはブランチを直接コピーします。

origin にいくつかのブランチ ( 、、、master (HEAD)) 、いくつかのタグ ( 、、)、いくつかのリモート ブランチ ( 、) 、その他の参照 ( 、、これらはメモ、スタッシュ、他の開発者の名前空間などである可能性があります) があるとします。nextpumaintv1v2v3devA/masterdevB/masterrefs/foo/barrefs/foo/baz

  • git clone origin-url(非ベア):master (HEAD)コピーされたタグ、リモート ブランチ を追跡するローカル ブランチorigin/master、リモート ブランチorigin/next、、origin/puおよび がすべて取得されますorigin/maint。追跡ブランチは、 などの操作を実行すると期待どおりに取得されるように設定されますgit fetch origin。リモート ブランチ (クローンされたリモート内) およびその他の参照は完全に無視されます。

  • git clone --bare origin-url:コピーされたタグ、ローカル ブランチmaster (HEAD)、、、nextおよびpuがすべて取得されmaint、リモート追跡ブランチは取得されません。つまり、すべてのブランチがそのままコピーされ、再度取得する必要のない完全に独立して設定されます。リモート ブランチ (クローンされたリモート内) およびその他の参照は完全に無視されます。

  • git clone --mirror origin-url:それらの参照はすべてそのままコピーされます。タグ、ローカル ブランチmaster (HEAD)、、、および、リモート ブランチと、その他の参照とがすべて取得されます。すべてがクローンされたリモートとまったく同じです。リモート トラッキングは、 を実行すると、ミラーを削除して再クローンしたかのように、すべての参照が origin から上書きされるように設定されています。ドキュメントに最初に記載されていたように、これはミラーです。機能的に同一のコピーであり、オリジナルと交換可能であるはずです。nextpumaintdevA/masterdevB/masterrefs/foo/barrefs/foo/bazgit remote update

おすすめ記事