Можно ли хранить в git только контрольную сумму большого файла? - PullRequest
2 голосов
/ 01 октября 2009

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

Можно ли сказать git "Вот большой файл - не храните весь файл, просто возьмите его контрольную сумму и дайте мне знать, если этот файл отсутствует или изменен."

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

Ответы [ 3 ]

6 голосов
/ 01 октября 2009

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

http://github.com/schacon/git-media

Может быть, это поможет вам или, по крайней мере, покажет, как это можно сделать, и вы можете настроить его под свои конкретные потребности.

2 голосов
/ 01 октября 2009

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

В slim ветке вашего проекта у вас будут (например, Seth ) файлы-заглушки вместо ваших больших медиа-файлов, которые в качестве содержимого будут иметь SHA-1 большого большого файла (из "git hash-object -t blob <filename>").

Тогда в full форке вашего проекта вы будете использовать механизм "refs/replace/" для замены этих 'заглушек' истинным содержимым (используя git replace ). Для того чтобы синхронизировать SHA-1 в файлах-заглушках с реальными файлами больших медиа, потребовались бы некоторые ловушки.

Тогда, если вы хотите полный клон, вы извлекаете также из пространства имен "refs/replace/"; если вы хотите тонкий клон, вы не получите "refs/replace/".

Примечание: Я на самом деле не тестировал такую ​​настройку; также это еще не доступно в git, если вы не запустите 'master'

1 голос
/ 01 октября 2009

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

Не совсем то, что вы хотите, и вам все равно придется поддерживать текстовый файл вручную.

...