589

git clone ヘルプ ページには、次のように書かれてい--mirrorます。

リモート リポジトリのミラーをセットアップします。これは を意味し--bareます。

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

4

8 に答える 8

669

違いは、を使用する場合--mirrorすべての参照がそのままコピーされることです。これはすべてを意味します:リモートトラッキングブランチ、ノート、refs / originals / *(フィルターブランチからのバックアップ)。複製されたリポジトリにはすべてがあります。また、リモートアップデートがオリジンからすべてを再フェッチするように設定されています(コピーされた参照を上書きします)。アイデアは、実際にはリポジトリをミラーリングし、完全なコピーを作成することです。これにより、たとえば、中央リポジトリを複数の場所でホストしたり、バックアップしたりできます。はるかにエレガントなgitの方法を除いて、リポジトリをまっすぐにコピーすることを考えてください。

新しいドキュメントには、ほとんどすべてが記載されています。

--mirror

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

私の元の回答では、ベアクローンと通常の(非ベア)クローンの違いも指摘されています。非ベアクローンはリモートトラッキングブランチを設定し、のローカルブランチのみを作成しますがHEAD、ベアクローンはブランチを直接コピーします。

originにいくつかのブランチ( master (HEAD)、、、、および) next、いくつかのタグ(、、 ) 、いくつかのリモートブランチ(、)、およびいくつかの他の参照(、、ノート、スタッシュ、他の開発者の名前空間など)があるとします。pumaintv1v2v3devA/masterdevB/masterrefs/foo/barrefs/foo/baz

  • git clone origin-url(非ベア):すべてのタグがコピーされ、ローカルブランチがリモートブランチをmaster (HEAD)追跡し、リモートブランチ、、、およびorigin/masterが取得されます。トラッキングブランチは、のようなことをすると、期待どおりにフェッチされるように設定されています。(複製されたリモート内の)リモートブランチおよびその他の参照は完全に無視されます。origin/nextorigin/puorigin/maintgit fetch origin

  • git clone --bare origin-urlすべてのタグがコピーされ、ローカルブランチ、、、、およびが取得されます。master (HEAD)リモートトラッキングブランチは取得されません。つまり、すべてのブランチがそのままコピーされ、完全に独立してセットアップされ、再度フェッチする必要はありません。(複製されたリモート内の)リモートブランチおよびその他の参照は完全に無視されます。nextpumaint

  • git clone --mirror origin-urlこれらの参照の最後の1つはそのままコピーされます。すべてのタグ、ローカルブランチmaster (HEAD)、、、、、およびリモートブランチとnext、その他の参照とを取得します。すべてが、複製されたリモートの場合とまったく同じです。リモートトラッキングは、実行すると、ミラーを削除して再クローン化したかのように、すべての参照が元の場所から上書きされるように設定されています。ドキュメントが最初に言ったように、それは鏡です。これは、元のコピーと互換性のある、機能的に同一のコピーであると想定されています。pumaintdevA/masterdevB/masterrefs/foo/barrefs/foo/bazgit remote update

于 2010-10-18T14:14:50.150 に答える
77
$ 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

于 2010-10-18T14:14:46.857 に答える
27

今日の 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
于 2014-06-17T18:05:09.073 に答える
17

Duplicating a Repositoryに関する GitHub ドキュメントからの微妙な説明:

ベア クローンと同様に、ミラー化されたクローンにはすべてのリモート ブランチとタグが含まれますが、フェッチするたびにすべてのローカル参照が上書きされるため、常に元のリポジトリと同じになります。

于 2015-04-27T17:25:15.283 に答える