すべてのブランチとタグを含むgitリポジトリ全体をバックアップする簡単な方法はありますか?
すべてのブランチとタグを含むgitリポジトリ全体をバックアップする簡単な方法はありますか?
回答:
それのクローンを作るだけではどうですか?
git clone --mirror other/repo.git
すべてのリポジトリは、そのリモートのバックアップです。
git branch -a
。多分それはもっと明白な方法です:リポジトリをクローンした後、すべてのブランチをフェッチするのではなく、すべてのコミットをフェッチします。ブランチは既存のコミットのみを参照します。
git clone
すべてをカバーしています。(1)はオプションであり、必須ではありません。結果がまだ最適化されている場合、それはまだバックアップです(2)はすでにgit自体でカバーされています。-私が伝えたい点は、git clone
関連するポイントをすでにカバーしている場合、別のツールが必要なことについてですか?私はまたgit bundle
、私の答えが間違っている、または無効であるとは思わないことも好みます。どちらのアプローチも、ホットバックアップとコールドバックアップのどちらとしても見ることができます。
git bundle
ファイルが1つだけなので、コピーしやすいので、この方法が好きです。ProGit:小さな喜びのバンドルを
参照してください。
「gitレポジトリにメールを送信するにはどうすればよいですか?」も参照してください。
git bundle create /tmp/foo-all --all
詳細です:
git bundle
git show-refで表示される参照のみをパッケージ化します。これには、ヘッド、タグ、リモートヘッドが含まれます。
使用される基礎が宛先によって保持されることが非常に重要です。
宛先でアンパックするときに無視されるため、バンドルファイルに宛先にすでに存在するオブジェクトが含まれるようにして、注意を怠って問題ありません。
そのバンドルを使用するには、存在しないフォルダーを指定して(gitリポジトリの外に)クローンを作成できます。
git clone /tmp/foo-all newFolder
git bundle
は、私の意見では正しい答えであり、受け入れられたものではありません。もし彼がそのような質問をすることができれば、彼はクローンコマンドをよく知っていると思います、そしてそれは彼にとって明らかに十分ではありません(それはクローンであり、ダンプではないので)。ダンプは、単純なコピーとは異なるものです。たとえば、次のとおりです。1)通常の作業に最適である必要はありません(または機能する必要もありません)2)データ破損に対する優れた耐性と修復性が必要です3)多くの場合有用増分バックアップの場合は簡単に比較できますが、コピーの目的ではありません。
git bundle
かgit clone
取得するすべてのもの、例えばフックスクリプトを。
git bundle
リモートリポジトリに対して使用できますか?
他のいくつかの答えを拡張して、これは私がすることです:
リポジトリをセットアップします。 git clone --mirror user@server:/url-to-repo.git
次に、バックアップを更新する場合:git remote update
クローンの場所から。
これは、後で追加される新しいものを含め、すべてのブランチとタグをバックアップしますが、削除されたブランチはクローンから削除されないことに注意してください(これはバックアップに適している場合があります)。
これはアトミックなので、単純なコピーのような問題はありません。
http://www.garron.me/en/bits/backup-git-bare-repo.htmlを参照してください
KingCrunchとVonCによる素晴らしい答えをさらに詳しく
私はそれらを両方組み合わせました:
git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
その後、reponame.bundle
簡単にコピーできるというファイルがあります。次に、を使用して、そこから新しい通常のgitリポジトリを作成できますgit clone reponame.bundle reponame
。
git bundle
リポジトリ内の参照(ブランチまたはタグ)につながるコミットのみをコピーすることに注意してください。したがって、もつれたコミットはバンドルに保存されません。
git bundle create reponame.bundle --all
か?
すべてが.git
ディレクトリに含まれています。ファイルと同じように、プロジェクトと一緒にバックアップしてください。
copy
or cp
コマンドをよく知っていると思いますが、彼のニーズには合いません。そして私はまた、彼は裸のリポジトリを考えています(コピーすることもできますが、フル機能のバックアップではないと思います)。
最小ストレージサイズでgit-copyを使用してgit repoをバックアップできます。
git copy /path/to/project /backup/project.repo.backup
次に、プロジェクトを復元できます git clone
git clone /backup/project.repo.backup project
git clone --bare
+の場合、これは多くの作業のようgit push --force
です。
正解はIMOはgit clone --mirrorです。これにより、リポジトリが完全にバックアップされます。
Gitクローンミラーは、リポジトリ全体、メモ、ヘッド、参照などをクローンし、通常はリポジトリ全体を新しいgitサーバーにコピーするために使用されます。これにより、すべてのブランチとすべて、リポジトリ全体がプルダウンされます。
git clone --mirror git@example.com/your-repo.git
通常、レポのクローンにはすべてのブランチは含まれず、マスターのみが含まれます。
repoフォルダーをコピーすると、プルインされたブランチのみが「コピー」されます。デフォルトでは、マスターブランチのみ、または以前にチェックアウトした他のブランチになります。
また、Git bundleコマンドも望みどおりではありません。「bundleコマンドは、通常git pushコマンドを使用してネットワーク経由でプッシュされるすべてのものをバイナリファイルにパッケージ化し、バイナリファイルに送信して、誰かに電子メールで送信したり、フラッシュドライブに置いたりできます。別のリポジトリにバンドル解除してください。」(git clone --mirrorとgit clone --bareの違いは何ですか)
このスレッドは、git reposのバックアップを実行する方法についての洞察を得るために非常に役立ちました。自分にとって「正しい方法」(tm)を見つけるためのヒント、情報、または結論がまだ欠けていると思います。したがって、他の人を助けるためにここで私の考えを共有し、それらを強化するための議論にそれらを置きます。ありがとう。
したがって、元の質問をピックアップすることから始めます。
次に、典型的な願望でそれを豊かにし、いくつかの事前設定を指定します。
「100%」バックアップとは見方が異なります。ここに2つの典型的なものがあります。
gitのは、開発者向けツールであるとを経由してこの観点をサポートgit clone --mirror
してgit bundle --all
。
git gc
)gitは開発者ツールであり、管理者に任せます。git構成とOS構成のバックアップは、コンテンツのバックアップから分離されていると見なす必要があります。
それらのほとんどはバックアップ用の汎用です。
git gc --auto
git bundle --all
git bundle verify
。git clone --mirror
git fsck
。コールドコピーバックアップでは、常にフルファイルバックアップを実行できます。gitreposへのすべてのアクセスを拒否し、バックアップを実行して、再度アクセスを許可します。
進行中のコミットによってデータが破損するリスクがあるため、アクティブなリポジトリではファイルバックアップを実行できません。ホットコピーは、アクティブなリポジトリの固定状態をバックアップの目的で提供します。進行中のコミットはそのコピーに影響を与えません。上記のように、gitのクローンおよびバンドル機能はこれをサポートしますが、「100%管理」バックアップの場合、追加のコマンドを使用していくつかのことを行う必要があります。
git bundle --all
コンテンツのフル/インクリメンタルダンプファイルを作成し、構成ファイルを個別にコピー/バックアップするために使用します。git clone --mirror
構成を個別に使用、処理、コピーしてから、ミラーのフルファイルバックアップを実行します。
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
これにより、バックアップが作成され、セットアップが行われるため、git pushを実行してバックアップを更新できます。/ path / to / backupdirと/ path / to / repoが少なくとも異なるハードドライブであることを確認してください。そうでない場合、それを行うことはそれほど意味がありません。
2つのオプションがあります。
git repoディレクトリのtarを直接取得できます。サーバーにあるrepoのすべてのコンテンツが含まれているためです。バックアップを取っている間に誰かがリポジトリで作業している可能性があります。
次のコマンドは、repoのベアクローン(サーバーの場合と同様)を提供し、クローンを作成した場所のtarを問題なく取得できます。
git clone --bare {your backup local repo} {new location where you want to clone}
私が知る限り、あなたのリポジトリが置かれているディレクトリのコピーを作成することができます、それだけです!
cp -r project project-backup
git clone --bare
すると、一貫したスナップショットが得られます。