git clone --mirrorを更新するには?


144

ライブサイトをミラーリングするためのgitリポジトリを作成しました(これは裸のgitリポジトリです):

git clone --mirror ssh://user@example.com/path/to/repo

ここで、このミラークローンをリモートオリジンからのすべての変更で更新し続けるには、どのコマンドを使用する必要がありますか?

コミット、参照、フック、ブランチなど、すべてを最新の状態に保ちたいです。

ありがとう!

回答:


213

これは、ミラーで実行する必要があるコマンドです。

git remote update

@マグナススコッグ:素晴らしい。ありがとう!これで全部ですか?次のような別のコマンドが必要git fetchですか?それともgit remote update一人でそれをすべてしますか?
J.ブルーニ、

11
git fetchとの違いを知りたいのですが。
するThorbjörnRavnアンデルセン

1
@Thorbjörn(スウェーデン語のö:)を使用する必要があります):Gitフェッチは、リモートからのリモート参照でリポジトリを更新するだけです。このコマンドは、ミラーリングされたリポジトリー上のすべてを更新します。
ラルフテニンジャ

4
ここでは、より良い答えを説明です:stackoverflow.com/questions/3959924/...
ralphtheninja

16
'git remote update --prune'はこれをすべて行いますが、元のリポジトリからブランチが削除されたときにブランチを削除します。
teeks99 '19

8

コミット、リファレンス、ブランチ、および「その他」に関しては、マグナスの回答が機能します(git remote update)。

しかし残念ながら、私が望んでいたようにclone/ update フック /ミラーリング/ する方法はありません...

フックのクローン/ミラーリングに関するこの非常に興味深いスレッドを見つけました:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

私は学んだ:

  • フックはリポジトリのコンテンツの一部とは見なされません。

  • .git/descriptionフックのように、フォルダーのように複製されないデータは他にもあります。

  • hooksディレクトリに表示されるデフォルトのフックは、TEMPLATE_DIR

  • templategitにはこの興味深い機能があります。

そのrsyncため、ミラーの目的を考えると、この「フックのクローン」を無視するか、戦略を立てるかのいずれかになります(バックアップ+他のクローンのソースのみ)。

ええと...私はフックのクローンを忘れて、git remote update道に固執します。

  • Seheは、「フック」はclone/ updateプロセスによって管理されないだけでなく、隠し場所、再配置なども管理されないことを指摘しました。したがって、厳密なバックアップrsyncまたは同等のものは、実際に進むべき道です。私の場合、これは本当に必要ないので(フックや隠し場所などを持たない余裕があります)、先ほど言ったように、私はに固執しますremote update

ありがとう!私自身の「git-fu」を少し改善しました... :-)


5

ここを参照してください:Gitは後続のクローンのすべてのブランチをクローンしませんか?

の代わりにブランチをプルしてこれが本当に必要な場合push --mirrorは、ここを見ることができます:

git bareレポジトリの "fetch --all"はローカルブランチをリモートブランチに同期しません

この回答は、それを比較的簡単に達成する方法の詳細な手順を提供します。


1
push(クローンのある場所から)受信側で実行する必要があるため、私には選択肢がありません。pullミラーリポジトリはベアリポジトリ(作業ツリーがないため「プル」もない)であるため、これもオプションではありません- git remote update実際にすべてを実行しているようです(参照されている回答よりもはるかに簡単です)...とにかく、ありがとう!確かにリンクされた質問/回答には貴重な情報があります。
J.ブルーニ

1
わかりました、私は通常の用語のように引っ張ることを意味しました。プッシュアンドプルテクノロジー。意味のない「クライアントからリモートでデータを取得する」以外に、gitまたはDVCSシステムにとって意味のある単語をダブしない単語はほとんどありません:) 2番目のリンクは、必要な詳細を提供します。「gitのリモートアップデート」がないことに注意してください、ではない実際には余分な操作をせずに「ミラー」ステータスを維持するには、そこに言及
sehe

1
うーん...申し訳ありません(HTH)-「絶対」ミラーは、元のrepoフォルダの単純な「rsync」を使ってより簡単に実現できるようです...私が望んでいたものではありませんが、いくつかのテストを行っただけです...そして、フックをコピーするものは何もないようです-私は特に興味があります...
J.ブルーニ

1
参考までに、このミラーの目的は次のとおりです。1)元のリポジトリサーバーのデータが失われた場合に復元できる完全なバックアップ。2)元のソースリポジトリにアクセスせずに、他のユーザーがクローンを作成してローカルの作業リポジトリを取得できる場所
J. Bruni

1
フックとすべてが必要な場合は、gitosisが必要なものを備えているかもしれません(よく覚えていません)rsync。また、あなたは隠し場所(ここを参照)を忘れて情報もやり直していると思います...?
sehe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.