git clone ヘルプ ページには、次のように書かれてい--mirror
ます。
リモート リポジトリのミラーをセットアップします。これは を意味し
--bare
ます。
--mirror
ただし、クローンとクローンの違いについては詳しく説明しません--bare
。
違いは、を使用する場合--mirror
、すべての参照がそのままコピーされることです。これはすべてを意味します:リモートトラッキングブランチ、ノート、refs / originals / *(フィルターブランチからのバックアップ)。複製されたリポジトリにはすべてがあります。また、リモートアップデートがオリジンからすべてを再フェッチするように設定されています(コピーされた参照を上書きします)。アイデアは、実際にはリポジトリをミラーリングし、完全なコピーを作成することです。これにより、たとえば、中央リポジトリを複数の場所でホストしたり、バックアップしたりできます。はるかにエレガントな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
:これらの参照の最後の1つはそのままコピーされます。すべてのタグ、ローカルブランチmaster (HEAD)
、、、、、およびリモートブランチとnext
、その他の参照とを取得します。すべてが、複製されたリモートの場合とまったく同じです。リモートトラッキングは、実行すると、ミラーを削除して再クローン化したかのように、すべての参照が元の場所から上書きされるように設定されています。ドキュメントが最初に言ったように、それは鏡です。これは、元のコピーと互換性のある、機能的に同一のコピーであると想定されています。pu
maint
devA/master
devB/master
refs/foo/bar
refs/foo/baz
git remote update
$ git clone --mirror $URL
の省略形です
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
(ここから直接コピー)
現在のmanページの説明:
と比較すると、ソースのローカルブランチをターゲットのローカルブランチにマップするだけ
--bare
でなく、すべての参照(リモートブランチ、メモなどを含む)をマップし、これらすべての参照がターゲットリポジトリ内ので--mirror
上書きされるようにrefspec構成を設定します。git remote update
。
今日の git-2.0.0 での私のテストでは、 --mirror オプションがフック、構成ファイル、説明ファイル、情報/除外ファイル、および少なくとも私のテストケースではいくつかの参照をコピーしないことが示されていますわかりません。)私はそれを「機能的に同一のコピーで、オリジナルと交換可能」とは呼びません。
-bash-3.2$ git --version
git version 2.0.0
-bash-3.2$ git clone --mirror /git/hooks
Cloning into bare repository 'hooks.git'...
done.
-bash-3.2$ diff --brief -r /git/hooks.git hooks.git
Files /git/hooks.git/config and hooks.git/config differ
Files /git/hooks.git/description and hooks.git/description differ
...
Only in hooks.git/hooks: applypatch-msg.sample
...
Only in /git/hooks.git/hooks: post-receive
...
Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ
...
Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ
Only in /git/hooks.git/refs/heads: fake_branch
Only in /git/hooks.git/refs/heads: master
Only in /git/hooks.git/refs: meta
Duplicating a Repositoryに関する GitHub ドキュメントからの微妙な説明:
ベア クローンと同様に、ミラー化されたクローンにはすべてのリモート ブランチとタグが含まれますが、フェッチするたびにすべてのローカル参照が上書きされるため、常に元のリポジトリと同じになります。