У меня есть текстовый файл размером 190 МБ, который я хочу отслеживать на github.
Текстовый файл является произносимым лексиконным файлом для нашего механизма преобразования текста в речь. Мы регулярно добавляем и модифицируем строки в текстовых файлах, а разности довольно малы, поэтому в этом смысле он идеален для git.
Тем не менее, у GitHub есть строгий предел размера файла 100 МБ. Я пробовал службу хранения больших файлов GitHub, но каждый раз, когда она менялась, она загружает новую версию всего файла 190 МБ, поэтому она будет быстро расти до многих гигабайт, если я пойду по этому пути.
Я хотел бы сохранить файл как один файл, а не разделять его, потому что это то, как работает наш рабочий процесс, и потребовалось бы некоторое кодирование, позволяющее нескольким текстовым файлам вводить/выводить в наши инструменты (и у нас мало ресурсы разработки).
Одна из моих идей заключалась в том, что, возможно, можно настроить некоторые предварительные и пост-фиксационные перехватчики для разделения и конкатенации большого файла автоматически? Возможно ли это?
Другие идеи?
Изменить. Я знаю об ограничении размера файла 100 МБ, описанном в похожих вопросах здесь, в StackOverflow, но я не считаю свой вопрос дубликат, потому что я прошу конкретного случая где разницы малы и часты (я не пытаюсь загрузить большой ZIP файл или что-то еще). Тем не менее, я понимаю, что git -lfs подходит только для файлов, которые редко меняются, и что нормальный git будет идеально подходит для типа файла, который я описываю; за исключением того, что GitHub имеет ограничение размера файла.
Обновление. Вчера я провел эксперименты с созданием небольшой кросс-платформенной программы, которая разбивает и объединяет файлы в более мелкие файлы с помощью git hooks. Это вроде работает, но не очень удовлетворительно. Вам нужно будет исключить ваш большой текстовый файл .gitignore, что делает git не осведомленным о том, изменилось ли оно. Разделенные файлы изначально не обнаруживаются с помощью git status
или git commit
и приводят к той же проблеме, что и в этом вопросе SO, что довольно раздражает: Pre-commit script создает файл mysqldump, но "ничего не зафиксировать (рабочий каталог чист)" ?
Настройка задания cron (linux) и запланированной задачи (Windows) для автоматической регенерации разделенных файлов может быть исправлена, но это нелегко автоматически настроить, может вызвать проблемы с производительностью на компьютере пользователя и просто не очень элегантно решение. Могут также потребоваться некоторые хакерские решения, такие как динамическая модификация .gitignore, и вы никоим образом не получите разницу между фактическими текстовыми файлами, а только разделенные файлы (хотя это может быть приемлемо, поскольку они будут очень похожими).
Итак, спать на нем, сегодня я думаю, что подход git hook не является хорошим вариантом, поскольку у него слишком много причуд. Как было предложено @PyRulez, я думаю, мне придется посмотреть на другие сервисы, кроме GitHub (к сожалению, так как я люблю github). Хостинг-решение будет предпочтительнее, если вам не удастся управлять нашим собственным сервером. Мне также хотелось бы, чтобы он был общедоступным...
Обновление 2. Я рассмотрел некоторые альтернативы GitHub, и в настоящее время я склоняюсь к использованию GitLab. Я связался с поддержкой GitHub о возможности повышения предела 100 МБ, но если они этого не сделают, я просто переключусь на GitLab для этого конкретного проекта.