Является git для управления многими файлами размером более 500 МБ

Я бы поставил под управлением версии большой объем данных, т.е. структуру каталогов (с глубиной <= 5) с сотнями файлов размером около 500 МБ).

Мне нужна система, которая помогает мне:  - определить, были ли файлы изменены  - определить, были ли добавлены/удалены файлы  - клонировать весь репозиторий в другом месте  - сохранить "контрольную точку" и восстановить ее позже

Мне не нужен sha1 для обнаружения изменений, что-то более быстрое.

Является ли git для этого? Есть лучшая альтернатива?

Ответ 1

Как я упоминал в Что такое Git пределы", Git не предназначен для управления большими файлами (или большими двоичными файлами, если на то пошло).

Git потребуется, если вам нужно:

  • знать, что действительно изменилось в файле. Но для уровня каталогов другие ответы лучше (Unison или rsynch).
  • поддерживать близкую близость (т.е. "ту же ссылку" ) между вашими данными разработки и этими большими ресурсами. Имея только одну ссылку, вам понадобится вилка Git, например git-bigfiles, чтобы эффективно управлять ими.

Примечание: все еще используя Git, вы можете попробовать этот подход

К сожалению, rsync на самом деле не идеален для наших целей.

  • Прежде всего, это не система управления версиями. Если вы хотите сохранить несколько версий файла, вам нужно сделать несколько копий, что является расточительным, или xdelta их, что является утомительным (и, возможно, медленным для повторной сборки и затрудняет обрезку промежуточных версий), или проверьте их в Git, которые все равно расплавятся, потому что ваши файлы слишком большие.
  • Плюс rsync действительно не может обрабатывать переименования файлов правильно - вообще.

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

На основе gzip --rsyncable с POC, доступным в это Git repo.

Ответ 2

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

http://git-annex.branchable.com

Ответ 3

Unison File Synchroniser - отличный инструмент для поддержки нескольких копий больших двоичных файлов. Он будет делать все, что вы просите, кроме хранения контрольной точки, но вы можете сделать это с помощью жесткой ссылки rsync.

Ответ 4

Если вы используете систему unix (возможно, поскольку вы используете git):

  • Используйте репозиторий git для всех мелочей.
  • Большие файлы Symlink из одной папки "large_files" в соответствующие места в вашем репозитории.
  • Резервное копирование папки больших_файлов с использованием более традиционной системы резервного копирования, не связанной с версией, время от времени связывает их с zip файлом, если вам нужно передать их другим.

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

Ответ 5

Возможно, что-то вроде rsync лучше для ваших нужд (если вам просто нужны резервные копии, не concurrency, слияние, разветвление и т.д.)