Контроль версий для двоичных файлов

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

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

Поскольку git кажется очень распространенной и очень мощной системой контроля версий, мне интересно, возможно ли ее использовать. У меня есть только базовые знания о git (pull add commit push), но я понимаю, что он обладает более продвинутыми функциями. Я хочу понять, смогу ли я реализовать некоторые базовые функции и получить все расширенные функции бесплатно.

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

Я искал и понял, что мне нужно написать собственный mergetool? Правильно ли мое понимание?

Я также понимаю, что трехстороннее слияние выполняется программой diff3 или, по крайней мере, в git встроены некоторые функции. Должен ли я написать свою версию? Будет ли возможно использовать его с git? Нужно ли перекомпилировать git?

Git также сохраняет коммиты как изменения, чтобы сэкономить место. Это использует diff для этого? Можно было бы заменить его? Нужно ли перекомпилировать git?
Есть ли какой-то другой вид функциональности, который мне пришлось бы реализовать?
Мой первоначальный план состоял в том, чтобы использовать один файл для проекта, но каждый проект состоит из независимых подпроектов, которые будут объединены независимо. Получу ли я что-нибудь, сохранив проект как разные файлы для каждого подпроекта?

Есть ли где-нибудь хорошая документация о том, какому интерфейсу должны соответствовать diff, diff3 и mergetool? На каких языках они могут быть написаны?

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

1 ответ

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

Существуют сторонние инструменты для обработки бинарных файлов.

введите описание изображения здесь


но каждый проект состоит из независимых подпроектов

В git для этого есть подмодули && поддерево

подмодуль git добавить только выбрать последний коммит

введите описание изображения здесь


Есть ли где-нибудь хорошая документация о том, какому интерфейсу должны соответствовать diff, diff3 и mergetool?

На каких языках они могут быть написаны?

Прочитайте это, есть ссылки на алгоритм diff2 и diff3
Какова версия diff для git? diff2 или diff3?

Другие вопросы по тегам