Создание версий больших файлов может быть проблематичным с распределенными системами контроля версий, такими как 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:
А вот файл, размещенный снаружи через LFS:
На первом изображении (традиционный репозиторий GitHub) файл находится в репозитории. Во втором изображении (хранилище с поддержкой LFS) файл находится в корзине AWS.
Теперь создайте несколько веток, внесите изменения в файл, зафиксируйте их и нажмите:
Подождите, эта папка .git
Именно здесь LFS становится несколько запутанным и, возможно, не таким полезным, как вы могли бы надеяться.
Чтобы увидеть, что происходит более четко, удалите созданную вами папку репозитория, а затем повторно клонируйте ее из GitHub. Вы должны увидеть что-то похожее на приведенное ниже, с соответствующей папкой .git
Эти файлы смехотворно малы! Попробуйте открыть один, и вы, скорее всего, увидите это сообщение:
Это одна из вышеупомянутых ссылок на файлы, и если вы захотите открыть ее в текстовом редакторе, вы увидите что-то вроде этого:
version https://git-lfs.github.com/spec/v1
oid sha256:128b446a2cd06dd3b4dc2e2fe3336426792425870c3ada44ae7684b8391dc04d
size 1036867
Это замечательно, если вы разработчик в команде, так как вам, вероятно, не нужно много медиа-файлов, загромождающих ваш компьютер. А когда дело доходит до развертывания или тестирования, у вас, скорее всего, есть процесс сборки, который соберет проект с реальным носителем. Но что, если вы дизайнер и хотите внести изменения? Как вы получаете доступ к реальному файлу?
Давайте посмотрим, какие команды доступны для LFS, набрав git 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 будет иметь гораздо больше смысла. Если вы небольшая команда, то это может быть скорее узким местом.
о чем ты думаешь? Полезно или не нужно?