私はソロ開発者で、ローカルのGitリポジトリで働いています。バックアップのために、そのリポジトリの正確なコピーを別のサーバーに送りたいです。
これで十分ですか?
git Push --mirror
Gitが「すべてが最新」であると通知する前に、このコマンドを2、3回実行できることがあるので、質問しているので、明らかに正確なミラーではありません。追跡ブランチを再プッシュしているようです...?
$ 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
アーカイブのようなものを使用したくありません。バックアップサーバーはネットに接続されており、常にオンになっているため、これは外出中にリポジトリにアクセスするのに便利な方法です。
これは、リポジトリをバックアップするための完全に受け入れられる戦略だと思います。リポジトリ内のすべての参照に対して、Originリモートへのプッシュを実行する必要があります。ローカルリポジトリの完全な「ミラー」にします。
編集:質問であなたの更新された説明を見ました。 gitがリモートrefを他のすべてとともにリモート自体にプッシュしているようです。プッシュが完了すると、リモートrefが更新され、プッシュされたことが反映されます。これは、リモートリポジトリでは古くなっているため、さらにプッシュする必要があります。これで満足できない場合。このリモート参照を削除するには
git Push:Origin/mybranch
そして使用する
git Push --all
ただし、作成した新しいブランチはプッシュされません。
2回目にプッシュされたものが表示されるのは、--mirror
が予想よりも少し多くプッシュされるためです。ミラーはeverythingを意味するため、ローカルブランチとは別に、リモートブランチもプッシュします。そのため、通常どおり(または--mirror
で)プッシュすると、mybranch
がプッシュされ、Origin/mybranch
が更新されてOriginの新しいステータスが反映されます。 --mirror
でプッシュすると、Origin/mybranch
もプッシュされます。
これは、あなたが見る奇妙さをもたらし、そのリモートから引っ張ると、さらに悪い奇妙さをもたらします。 Origin/origin/mybranch
などの名前のブランチを取得します。したがって、通常は、--mirror
を1回限りのコピーに使用し、通常の使用には通常のプッシュ(おそらく--all
を使用)を使用するのが最善です。
すべてのブランチとタグを常にプッシュするには、次のように.git/config
を更新できます。
[remote "Origin"]
url = ...
fetch = ...
Push = +refs/heads/*
Push = +refs/tags/*
これにより、通常のプッシュはミラーに似たものになりますが、ソースに存在しないブランチや早送りでない更新のブランチは削除されません。
残念ながら、Pushでは正確なコピーを取得できません。あなた 隠し場所を失う 。
私がやることは:
リポジトリのセットアップ:git clone --mirror user@server:/url-to-repo.git
次に、バックアップを更新する場合:git remote update
クローンの場所から。
これは、後で追加される新しいブランチを含むすべてのブランチをバックアップしますが、削除されたブランチはクローンから削除されないことに注意してください(バックアップにとっては良いことです)。
私は通常git Push --all
。 --mirrorを使用するのは、新しく作成したブランチをプッシュする必要がある場合、またはいくつかのブランチを削除して、1つずつ名前を付けたくない場合のみです。それ以外の場合、Push --all
通常、必要に応じて機能します。
アンバーの答え と同じ精神で、次のことができます。
git bundle
で作成.git
フォルダーのコピーを圧縮して、別のサーバーに送信するだけではどうですか?