Close

Что такое Git LFS?


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

Для этого Git LFS заменяет крупные файлы в репозитории крошечными файлами указателей. Вы не увидите таких файлов при обычной работе, поскольку в Git LFS они обрабатываются автоматически:

1. При добавлении файла в репозиторий хранилище Git LFS заменяет его указателем, а содержимое файла сохраняется в локальном кэше Git LFS.

Диаграмма команды git add
базы данных
Связанные материалы

Перемещение полного репозитория Git

Логотип Bitbucket
СМ. РЕШЕНИЕ

Изучите Git с помощью Bitbucket Cloud

2. Когда вы отправляете новые коммиты на сервер, все файлы Git LFS, на которые ссылаются эти коммиты, переносятся из локального кэша Git LFS в удаленное хранилище Git LFS, привязанное к вашему репозиторию Git.

Диаграмма команды git push

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

Диаграмма команды git push

Git LFS работает незаметно для пользователя: в рабочей копии вы увидите только фактическое содержимое файла. Поэтому при использовании Git LFS вы можете сохранить существующий рабочий процесс Git, в рамках которого нужно выполнять команду git checkout, редактировать файл, а затем выполнять команды git add и git commit. Команды git clone и git pull будут выполняться значительно быстрее, потому что при переключении на конкретный коммит в Git LFS загружаются только те версии крупных файлов, на которые он ссылается, а не все существующие версии.

Для работы с Git LFS вам понадобится инструмент хостинга с поддержкой Git LFS, такой как Bitbucket Cloud или Bitbucket Data Center. Пользователям репозитория потребуется установить клиент командной строки Git LFS или клиент c графическим интерфейсом и поддержкой Git LFS, например Sourcetree. Кстати, в проекте Git LFS активно участвует Стив Стритинг, разработчик Atlassian и автор Sourcetree, поэтому Sourcetree и Git LFS хорошо работают вместе.

Установка Git LFS


1. Существует три простых способа установки Git LFS:

a. Установка с помощью привычного менеджера пакетов. Пакеты git-lfs можно установить с помощью Homebrew, MacPorts, dnf или packagecloud.

b. Загрузка и установка Git LFS с сайта проекта.

c. Установка Sourcetree — бесплатного клиента Git с графическим интерфейсом, в комплект поставки которого входит Git LFS.

2. Когда в пути появится git-lfs, выполните команду git lfs install для инициализации Git LFS (если вы установили Sourcetree, этот шаг можно пропустить):

$ git lfs install Git LFS initialized. 

Команду git lfs install нужно будет выполнить только один раз. После инициализации в системе хранилище Git LFS будет автоматически загружаться при клонировании репозитория, содержащего контент Git LFS.

Создание нового репозитория Git LFS


Чтобы создать новый репозиторий с поддержкой Git LFS, после создания репозитория нужно выполнить команду git lfs install:

# initialize Git
$ mkdir Atlasteroids
$ cd Atlasteroids
$ git init
Initialized empty Git repository in /Users/tpettersen/Atlasteroids/.git/
  
# initialize Git LFS
$ git lfs install
Updated pre-push hook.
Git LFS initialized.

При этом в репозитории появится специальный хук Git pre-push, который будет передавать файлы Git LFS на сервер при выполнении команды git push.

Git LFS включается автоматически для всех репозиториев Bitbucket Cloud. Для версии Bitbucket Data Center потребуется включить Git LFS в настройках репозитория:

Bitbucket Git LFS

После инициализации хранилища Git LFS для репозитория вы можете указать, какие файлы нужно отслеживать, с помощью команды git lfs track.

Клонирование существующего репозитория Git LFS


После установки Git LFS репозиторий Git LFS можно клонировать обычным способом с помощью команды git clone. По завершении клонирования система Git переключится на ветку по умолчанию (обычно это ветка main), при этом все файлы Git LFS, необходимые для переключения, загрузятся автоматически. Вот несколько примеров.

$ git clone git@bitbucket.org:tpettersen/Atlasteroids.git
Cloning into 'Atlasteroids'...
remote: Counting objects: 156, done.
remote: Compressing objects: 100% (154/154), done.
remote: Total 156 (delta 87), reused 0 (delta 0)
Receiving objects: 100% (156/156), 54.04 KiB | 31.00 KiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Downloading Assets/Sprites/projectiles-spritesheet.png (21.14 KB)
Downloading Assets/Sprites/productlogos_cmyk-spritesheet.png (301.96 KB)
Downloading Assets/Sprites/shuttle2.png (1.62 KB)
Downloading Assets/Sprites/space1.png (1.11 MB)
Checking out files: 100% (81/81), done.

В этом репозитории находятся четыре файла PNG, которые отслеживает Git LFS. При выполнении команды git clone последовательно загружаются файлы Git LFS по мере того, как из репозитория загружаются соответствующие им файлы указателей.

Ускорение клонирования


При клонировании репозитория с большим количеством файлов LFS заданная в явном виде команда git lfs clone заметно улучшит производительность:

$ git lfs clone git@bitbucket.org:tpettersen/Atlasteroids.git
Cloning into 'Atlasteroids'...
remote: Counting objects: 156, done.
remote: Compressing objects: 100% (154/154), done.
remote: Total 156 (delta 87), reused 0 (delta 0)
Receiving objects: 100% (156/156), 54.04 KiB | 0 bytes/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Git LFS: (4 of 4 files) 1.14 MB / 1.15 MB

Вместо того чтобы загружать файлы Git LFS по отдельности, команда git lfs clone дожидается завершения переключения, а затем загружает все необходимые файлы Git LFS одним пакетом. При этом используется параллельная загрузка, а также резко сокращается количество HTTP-запросов и порожденных процессов (что особенно важно для повышения производительности в Windows).

Получение и загрузка


Как и при клонировании, для получения данных из репозитория Git LFS можно использовать обычную команду git pull. Все необходимые файлы Git LFS будут автоматически загружены в процессе переключения после выполнения команды pull:

$ git pull
Updating 4784e9d..7039f0a
Downloading Assets/Sprites/powerup.png (21.14 KB)
Fast-forward
 Assets/Sprites/powerup.png      |    3 +
 Assets/Sprites/powerup.png.meta | 4133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 4136 insertions(+)
 create mode 100644 Assets/Sprites/projectiles-spritesheet.png
 create mode 100644 Assets/Sprites/projectiles-spritesheet.png.meta

Чтобы извлечь содержимое Git LFS, не обязательно задавать команду в явном виде. Однако если произойдет непредвиденная ошибка переключения, вы сможете загрузить любой недостающий контент Git LFS для текущего коммита командой git lfs pull:

$ git lfs pull
Git LFS: (4 of 4 files) 1.14 MB / 1.15 MB

Ускорение получения


Подобно git lfs clone, команда git lfs pull загружает файлы Git LFS одним пакетом. Если известно, что с момента последнего получения было изменено большое количество файлов, можно отключить автоматическую загрузку файлов Git LFS во время операции переключения и затем загрузить контент из Git LFS одним пакетом, задав в явном виде команду git lfs pull. Для этого нужно переопределить конфигурацию Git, указав параметр -c при вызове команды git pull:

$ git -c filter.lfs.smudge= -c filter.lfs.required=false pull && git lfs pull

Чтобы не вводить длинный текст, можно создать простой псевдоним Git для получения данных из Git и Git LFS одним пакетом:

$ git config --global alias.plfs "\!git -c filter.lfs.smudge= -c filter.lfs.required=false pull && git lfs pull"
$ git plfs

Это позволит значительно повысить производительность при загрузке большого количества файлов Git LFS (особенно в Windows).

Отслеживание файлов с помощью Git LFS


При добавлении в репозиторий крупных файлов нового типа нужно сообщить Git LFS, что их требуется отслеживать, указав в команде git lfs track шаблон имени файла:

$ git lfs track "*.ogg"
Tracking *.ogg

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

# probably not what you want
$ git lfs track *.ogg
Tracking explode.ogg
Tracking music.ogg
Tracking phaser.ogg

Git LFS поддерживает те же шаблоны, что и .gitignore, например:

# track all .ogg files in any directory
$ git lfs track "*.ogg"
  
# track files named music.ogg in any directory
$ git lfs track "music.ogg"
  
# track all files in the Assets directory and all subdirectories
$ git lfs track "Assets/"
  
# track all files in the Assets directory but *not* subdirectories
$ git lfs track "Assets/*"
  
# track all ogg files in Assets/Audio
$ git lfs track "Assets/Audio/*.ogg"
  
# track all ogg files in any directory named Music
$ git lfs track "**/Music/*.ogg"
  
# track png files containing "xxhdpi" in their name, in any directory
$ git lfs track "*xxhdpi*.png

Шаблоны задаются относительно каталога, из которого выполняется команда git lfs track. Чтобы упростить задачу, лучше всего выполнять команду git lfs track из корневого каталога репозитория. Обратите внимание: в отличие от .gitignore, Git LFS не поддерживает отрицательные шаблоны.

После выполнения команды git lfs track вы увидите новый файл .gitattributes в каталоге, из которого была выполнена команда. С помощью механизма Git .gitattributes можно назначить конкретное поведение определенным шаблонам имен файлов. Git LFS автоматически создает и обновляет файлы .gitattributes, чтобы привязать шаблоны имен отслеживаемых файлов к фильтру Git LFS. Однако вам придется самостоятельно отправлять изменения файла .gitattributes в свой репозиторий:

$ git lfs track "*.ogg"
Tracking *.ogg
  
$ git add .gitattributes
  
$ git diff --cached
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..b6dd0bb
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.ogg filter=lfs diff=lfs merge=lfs -text
  
$ git commit -m "Track ogg files with Git LFS"

Для удобства технического обслуживания проще всего хранить все шаблоны имен Git LFS в одном файле .gitattributes и всегда выполнять команду git lfs track из корневого каталога своего репозитория. В любом случае, вы можете отобразить список всех шаблонов, которые в настоящее время отслеживаются Git LFS (и файлов .gitattributes, в которых они определены), вызвав команду git lfs track без аргументов:

$ git lfs track
Listing tracked paths
    *.stl (.gitattributes)
    *.png (Assets/Sprites/.gitattributes)
    *.ogg (Assets/Audio/.gitattributes)

Чтобы прекратить отслеживание определенного шаблона имен в Git LFS, просто удалите соответствующую строку из файла .gitattributes или выполните команду git lfs untrack:

$ git lfs untrack "*.ogg"
Untracking *.ogg
$ git diff
diff --git a/.gitattributes b/.gitattributes
index b6dd0bb..e69de29 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +0,0 @@
-*.ogg filter=lfs diff=lfs merge=lfs -text

После выполнения команды git lfs untrack вам снова нужно будет самостоятельно выполнить коммит изменений в файле .gitattributes.

Выполнение коммитов и отправка изменений


Вы можете выполнять коммиты и отправлять изменения в репозиторий Git LFS обычным способом. Если вы выполнили коммит изменений в файлах, которые отслеживаются Git LFS, то увидите дополнительные выходные данные команды git push при передаче контента Git LFS на сервер:

$ git push
Git LFS: (3 of 3 files) 4.68 MB / 4.68 MB                                                                                               
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 1.16 KiB | 0 bytes/s, done.
Total 8 (delta 1), reused 0 (delta 0)
To git@bitbucket.org:tpettersen/atlasteroids.git
   7039f0a..b3684d3  main -> main

Если передача файлов LFS по какой-то причине не удалась, отправка будет прервана, после чего вы сможете безопасно повторить попытку. Как и Git, хранилище Git LFS является контентно-адресуемым: контент хранится с ключом, который представляет собой хеш SHA-256 самого контента. Это означает, что всегда можно безопасно повторить попытку переноса файлов Git LFS на сервер; вы не сможете случайно заменить содержимое файла Git LFS неправильной версией.

Перенос репозитория Git LFS на другой хостинг


Для переноса репозитория Git LFS на другой хостинг можно использовать комбинацию команд git lfs fetch и git lfs push с параметром --all.

Например, вот так можно перенести весь репозиторий Git и Git LFS с удаленного сервера github на удаленный сервер bitbucket 😉 :

# create a bare clone of the GitHub repository
$ git clone --bare git@github.com:kannonboy/atlasteroids.git
$ cd atlasteroids
  
# set up named remotes for Bitbucket and GitHub
$ git remote add bitbucket git@bitbucket.org:tpettersen/atlasteroids.git
$ git remote add github git@github.com:kannonboy/atlasteroids.git
  
# fetch all Git LFS content from GitHub
$ git lfs fetch --all github
 
# push all Git and Git LFS content to Bitbucket
$ git push --mirror bitbucket
$ git lfs push --all bitbucket

Извлечение дополнительной истории Git LFS


Как правило, Git LFS загружает только файлы, необходимые для коммитов, на которые вы переключаетесь локально. Однако вы можете заставить Git LFS загрузить дополнительный контент для других недавно измененных веток с помощью команды git lfs fetch --recent:

$ git lfs fetch --recent
Fetching main
Git LFS: (0 of 0 files, 14 skipped) 0 B / 0 B, 2.83 MB skipped                                                                           Fetching recent branches within 7 days
Fetching origin/power-ups
Git LFS: (8 of 8 files, 4 skipped) 408.42 KB / 408.42 KB, 2.81 MB skipped
Fetching origin/more-music
Git LFS: (1 of 1 files, 14 skipped) 1.68 MB / 1.68 MB, 2.83 MB skipped

Эту команду удобно использовать для пакетной загрузки нового контента Git LFS, пока вы обедаете, а также если вы планируете просмотреть работу коллег, но не сможете загрузить контент позже из-за ограниченной доступности Интернета. Например, вы можете выполнить команду git lfs fetch --recent, перед тем как сесть на самолет.

В Git LFS недавними считаются ветки или теги, которые содержат коммит, выполненный менее семи дней назад. Чтобы настроить продолжительность этого периода, измените количество дней в свойстве lfs.fetchrecentrefsdays:

# download Git LFS content for branches or tags updated in the last 10 days
$ git config lfs.fetchrecentrefsdays 10

По умолчанию команда git lfs fetch --recent загружает контент Git LFS только для коммита, который находится в конце недавней ветки или тега.

git lfs — git lfs fetch --recent

Однако можно настроить Git LFS так, чтобы загружался контент и для более ранних коммитов в недавних ветках и тегах. Для этого нужно сконфигурировать свойство lfs.fetchrecentcommitsdays:

# download the latest 3 days of Git LFS content for each recent branch or tag
$ git config lfs.fetchrecentcommitsdays 3

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

git lfs — git lfs fetch --recent commits

Как описано в разделе Перенос репозитория Git LFS на другой хостинг, вы также можете извлечь весь контент Git LFS для своего репозитория командой git lfs fetch --all:

$ git lfs fetch --all
Scanning for all objects ever referenced...
✔ 23 objects found                                                                                                                      
Fetching objects...
Git LFS: (9 of 9 files, 14 skipped) 2.06 MB / 2.08 MB, 2.83 MB skipped

Удаление локальных файлов Git LFS


Удалить файлы из локального кэша Git LFS можно с помощью команды git lfs prune:

$ git lfs prune
✔ 4 local objects, 33 retained                                                                                                         
Pruning 4 files, (2.1 MB)
✔ Deleted 4 files

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

  • в текущем коммите;
  • в коммите, который еще не отправлен (в репозиторий origin или в репозиторий, заданный в свойстве lfs.pruneremotetocheck);
  • в недавнем коммите.

По умолчанию недавним считается любой коммит, созданный за последние десять дней. Это значение рассчитывается путем сложения. Суммируются:

git lfs prune

Чтобы сохранить контент Git LFS за более длительный период, можно настроить смещение удаления:

# don't prune commits younger than four weeks (7 + 21)
$ git config lfs.pruneoffsetdays 21

В отличие от встроенной в Git сборки мусора, контент Git LFS не удаляется автоматически, поэтому для уменьшения размера локального репозитория полезно регулярно выполнять команду git lfs prune.

Проверить, какой результат даст операция удаления, можно с помощью команды git lfs prune --dry-run:

$ git lfs prune --dry-run
✔ 4 local objects, 33 retained                                                                                                         
4 files would be pruned (2.1 MB)

А чтобы узнать, какие именно объекты Git LFS будут удалены, выполните команду git lfs prune --verbose --dry-run:

$ git lfs prune --dry-run --verbose
✔ 4 local objects, 33 retained                                                                                                         
4 files would be pruned (2.1 MB)
 * 4a3a36141cdcbe2a17f7bcf1a161d3394cf435ac386d1bff70bd4dad6cd96c48 (2.0 MB)
 * 67ad640e562b99219111ed8941cb56a275ef8d43e67a3dac0027b4acd5de4a3e (6.3 KB)
 * 6f506528dbf04a97e84d90cc45840f4a8100389f570b67ac206ba802c5cb798f (1.7 MB)
 * a1d7f7cdd6dba7307b2bac2bcfa0973244688361a48d2cebe3f3bc30babcf1ab (615.7 KB)

Длинные шестнадцатеричные строки, которые выводятся в режиме --verbose, — это хэши SHA-256 удаляемых объектов Git LFS (их также называют идентификаторами объектов или OID). Подробнее об удаляемых объектах можно узнать с помощью методов, описанных в разделе Поиск путей или коммитов, ссылающихся на объект Git LFS.

Для лучшей безопасности можно использовать параметр --verify-remote, чтобы убедиться, что в удаленном хранилище есть копии объектов Git LFS, прежде чем удалять эти объекты:

$ git lfs prune --verify-remote
✔ 16 local objects, 2 retained, 12 verified with remote                                                                                             
Pruning 14 files, (1.7 MB)
✔ Deleted 14 files

Это существенно замедляет процесс удаления, но при этом вы будете точно знать, что все удаленные объекты можно восстановить с сервера. Кроме того, можно сделать так, чтобы параметр --verify-remote работал в системе постоянно. Для этого настройте свойство lfs.pruneverifyremotealways на глобальном уровне:

$ git config --global lfs.pruneverifyremotealways true 

Или же можно включить удаленную проверку только для репозитория контекста, опустив параметр --global в приведенной выше команде.

Удаление файлов Git LFS на удаленном сервере


Клиент командной строки Git LFS не поддерживает удаление файлов с сервера, поэтому способ их удаления зависит от поставщика услуг хостинга.

В Bitbucket Cloud просмотреть и удалить файлы Git LFS можно в разделе Git LFS настроек репозитория:

Bitbucket Cloud — удаление LFS с сервера

Обратите внимание, что каждый файл в Git LFS индексируется с помощью своего идентификатора OID SHA-256, в то время как пути, указывающие на файл, не отображаются в пользовательском интерфейсе. Это связано с тем, что в разных коммитах может быть много разных путей, указывающих на один объект, поэтому поиск по ним будет очень медленным.

Определить, что на самом деле содержится в файле Git LFS, можно тремя способами:

  • Посмотреть на изображение для предварительного просмотра и на тип файла в левом столбце пользовательского интерфейса Bitbucket Git LFS.
  • Загрузить файл с помощью ссылки в правом столбце пользовательского интерфейса Bitbucket Git LFS. Найти коммиты, которые ссылаются на идентификатор OID SHA-256 объекта Git LFS, как описано в следующем разделе.

Поиск путей или коммитов, ссылающихся на объект Git LFS


Если у вас есть идентификатор OID SHA-256 в Git LFS, вы можете определить, какие коммиты на него ссылаются, с помощью команды git log --all -p -S :

$ git log --all -p -S 3b6124b8b01d601fa20b47f5be14e1be3ea7759838c1aac8f36df4859164e4cc
commit 22a98faa153d08804a63a74a729d8846e6525cb0
Author: Tim Pettersen <tpettersen@atlassian.com>
Date:   Wed Jul 27 11:03:27 2016 +1000
 
    Projectiles and exploding asteroids
 
diff --git a/Assets/Sprites/projectiles-spritesheet.png
new file mode 100755
index 0000000..49d7baf
--- /dev/null
+++ b/Assets/Sprites/projectiles-spritesheet.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b6124b8b01d601fa20b47f5be14e1be3ea7759838c1aac8f36df4859164e4cc
+size 21647

Это заклинание с применением команды git log генерирует исправление (-p) из коммитов во всех ветках (--all), которые добавляют или удаляют строку (-S), содержащую указанный текст (идентификатор OID SHA-256 в Git LFS).

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

Если вы предполагаете, что конкретный объект Git LFS находится в коммите, на который указывает HEAD, или в какой-то определенной ветке, можно воспользоваться командой git grep, чтобы найти путь к файлу, который на него ссылается:

# find a particular object by OID in HEAD
$ git grep 3b6124b8b01d601fa20b47f5be14e1be3ea7759838c1aac8f36df4859164e4cc HEAD
HEAD:Assets/Sprites/projectiles-spritesheet.png:oid sha256:3b6124b8b01d601fa20b47f5be14e1be3ea7759838c1aac8f36df4859164e4cc
  
# find a particular object by OID on the "power-ups" branch
$ git grep e88868213a5dc8533fc9031f558f2c0dc34d6936f380ff4ed12c2685040098d4 power-ups
power-ups:Assets/Sprites/shield2.png:oid sha256:e88868213a5dc8533fc9031f558f2c0dc34d6936f380ff4ed12c2685040098d4

HEAD или power-ups можно заменить любой ссылкой, коммитом или деревом, которые содержат объект Git LFS.

Включение/исключение файлов Git LFS


Иногда бывает нужно загрузить только часть доступного контента Git LFS для конкретного коммита. Так, при настройке сборки CI для выполнения модульных тестов вам может потребоваться загрузить только исходный код, исключив тяжеловесные файлы, которые не нужны для сборки кода.

Вы можете исключить подкаталог или файлы с определенным шаблоном имен с помощью команды git lfs fetch -X (или --exclude):

$ git lfs fetch -X "Assets/**" 

И наоборот, вы можете включить только конкретный подкаталог или файлы с определенным шаблоном имен. Например, инженер звукозаписи может извлечь только файлы с расширениями ogg и wav с помощью команды git lfs fetch -I (или --include):

$ git lfs fetch -I "*.ogg,*.wav" 

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

$ git lfs fetch -I "Assets/**" -X "*.gif" 

С параметрами включения и исключения можно применять те же шаблоны имен, что и с командой git lfs track и файлом .gitignore. Эти шаблоны можно сделать постоянными для конкретного репозитория, настроив свойства конфигурации lfs.fetchinclude и lfs.fetchexclude:

$ git config lfs.fetchinclude "Assets/**"
$ git config lfs.fetchexclude "*.gif"

Эти настройки можно применить ко всем репозиториям в системе, если добавить параметр --global.

Блокировка файлов Git LFS


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

Чтобы воспользоваться функцией блокировки файлов в LFS, нужно сначала сообщить системе Git, какой тип файлов можно блокировать. В приведенном ниже примере в команду git lfs track добавлен флаг --lockable. С помощью такой команды вы можете сохранить PSD-файлы в LFS и пометить их как блокируемые.

$ git lfs track "*.psd" --lockable

Затем нужно добавить в файл .gitattributes следующую строку:

*.psd filter=lfs diff=lfs merge=lfs -text lockable

При подготовке к внесению изменений в файл LFS необходимо использовать команду блокировки, чтобы зарегистрировать файл на сервере Git в качестве заблокированного.

$ git lfs lock images/foo.psd
Locked images/foo.psd

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

$ git lfs unlock images/foo.psd

Как и в случае с командой git push, блокировку файлов Git LFS можно переопределить с помощью флага --force. Используйте флаг --force, только если вы уверены в своих действиях.

$ git lfs unlock images/foo.psd --force

Поделитесь этой статьей

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Люди сотрудничают друг с другом, используя стену со множеством инструментов

Блог Bitbucket

Рисунок: DevOps

Образовательные программы DevOps

Демонстрация функций в демо-зале с участием экспертов Atlassian

Как инструмент Bitbucket Cloud работает с Atlassian Open DevOps

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up