Ответ 1
Поддержка блокировки Git LFS приведена здесь https://github.com/git-lfs/git-lfs/wiki/File-Locking.
Git LFS v2.0.0 включает в себя раннюю версию блокировки файлов. Блокировка файлов позволяет разработчикам блокировать файлы, которые они обновляют, чтобы другие пользователи не могли обновлять их одновременно. Параллельные изменения в репозиториях Git приведут к конфликтам слияния, которые очень трудно разрешить в больших двоичных файлах.
После того, как шаблоны файлов в
.gitattributes
заблокированы, Git LFS сделает их readonly в локальной файловой системе автоматически. Это предотвращает случайное редактирование файла пользователями без его блокировки.
Git LFS проверяет, что вы не изменяете файл, заблокированный другим пользователем при нажатии. Поскольку блокировка файлов является ранней версией, а несколько серверов LFS реализуют API, Git LFS не остановит ваш push, если не сможет проверить заблокированные файлы. Появится следующее сообщение:
$ git lfs push origin master --all Remote "origin" does not support the LFS locking API. Consider disabling it with: $ git config 'lfs.http://git-server.com/user/test.locksverify' false Git LFS: (0 of 0 files, 7 skipped) 0 B / 0 B, 879.11 KB skipped
$ git lfs push origin master --all Locking support detected on remote "origin". Consider enabling it with: $ git config 'lfs.http://git-server.com/user/repo.locksverify' true Git LFS: (0 of 0 files, 7 skipped) 0 B / 0 B, 879.11 KB skipped
Таким образом, в некотором смысле вы можете считать это консультативным мьютексом, потому что:
- Если вы не заблокируете файл, вы не сможете его отредактировать
- Как только вы заблокируете файл с помощью
git lfs lock
, вы можете его отредактировать, и сервер репозитория распознает, что вы его редактируете. - Сервер не принимает фиксацию изменений файлов, которые вы заблокировали другими людьми.
В основном это добавлено, чтобы помочь команде управлять большими файлами, чтобы предотвратить конфликты слияния.