web-dev-qa-db-ja.com

Gitリポジトリを完全にバックアップしますか?

すべてのブランチとタグを含むgitリポジトリ全体をバックアップする簡単な方法はありますか?

113
Daniel Upton

それのクローンを作るのはどうですか?

git clone --mirror other/repo.git

すべてのリポジトリは、そのリモートのバックアップです。

55
KingCrunch
git bundle

その方法が気に入っています。oneファイルのみになり、コピーしやすくなります。
ProGit:喜びの小さな束 」を参照してください。
gitリポジトリにメールを送信するにはどうすればよいですか? 」も参照してください。

git bundle create /tmp/foo-all --all

詳細です:

git bundleは、git show-refで示される参照のみをパッケージ化します。これには、ヘッド、タグ、リモートヘッド。
使用される基礎が宛先によって保持されることが非常に重要です。
注意してください。宛先で既に解凍されているオブジェクトは無視されるため、バンドルファイルには宛先にすでに含まれているオブジェクトが含まれます。


そのバンドルを使用するために、存在しないフォルダーを指定してクローンを作成できます(gitリポジトリの外部):

git clone /tmp/foo-all newFolder
172
VonC

他のいくつかの答えを拡大して、これが私がしていることです:

リポジトリのセットアップ:git clone --mirror user@server:/url-to-repo.git

次に、バックアップを更新する場合:クローンの場所からgit remote update

これは、後で追加される新しいものを含むすべてのブランチとタグをバックアップしますが、削除されたブランチはクローンから削除されないことに注意する価値があります(バックアップにとっては良いことです)。

これはアトミックであるため、単純なコピーで発生する問題はありません。

http://www.garron.me/en/bits/backup-git-bare-repo.html を参照してください

21
fantabolous

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は、リポジトリ内の参照(ブランチまたはタグ)につながるコミットのみをコピーすることに注意してください。そのため、もつれたコミットはバンドルに保存されません。

10
Kimmo Ahokas

すべてが.gitディレクトリに含まれています。ファイルと同じように、プロジェクトとともにそれをバックアップします。

4
Oren Hizkiya

gitバンドルを使用、またはクローン

gitディレクトリのコピーはアトミックではないため、良い解決策ではありません。コピーに時間がかかる大きなリポジトリがあり、誰かがリポジトリにプッシュすると、バックアップに影響します。バンドルのクローン作成または作成には、この問題はありません。

4
Sunil Khiatani

git-copy を使用してgitリポジトリを最小ストレージサイズでバックアップできます。

git copy /path/to/project /backup/project.repo.backup

その後、git cloneを使用してプロジェクトを復元できます

git clone /backup/project.repo.backup project
3
Quanlong

正解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の違いは何ですか

2
John

Githubにある場合は、bitbucketに移動し、「リポジトリのインポート」メソッドを使用して、githubリポジトリをプライベートリポジトリとしてインポートします。

それがビットバケツにある場合は、逆に行います。

これは完全なバックアップですが、クラウドにとどまるのが私の理想的な方法です。

0
Mohammad
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が少なくとも異なるハードドライブであることを確認してください。そうしないと、それほど意味がありません。

0
Arne

次の2つのオプションがあります。

  1. Git repoディレクトリにはtarを直接取得できます。これは、サーバー上のリポジトリのむき出しの内容全体を保持しているためです。バックアップを取りながら誰かがレポで作業している可能性がわずかにあります。

  2. 次のコマンドを実行すると、リポジトリのベアクローンが(サーバー内にあるのと同じように)表示されます。その後、問題なくクローンした場所のtarを取得できます。

    git clone --bare {your backup local repo} {new location where you want to clone}