2017-01-20 7 views
1

たとえば、の圧縮ファイルであるhostname_ip.list.tar.bz2(7MB)ファイルは80MBです。gitで特定のファイルのリビジョンを1つだけ保持することはできますか?

時々、私はhostname_ip.listを更新しますので、Gitは.gitディレクトリは非常に大きな原因となりますhostname_ip.list.tar.bz2のすべてのリビジョンを、維持しますhostname_ip.list.tar.bz2git commit

に圧縮します。

私の場合、私はhostname_ip.list.tar.bz2という古いリビジョンは必要ありません。 hostname_ip.list.tar.bz2の1つのバージョンを保持することは可能ですか?

答えて

2

はい、Gitで可能です。しかしそれは良くありません。 git filter-branchであり、いくつかのツールはすべての関連するコミットから古いバージョンを削除できますが、そうすることで常に履歴が書き換えられるため、コミット履歴が不安定になります。リポジトリを他の人と共有しない限り、大丈夫です。そのようなプロジェクトに多くの人々が協力している場合、ブランチを維持することは間違いありません。

Githubを使用している場合は、新しい機能LFSを試すことができます。そうでない場合は、SVNなどの他のVCSを使用して大きなファイルを処理できます。しかし、あなたは良い解決策を作るために余分な仕事が必要です。

0

gitで戦略が成果を上げるかどうかは、この大きなファイルの内容と、時間の経過とともにどのように変化するかによって異なります。

注:残りの回答は、ファイルの圧縮されていないバージョンがテキストであり、行指向の(つまり、多くの行で構成されている)と仮定しています。ファイルを変更すると、すべての行ではなく一部の行だけが変更されます。

その場合、ファイルを変更すると、変更された行だけがコミットに格納されます。が変更されました。言い換えれば、コミットはそれほど大きくはありません(少なくとも、元のファイルと比較して)。

ファイルを圧縮すると、行指向のテキストベースのデータは処理されなくなります。現在、すべての変更は、たとえ1バイトでさえも、ファイル全体が新しいコミットとして格納されます()。これは、gitにバイナリファイルを格納しないことが主な理由の1つです(少なくとも変更しない限り)。

最も単純なオプションは、ファイルをまったく圧縮しないことです。

+0

Gitのxdeltaベースの圧縮ファイル圧縮は、テキストだけでなくバイナリファイルでも動作します。実際にxdeltaを破るのは、圧縮ファイルなどの高エントロピーデータ*です。つまり、あなたの提案(圧縮しないでください)は、バイナリであっても、ここで試してみてください。 :-) – torek

関連する問題