gitはバイナリファイルに適していますか?
多くの非圧縮ファイルが変更されており、多くの圧縮ファイルが変更されていない(またはほとんど変更されていない)場合、Gitで適切に処理できますか?たとえば、途中でデータを挿入または削除し、最後の方にデータを挿入すると、テキストの場合と同じように気づきますか?
gitがバイナリファイルでうまくいかない場合、どのツールを検討すればよいですか?
gitはバイナリファイルに適していますか?
多くの非圧縮ファイルが変更されており、多くの圧縮ファイルが変更されていない(またはほとんど変更されていない)場合、Gitで適切に処理できますか?たとえば、途中でデータを挿入または削除し、最後の方にデータを挿入すると、テキストの場合と同じように気づきますか?
gitがバイナリファイルでうまくいかない場合、どのツールを検討すればよいですか?
回答:
箱から出してすぐに、gitはバイナリファイルをインデックスに簡単に追加できます。また、大きな非圧縮ファイルを頻繁に更新しない限り、効率的な方法でそれらを保存できます。
問題はgitが差分とマージを生成する必要があるときに始まります:gitは意味のある差分を生成したり、意味のある方法でバイナリファイルをマージしたりできません。したがって、バイナリファイルへの変更を含むすべてのマージ、リベース、またはチェリーピックでは、そのバイナリファイルに対して手動で競合を解決する必要があります。
バイナリファイルの変更が、マージ、リベース、チェリーピックを含む通常のgitワークフローで発生する追加の手動作業に耐えられるほどまれであるかどうかを判断する必要があります。
git diff --binary
バイナリファイルにパッチを適用できるようになります。
他の回答に加えて。
いわゆるバイナリdiff形式を使用して、バイナリファイルにdiffを送信できます。人間が読める形式ではなく、リポジトリに正確なプリイメージがある場合、つまりファズがない場合にのみ適用できます。
例:
diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
GIT binary patch
delta 85
zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
delta 135
zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
textconv gitattributeを使用してgit diff
、バイナリファイルまたはバイナリファイルの一部の人間が読める差分を表示することができます。たとえば、*。jpgファイルの場合、EXIF情報が異なる場合があり、PDFファイルの場合、テキスト表現(pdf2textまたはそのようなもの)が異なる場合があります。
HTH。
非常に大きなバイナリファイルがある場合は、git-annexを使用して、リポジトリの外部にデータを保存できます。チェックアウト:http : //git-annex.branchable.com/
バージョン管理のためにバイナリファイルの差分を保存しようとするツールは知りませんが、Gitがテキストファイルに対してもこれを実行しないことは注目に値します。Gitはファイルをblobとして保存し、必要に応じてそれらの間で差分を取ります。
Photoshop / Illustratorドキュメントなどのバージョン管理を行う場合は、GridIron Flowが役立ちます。マシン間で同期を維持しようとしている場合、DropboxまたはRsyncはそれを処理できますが、インテリジェントな比較は行いません。
git gc
がガベージコレクションをするために実行する場合です。同じページから:「Gitは各ファイルの各バージョンを個別のオブジェクトとして保存するため、かなり非効率になる可能性があります。数千行の長さのファイルがあり、1行を変更することを想像してください。Gitは2番目のファイル全体を保存します。スペースの非常に大きな無駄です。」
git gc
:「ユーザーは、このタスクを各リポジトリ内で定期的に実行して、ディスク容量の使用率と動作パフォーマンスを維持することをお勧めします。一部のgitコマンドは、git gcを自動的に実行する場合があります。詳細については、以下の--autoフラグを参照してください。 」
gitはバイナリに適しています。ただし、テキストファイルのようなバイナリは処理されません。バイナリファイルをマージするようなものです。つまり、jpegのdiffは何も返しません。Gitはテキストファイルで非常にうまく機能し、おそらくバイナリファイルを使用する他のすべてのソリューションと同じくらい良くありません!