Git хорошо работает с бинарными файлами? - PullRequest
79 голосов
/ 15 января 2011

Хорошо ли git с бинарными файлами?

Если у меня много несжатых файлов, которые изменяются, и много сжатых файлов, которые никогда не изменялись (или почти никогда), хорошо ли с этим справится git?Например, если я вставлю или удалю середину и вставлю данные ближе к концу, он заметит это, как это происходит с текстом?

Если git не подходит для двоичных файлов, какой инструмент я могу рассмотреть?

Ответы [ 6 ]

39 голосов
/ 16 января 2011

В дополнение к другим ответам.

  • Вы можете отправить 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 отображал читаемый человеком diff для двоичных файлов или частей двоичных файлов.Например, для файлов * .jpg это может быть разница в информации EXIF, для файлов PDF это может быть разница между их текстовым представлением (pdf2text или чем-то подобным).

HTH.

37 голосов
/ 15 января 2011

Из коробки git может легко добавлять двоичные файлы в свой индекс, а также сохранять их эффективным способом, если вы не будете часто обновлять большие несжимаемые файлы.

Проблемы начинаются, когда git нужно генерировать diff-файлы и объединять: git не может генерировать значимые diff-файлы или объединять двоичные файлы любым способом, который может иметь смысл. Поэтому при всех слияниях, перебазировках или выборках, связанных с изменением двоичного файла, вам придется вручную разрешать конфликты этого двоичного файла.

Вам необходимо решить, достаточно ли редки изменения двоичных файлов, чтобы вы могли жить с дополнительной ручной работой, которую они вызывают в обычном рабочем процессе git, включающем слияния, ребазировки, вишни.

12 голосов
/ 11 октября 2012

Если у вас действительно большие двоичные файлы, вы можете использовать git-annex для хранения данных за пределами репозитория. Проверить: http://git -annex.branchable.com /

5 голосов
/ 15 января 2011

Я не знаю каких-либо инструментов, которые пытаются хранить различия двоичных файлов для контроля версий, но стоит отметить, что Git не делает этого даже для текстовых файлов. Git хранит файлы в виде больших двоичных объектов, и делает различие между ними, когда это необходимо.

Если вы хотите управлять версиями в документах Photoshop / Illustrator, GridIron Flow может помочь вам. Если вы пытаетесь синхронизировать их между компьютерами, Dropbox или Rsync могут справиться с этим, но они не будут выполнять интеллектуальное различие.

2 голосов
/ 15 января 2011

Ну и гад хорошо с двоичными файлами.Но он не будет обрабатывать двоичные файлы, как текстовые файлы.Это как будто вы хотите объединить двоичные файлы.Я имею в виду, что разница в формате JPEG никогда не вернет вам ничего.Git очень хорошо работает с текстовыми файлами и, вероятно, так же плохо, как и любое другое решение с двоичными файлами!

0 голосов
/ 04 апреля 2019

Если вам нужно решение для управления версиями, вы можете рассмотреть вариант git-lfs , в котором имеется легкий указатель на ваш файл.

это означает, что при клонировании репо загружаются не все версии, а только та, которая извлечена.

Вот хороший учебник о том, как его использовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...