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)
) 、いくつかのタグ ( 、、)、いくつかのリモート ブランチ ( 、) 、その他の参照 ( 、、これらはメモ、スタッシュ、他の開発者の名前空間などである可能性があります) があるとします。next
pu
maint
v1
v2
v3
devA/master
devB/master
refs/foo/bar
refs/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 から上書きされるように設定されています。ドキュメントに最初に記載されていたように、これはミラーです。機能的に同一のコピーであり、オリジナルと交換可能であるはずです。next
pu
maint
devA/master
devB/master
refs/foo/bar
refs/foo/baz
git remote update