1. ホーム
  2. git

[解決済み] git clone --mirror と git clone --bare の違いは何ですか?

2022-03-17 16:42:24

質問

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

<ブロッククオート

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

が、どのようなものなのか、詳しくは書かれていません。 --mirror のクローンとは異なります。 --bare クローンを作成します。

解決方法は?

この違いは --mirror , すべて refsがコピーされる そのまま . これは、リモート追跡ブランチ、ノート、refs/originals/* (filter-branch からのバックアップ) など、すべてを意味します。クローンしたレポには、それがすべて入っています。また、リモートアップデートが元からすべてを再取得するように設定されています(コピーされたrefを上書きします)。このアイデアは、リポジトリをミラーリングし、完全なコピーを持つことで、例えばセントラルレポを複数の場所でホストしたり、バックアップを取ったりすることができます。よりエレガントなgitの方法を除いて、ただ単純にレポをコピーすることを考えてみてください。

新しい ドキュメント は、ほとんどこのすべてを語っています。

--mirror

ソースリポジトリのミラーをセットアップします。 これは次のことを意味します。 --bare . と比較すると --bare , --mirror は、ソースのローカルブランチをターゲットのローカルブランチにマップするだけでなく、すべての参照 (リモートブランチ、ノートなどを含む) をマップし、これらのすべての参照が 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/masterdevB/master その他の参考文献 refs/foo/barrefs/foo/baz . 全てはクローンされたリモートの時と全く同じです。リモート追跡は、もしあなたが git remote update は、ミラーを削除して再ローン化したかのように、すべての参照はオリジンから上書きされます。元々ドキュメントにあるように、これはミラーなのです。機能的に同一のコピーであり、オリジナルと交換可能であることが前提となっています。