タイトルがちょっと変だと思うので、まず少し背景知識を見てみましょう。
いくつかのローカルのgitリポジトリがあり、バックアップを作成したいと思いました。私は2つの方法を考えました。git bundle
(tar
他の方法もたくさんあることを知っていますが、リポジトリを「単一ファイル」にパッケージ化できる「簡単」な方法が欲しい)
- タールを使う
私が試したコマンドは
tar cvf gitrepo.tar gitrepo/
一見するとうまくいきますが、どこかに抽出すると、次のような奇妙なことが起こります。
git config(.git / configにあるもの)はtarのものとは異なるようですが、「古い」バージョンです。例: 構成を編集して圧縮してから解凍すると、何らかの理由で構成に最新の変更は適用されません。
それ以外は他のすべてがうまくいくようです。しかし、.gitフォルダ内の他のファイルに設定ファイルに似た奇妙な点があるかどうかを確認しませんでした。
- gitバンドルの使用
私が試した2つのコマンドは次のとおりです。
git bundle create repo.bundle
そして
git bundle create repo.bundle --all
最初のコマンドは最初は機能しているように見えましたが、そのフラグを使用しなかったため、すべての分岐がないことがわかりました--all
。
2番目のコマンドは(もう一度)一見すると機能しますが、git cloneそのパッケージを実行すると結局含まれなくなります。すべてのファイルバンドルされていない/元のローカルストアからコミット...
「見つからないファイル」が.gitにあると思ったので、そこで最大のファイルを見つけて.git/objects/packでファイルを見つけました...
cd "$@"/.git/objects/pack ; mkdir ~/SAMPLE; mv *.pack ~/SAMPLE; git unpack-objects < ~/SAMPLE/*.pack; rm -rf ~/SAMPLE
$@
gitパッケージから複製されたローカルストアの名前。上記の問題は解決しませんでしたが、元のリポジトリにはまだファイルがありませんが、コミット履歴の一部が復元されたことを確認しました。
それでは、ファイルへの最新の変更を維持し、失われることなくローカルのgitリポジトリ(可能な限り単一のファイル)を適切にバックアップする方法は混乱していますか? (例:すべてのコミット履歴、四半期など)
答え1
抽出前にtarを移動すると、tarが期待どおりに機能するようです。
mv gitrepo.tar otherdir/
cd otherdir ; tar xvf gitrepo.tar
代わりに、zipはアーカイブを最初に移動せずに機能するようです。
zip -Zs -r -FS gitrepo.zip gitrepo/
上記のコードは圧縮なしでzip圧縮を実行します。