すべてのブランチとタグを含むgitリポジトリ全体をバックアップする簡単な方法はありますか?
それのクローンを作るのはどうですか?
git clone --mirror other/repo.git
すべてのリポジトリは、そのリモートのバックアップです。
git bundle
その方法が気に入っています。oneファイルのみになり、コピーしやすくなります。
「 ProGit:喜びの小さな束 」を参照してください。
「 gitリポジトリにメールを送信するにはどうすればよいですか? 」も参照してください。
git bundle create /tmp/foo-all --all
詳細です:
git bundle
は、git show-refで示される参照のみをパッケージ化します。これには、ヘッド、タグ、リモートヘッド。
使用される基礎が宛先によって保持されることが非常に重要です。
注意してください。宛先で既に解凍されているオブジェクトは無視されるため、バンドルファイルには宛先にすでに含まれているオブジェクトが含まれます。
そのバンドルを使用するために、存在しないフォルダーを指定してクローンを作成できます(gitリポジトリの外部):
git clone /tmp/foo-all newFolder
他のいくつかの答えを拡大して、これが私がしていることです:
リポジトリのセットアップ: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 [email protected]/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
その後、簡単にコピーできるreponame.bundle
というファイルがあります。 git clone reponame.bundle reponame
を使用して、そこから新しい通常のgitリポジトリを作成できます。
git bundle
は、リポジトリ内の参照(ブランチまたはタグ)につながるコミットのみをコピーすることに注意してください。そのため、もつれたコミットはバンドルに保存されません。
すべてが.git
ディレクトリに含まれています。ファイルと同じように、プロジェクトとともにそれをバックアップします。
gitバンドルを使用、またはクローン
gitディレクトリのコピーはアトミックではないため、良い解決策ではありません。コピーに時間がかかる大きなリポジトリがあり、誰かがリポジトリにプッシュすると、バックアップに影響します。バンドルのクローン作成または作成には、この問題はありません。
git-copy を使用してgitリポジトリを最小ストレージサイズでバックアップできます。
git copy /path/to/project /backup/project.repo.backup
その後、git clone
を使用してプロジェクトを復元できます
git clone /backup/project.repo.backup project
正解IMOはgit clone --mirrorです。これにより、リポジトリが完全にバックアップされます。
Gitクローンミラーは、リポジトリ全体、メモ、ヘッド、参照などをクローンし、通常はリポジトリ全体を新しいgitサーバーにコピーするために使用されます。これにより、すべてのブランチとすべて、entireリポジトリがプルダウンされます。
git clone --mirror [email protected]/your-repo.git
通常、レポのクローン作成にはすべてのブランチが含まれず、マスターのみが含まれます。
リポジトリフォルダーをコピーすると、プルされたブランチのみが「コピー」されます。したがって、デフォルトでは、マスターブランチのみ、または以前にチェックアウトした他のブランチです。
Git bundleコマンドは、あなたが望むものでもありません:「bundleコマンドは、通常git Pushコマンドを使用してネットワーク経由でプッシュされるすべてのものを、誰かにメールしたり、フラッシュドライブに置いたりできるバイナリファイルにパッケージ化します。別のリポジトリにバンドルします。」 (from git clone --mirrorとgit clone --bareの違いは何ですか )
Githubにある場合は、bitbucketに移動し、「リポジトリのインポート」メソッドを使用して、githubリポジトリをプライベートリポジトリとしてインポートします。
それがビットバケツにある場合は、逆に行います。
これは完全なバックアップですが、クラウドにとどまるのが私の理想的な方法です。
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を直接取得できます。これは、サーバー上のリポジトリのむき出しの内容全体を保持しているためです。バックアップを取りながら誰かがレポで作業している可能性がわずかにあります。
次のコマンドを実行すると、リポジトリのベアクローンが(サーバー内にあるのと同じように)表示されます。その後、問題なくクローンした場所のtarを取得できます。
git clone --bare {your backup local repo} {new location where you want to clone}