1. ホーム
  2. git

[解決済み] リポジトリのバックアップは "git push --mirror" で十分ですか?

2022-03-11 20:48:36

質問

私は一人の開発者で、ローカルの Git リポジトリで作業しています。バックアップのために、そのリポジトリの正確なコピーを別のサーバーに送りたいのです。

このようなことを行うには十分でしょうか?

git push --mirror

このコマンドを2~3回実行すると、Gitが "Everything up-to-date" と表示するので、どうやら完全なミラーではないらしいということで質問しています。トラッキングブランチを再プッシュしているようなのですが...?

$ git push --mirror
Counting objects: 42, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (30/30), done.
Writing objects: 100% (30/30), 5.09 KiB, done.
Total 30 (delta 17), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  mybranch -> mybranch
$ git push --mirror
Total 0 (delta 0), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  origin/mybranch -> origin/mybranch
$ git push --mirror
Everything up-to-date

何が起きているのか、これは良い戦略なのか?

編集:私は、次のようなものを使うのは好きではありません。 git bundle または .tar.bz2 アーカイブにアクセスできる作業コピーでありたいからです。私のバックアップサーバーはネットに接続されていて、常にオンになっているので、これは私が外出中にリポジトリにアクセスするための良い方法です。

どのように解決するのですか?

これは、リポジトリのバックアップを取るための戦略として、全く問題ないと言えるでしょう。リポジトリ内のすべての参照に対して、オリジン・リモートへのプッシュを実行する必要があります。これはローカルリポジトリの完全な「ミラー」になります。

EDIT: 質問中のあなたの更新された説明を見ました。gitはリモートのrefを他のすべてと一緒にリモート自身にプッシュしているようです。プッシュが完了すると、リモートの参照はあなたがプッシュしたことを反映するように更新されます。このとき、リモートのリポジトリは更新されていないため、さらにプッシュする必要があります。これで満足できない場合は このリモート参照を削除するには

git push :origin/mybranch

を実行し

git push --all

ただし、この方法では新しく作成したブランチはプッシュされないことを覚えておいてください。