Git (LFS): what is locking support? And should I enable it? Git (LFS): what is locking support? And should I enable it? git git

Git (LFS): what is locking support? And should I enable it?


Locking support of Git LFS is documented here https://github.com/git-lfs/git-lfs/wiki/File-Locking.

Git LFS v2.0.0 includes an early release of File Locking. File Locking lets developers lock files they are updating to prevent other users from updating them at the same time. Concurrent edits in Git repositories will lead to merge conflicts, which are very difficult to resolve in large binary files.

Once file patterns in .gitattributes are lockable, Git LFS will make them readonly on the local file system automatically. This prevents users from accidentally editing a file without locking it first.

Git LFS will verify that you're not modifying a file locked by another user when pushing. Since File Locking is an early release, and few LFS servers implement the API, Git LFS won't halt your push if it cannot verify locked files. You'll see a message like this:

$ git lfs push origin master --allRemote "origin" does not support the LFS locking API. Consider disabling it with:  $ git config 'lfs.http://git-server.com/user/test.locksverify' falseGit LFS: (0 of 0 files, 7 skipped) 0 B / 0 B, 879.11 KB skipped 
$ git lfs push origin master --allLocking support detected on remote "origin". Consider enabling it with:  $ git config 'lfs.http://git-server.com/user/repo.locksverify' trueGit LFS: (0 of 0 files, 7 skipped) 0 B / 0 B, 879.11 KB skipped

So in some sense you may consider it an advisory mutex, because:

  • If you don't "lock" the file, you can't edit it
  • Once you "lock" the file with git lfs lock, you can edit it, and the repository server will recognize that you are editing it
  • The server will not accept commits from other people that change the files you have locked.

It is mainly added to help team managing large files to prevent merge conflicts.