Git (LFS): что такое поддержка блокировки? И должен ли я включить его?

"Новый" Git Комментарий:

Сегодня я впервые встретил следующий комментарий от Git (по крайней мере, в первый раз, когда я его увидел):

Mikes-Mac$ git push
Locking support detected on remote "origin". Consider enabling it with:
  $ git config 'lfs.https://github.com/<my_repo>.git/info/lfs.locksverify' true
Everything up-to-date
Mikes-Mac$ 

Что это за Locking support? Это что-то вроде блокировка мьютекса для LFS (большое хранилище файлов)? Если да, то не обязательно ли вообще что-либо делать на Git? (В минимальном порядке, как еще можно установить "упорядочение" истории журнала? Хуже того, не могу ли я иметь двоичный файл, поврежденный одновременной записью?)

Мои действия

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

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

Нет очевидной документации

Однако ни поиск Google, ни быстрый поиск по их документации не привели меня к чему-либо, чтобы объяснить это. Итак, мне осталось интересно:

  • Что это за блокировка?
    • Это мьютекс? Если да, то как мое репо может функционировать без него?
    • Ограничено ли это только LFS? Как он отличается от обычного блокировки файлов Git?
  • Каковы плюсы и минусы добавления поддержки блокировки для LFS?

Ответ 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, вы можете его отредактировать, и сервер репозитория распознает, что вы его редактируете.
  • Сервер не принимает фиксацию изменений файлов, которые вы заблокировали другими людьми.

В основном это добавлено, чтобы помочь команде управлять большими файлами, чтобы предотвратить конфликты слияния.