Git хорош с двоичными файлами?
Если у меня есть много несжатых файлов, которые изменяются, и многие сжатые файлы никогда (или почти никогда) не изменяются, справится ли git с этим хорошо? Например, если я вставлю или удалю середину и вставлю данные ближе к концу, он заметит это, как и с текстом?
Если git плохо работает с двоичными файлами, какой инструмент я могу рассмотреть?
Ответы:
По умолчанию git может легко добавлять двоичные файлы в свой индекс, а также эффективно хранить их, если вы не выполняете частые обновления больших несжимаемых файлов.
Проблемы начинаются, когда git необходимо генерировать различия и слияния: git не может генерировать значимые различия или объединять двоичные файлы любым разумным способом. Таким образом, все слияния, перестановки или выборки, связанные с изменением двоичного файла, потребуют от вас ручного разрешения конфликтов в этом двоичном файле.
Вам нужно решить, являются ли изменения двоичного файла достаточно редкими, чтобы вы могли жить с дополнительной ручной работой, которую они вызывают в обычном рабочем процессе git, включающем слияния, перестановки, выбор вишни.
источник
git diff --binary
, сможет исправлять двоичные файлы.В дополнение к другим ответам.
Вы можете отправить разницу в двоичный файл, используя так называемый двоичный формат сравнения . Он не читается человеком и может быть применен только в том случае, если у вас есть точный прообраз в вашем репозитории, то есть без какого-либо нечеткости.
Пример:
Вы можете использовать textconv gitattribute, чтобы
git diff
показать удобочитаемые различия для двоичных файлов или частей двоичных файлов. Например, для файлов * .jpg это может быть разница в информации EXIF, для файлов PDF это может быть разница между их текстовым представлением (pdf2text или что-то в этом роде).HTH.
источник
Если у вас действительно большие двоичные файлы, вы можете использовать git-application для хранения данных вне репозитория. Проверить: http://git-annex.branchable.com/
источник
Я не знаю никаких инструментов, которые пытаются хранить различия двоичных файлов для контроля версий, но стоит отметить, что Git не делает этого даже для текстовых файлов. Git хранит файлы в виде больших двоичных объектов и при необходимости выполняет различие между ними.
Если вы хотите управлять версиями чего-то вроде документов Photoshop / Illustrator, GridIron Flow может помочь вам. Если вы пытаетесь синхронизировать их между машинами, Dropbox или Rsync справятся с этим, но они не собираются делать интеллектуальное сравнение.
источник
git gc
собирать мусор. С той же страницы: «Поскольку Git хранит каждую версию каждого файла как отдельный объект, это может стать довольно неэффективным. Представьте, что у файла есть несколько тысяч строк и изменяется одна строка. Git сохранит второй файл целиком, который это огромная трата места ".git gc
: "Пользователям рекомендуется выполнять эту задачу на регулярной основе в каждом репозитории, чтобы поддерживать хорошее использование дискового пространства и хорошую производительность. Некоторые команды git могут автоматически запускать git gc; подробности см. В флаге --auto ниже . "Что ж, git хорош с двоичными файлами. Но он не будет обрабатывать двоичные файлы, такие как текстовые файлы. Это похоже на то, что вы хотите объединить двоичные файлы. Я имею в виду, что разница в формате jpeg никогда вам ничего не вернет. Git очень хорошо работает с текстовым файлом и, вероятно, так же плохо, как и любое другое решение с двоичными файлами!
источник
если вам нужно решение для управления версиями, вы можете рассмотреть git-lfs , у которого есть легкий указатель на ваш файл.
это означает, что когда вы клонируете свое репо, оно загружает не все версии, а только ту, которая проверена.
Вот хороший урок о том, как его использовать
источник