2012-08-13 11 views
7

大きな作業ディレクトリ(多くのギグ)で微妙な変化(数日)を追跡するためにGitを使いたいと思う。データはバイナリ/プレーンテキストが混在しています。バイナリデータはテキスト情報とほとんど変わりません。古いコミットへのアクセスはめったに必要なく、遅くなる可能性がありますが、最近の履歴は高速である必要があります。Gitアーカイブ古いコミット

古いデータを永久に失いたくない場合は、バックアップサーバーなどに移動するだけです。 Gitに古い履歴をアーカイブし、ローカルリポジトリの特定のサブセットのみを残すことができる何かがありますか?

そうでない場合は、この目的に適したツールがありますか?私はそれを知っているので、私はギットが好きで、私はバージョンコントロールとdiffsが欲しい。私は、Gitの高度な機能(分岐/マージ、分散されていない)のどれも必要としないので、他の類似したVCSはうまくいくでしょう。

+0

ほとんどのテキストファイルは、「マイクロ」としてカウントされません。これは、新しい開発ではなくバグを修正した段階で古いプロジェクトが取得するコミット率です。 Git *は膨大なものがなくてもこれを処理できるはずです。あなたのリポジトリは実際にあなたの歴史の一部をオフサイトにダンプする必要があるほど速く成長していますか? – millimoose

+0

合計データサイズが100GB以上になることはありません。賢明な圧縮を行ったとしても、1日に何回も10,000+ファイルの規模をわずかに変更しても、ローカルのリポジトリキャッシュに大幅に追加されます。私は自動的に再構築を計画していますが、その有用性にも限界があります。 Gitが設計されたものではないので、私がチゼルを打ち破ってホイールを再構築する前に、すでにそのタイプのものをサポートしていたのだろうかと思っていました。 – tjameson

答えて

4

git format-patchでパッチを適用する場合は、git clone --depth <depth>でシャロークローンを作成し、手順7を実行します。確かにあなたはそうではありませんが、その場合はthis answerthis answerが役に立つでしょう。 2番目の結論はgit checkout --orphanがおそらくあなたが望むものを得る最良の方法だと結論づけています。もちろん、完全な履歴を一度ローカルにクローンして、より小さなブランチにする必要があります。 git format-patchでパッチを作成し、git amで別のリポジトリにそれらを適用すると、実行するのは困難でも、スクリプトにもない

あなたは冒険を感じている場合は、このひどくたいが、そしてより複雑なプッシュプロセスを我慢して喜んでいます、。プッシュプロセスに余分なレイヤーが追加されます。浅いリポジトリにパッチを作成し、ローカルまたは他の場所にある完全リポジトリにプログラムで適用し、後者からプッシュします。時間とトラブルはおそらくそれに値するものではありませんが、確かに可能です。

+0

Hmm。私はそれを見なければならないでしょう。プログラムで変更セットを取得して他のリポジトリを更新できる限り、いいUIは必要ありません。私は、これが起こるはずのレポのいくつかのコピーを持つことを計画しているので、彼らは同期する必要がありますが、それは単に楽しみに追加されます。私はある時点でコミット履歴をスライスする方法を好むでしょう... – tjameson

+0

明確にするために、スライスの履歴は簡単です。スライスされた履歴を押して引っ張るのは難しいです。 Gitは、リポジトリのHEADがどこにあるのか、あなたの浅いリポジトリがどのスライスを取ったのかを解釈することはできません。(http://stackoverflow.com/a/6900428/877115) 、問題は多かれ少なかれ解決されます。 1つの浅いリポジトリで 'git format-patch'を他の浅いリポジトリに渡します。 'git am'で適用します。あなたは非常に簡単にこれをスクリプト化することができます。特に、途中でコミットを生成していない場合は、それをマージします。 – Christopher

+0

私は、私の特定のユースケースに戻ってマージできるようです。もっと浅いクローンを読むと、これを受け入れます。ありがとう! – tjameson

関連する問題