Статьи

Создание версий больших файлов с помощью Git LFS

Создание версий больших файлов может быть проблематичным с распределенными системами контроля версий, такими как Git. Git Large File Storage (или LFS) — это новое расширение для Git с открытым исходным кодом, которое направлено на улучшение обработки больших файлов .

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

Изначально это сбивает с толку, но, надеюсь, LFS станет более понятным к концу этого урока.

Доступность

Скоро LFS будет доступна всем пользователям GitHub, но поскольку я обрабатываю множество больших файлов через GitHub с помощью своей настольной игры Chip Shop , я подписался на программу раннего доступа, чтобы узнать больше.

Примечание . Если в вашей учетной записи не включен Git LFS, этот учебник пока не работает, но вы можете получить представление о будущей функции.

Установка

Если у вас есть система на основе Linux или Windows, посетите git-lfs.github.com , загрузите установщик, разархивируйте его и запустите сценарий установщика.

Если у вас Mac, сделайте то же самое, но Git LFS также доступна через Homebrew: установите с brew install git-lfs

Начиная

Примечание : Git LFS в настоящее время будет работать только при использовании Git в командной строке. Обычно я использую Tower для управления рабочим процессом Git, и это нарушает любые действия, связанные с LFS.

Создайте Git-репозиторий, как обычно, и инициализируйте файлы, которые вы хотите отслеживать с помощью LFS, выполнив такие команды, как:

 git lfs track "*.psd"
 git lfs track "*.mp3"

Затем используйте git как обычно:

 git add *.psd
git commit -m "Added PhotoShop files"
git push origin master

Пока что не так много, но если мы посмотрим на детали файла на GitHub, мы увидим небольшую разницу. Вот файл, размещенный на GitHub:

Нормальное расположение файла GitHub

А вот файл, размещенный снаружи через LFS:

Расположение файла LFS GitHub

На первом изображении (традиционный репозиторий GitHub) файл находится в репозитории. Во втором изображении (хранилище с поддержкой LFS) файл находится в корзине AWS.

Теперь создайте несколько веток, внесите изменения в файл, зафиксируйте их и нажмите:

Размер папки Git

Подождите, эта папка .git

Именно здесь LFS становится несколько запутанным и, возможно, не таким полезным, как вы могли бы надеяться.

Чтобы увидеть, что происходит более четко, удалите созданную вами папку репозитория, а затем повторно клонируйте ее из GitHub. Вы должны увидеть что-то похожее на приведенное ниже, с соответствующей папкой .git

PSD размер файла

Новый размер папки Git

Эти файлы смехотворно малы! Попробуйте открыть один, и вы, скорее всего, увидите это сообщение:

Сообщение об ошибке Photoshop

Это одна из вышеупомянутых ссылок на файлы, и если вы захотите открыть ее в текстовом редакторе, вы увидите что-то вроде этого:

 version https://git-lfs.github.com/spec/v1
oid sha256:128b446a2cd06dd3b4dc2e2fe3336426792425870c3ada44ae7684b8391dc04d
size 1036867

Это замечательно, если вы разработчик в команде, так как вам, вероятно, не нужно много медиа-файлов, загромождающих ваш компьютер. А когда дело доходит до развертывания или тестирования, у вас, скорее всего, есть процесс сборки, который соберет проект с реальным носителем. Но что, если вы дизайнер и хотите внести изменения? Как вы получаете доступ к реальному файлу?

Давайте посмотрим, какие команды доступны для LFS, набрав git lfs

Команды LFS

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

 # Fetches All
git lfs fetch
 # Fetches a particular branch
git checkout -b new_image
git lfs fetch new_image
 git lfs fetch 5a5c0ef0de779c9d4585320eab8d4a1bec696005

И файлы доступны локально:

Восстановленная папка

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

Вывод

Git LFS — многообещающее начало, и я вижу проблески подлинной полезности в будущем. Требуется лучшая документация и правильная интеграция со сторонними инструментами (включая веб-сайт GitHub), которые, я уверен, появятся. Если у вас есть приличный Git, система непрерывной интеграции и развертывания, тогда LFS будет иметь гораздо больше смысла. Если вы небольшая команда, то это может быть скорее узким местом.

о чем ты думаешь? Полезно или не нужно?