2016-05-08 9 views
0

git version control systemは、一種の分散ログです(raftコンセンサスプロトコルと概念的に類似しています)。削除されたファイルをgitリポジトリから平滑化できますか?

ラフトや他のシステムのコンセプトはlog compactionなので、冗長なチェンジセットは変更の全体的なログを大幅に減らしません。

私が望むのは、削除されたファイルを「バルククリーン」することです.1つのファイルを除外しないでください。

私の質問は削除されたファイルをgitリポジトリから平滑化できますか?

EDIT:

  • 私の歴史の中で想定 - 私は、異なる時点で5つの異なる100Mバイナリファイルをチェックインする誰かの5つの別々のシナリオを持っている - と私はむしろことを毎回ダウンロードする必要はありませ思います誰かがクローンをします。私はまだ私のレポを保持しながら、私のレポから削除されたファイルの一括クリーンを探しています。
+1

削除したファイルを「クリーン」または「フラットアウト」するとはどういう意味ですか?コミットによって参照されているリポジトリからは削除できません。それ以外の場合は、更新履歴の一部を失うことになります。しかし、Gitはファイルをコンテンツハッシュで保存しているので、ファイルの各バージョンのコピーはいくつありますが、そのリビジョンの数にかかわらずです。 – Wyzard

+0

現在のツリーを除くすべてのファイルは「削除済み」です。それらを取り除きたいのであれば、新しいリポジトリを作成し、現在のツリーをそこにインポートするだけです。あなたは何を削除したいと思いますか? –

+0

ありがとう@Wyzard - 私はシナリオを明確にしました。 – hawkeye

答えて

0

[OK]を - ここにチェックするもののリストです:

あなたが実行することができます:あなたが使用して情報を得ることができます

git gc 

git count-objects -v 

スクリプトhere for git-fatfilesがありますが。

これはの新しいレポのスクリプトです。

あなたは大きなオブジェクトを一覧表示し、それらを並べ替えることができ、これを使用する:

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n 

はあなたがスペースを取りブロブを持っていたコミットを見つけることができますthisを使用します。

0

「100Mファイルをチェックする5つのシナリオがありますが、誰かがクローンを作成するたびにダウンロードする必要はありません」

これはすでにこれを行います。ファイルの内容が同じであれば、そのハッシュは同じになります。 Gitはハッシュを使用してファイルを識別します。そのため、ファイルは同じハッシュに解決され、スペース使用量が増加することはありません。

一方で、ファイルの内容は、場合若干異なる、その後、スペースがたり、様々な彼らは、gitのツリーのどこにいるかの詳細と、使用されるオプションに応じて、保存されてもしなくてもよいときgit gcは発表された。 (ファイルがdiffableであると仮定すると、バイナリファイルがあるかもしれないし、そうでないかもしれない)gitデルタ圧縮を調べる。

これはすべて、gitは多くの点で大きなバイナリファイルでうまくいきません100 MBのファイルはバイナリですが、おそらくそうではありません)、大きなファイルやgit以外のscmをサポートするには、git large filesなどのgitを参照してください。

関連する問題