Мы используем Git LFS для хранения файлов .png
в нашем репозитории GitLab. Однако существует вероятность, что коммит будет содержать необработанный файл .png
вместо файла указателя Git LFS. (Например, у кого-то может не быть установлен Git LFS, и он может отправить необработанный файл в репозиторий, или он может зафиксировать и отправить без git-перехватчиков). Если ни автор, ни рецензент этого не заметят и файл окажется в основной ветке, изображение навсегда займет место в истории репозитория.
Вопрос: Есть ли способ заставить GitLab отклонять коммиты, содержащие двоичные файлы, которые должны быть файлами Git LFS? Или, возможно, другое подобное решение?
По сути, у нас, похоже, та же проблема, что и в этом вопросе, но мы ищем способы предотвратить ее возникновение в будущем (например, с новым участником, который может не иметь или не знать о Git LFS).
Я не нашел ничего конкретного об отклонении файлов, которые должны быть файлами Git LFS. Я думаю, можно было бы попытаться реализовать собственный серверный крючок Git (или, что еще хуже, конвейерное задание - игнорировал бы промежуточные коммиты), который вызывал бы пользовательский скрипт, который будет проходить через репозиторий и искать файлы, не относящиеся к LFS .png
. Хотя это кажется очень хакерским.
Было бы здорово, если бы существовало решение специально для этой проблемы, и я полагаю, что оно должно быть, поскольку мне кажется, что любой, кто использует Git LFS, пострадает от возможности случайной загрузки необработанного файла.
Насколько мне известно, GitLab не может выполнить эту проверку за вас (на мой взгляд, это была бы полезная функция).
Если вы используете мерж-реквесты, добавьте проверку CI с помощью команды git lfs fsck --pointers
, доступной в git lfs начиная с версии 3.0.1.
Как вы говорите, рекомендуется проверять все новые коммиты, а не только последний из MR. Вы можете передать ряд коммитов git lfs fsck
.
Итак, что-то вроде:
git lfs fsck --pointers $CI_MERGE_REQUEST_DIFF_BASE_SHA..HEAD
Если вы разрешите отправку в основную ветку, вы могли бы сделать что-то подобное с помощью перехватчика на стороне сервера, но я боюсь, что это займет много времени (и будет намного сложнее настроить/отладить).
Вы уверены, что хотите использовать Git LFS? С 2020 года можно создать клон без больших двоичных объектов, который должен дать вам преимущества Git LFS без его недостатков (одним из которых является необходимость обеспечения обработки двоичных файлов с помощью Git LFS). В моей компании мы недавно выполнили миграцию SVN > Git и протестировали оба решения, и Git LFS был более сложным, медленным и использовал больше места, чем Git с клонами без больших двоичных объектов.