Git(LFS):什么是锁定支持?我应该启用它吗?

时间:2017-03-04 14:56:45

标签: git mutex 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(大文件存储),这是某种mutex locking吗?如果是这样,那么让git上的任何东西工作是绝对必要的吗? (最小的情况是,如何建立日志历史记录&#34;排序&#34;更糟糕的情况是,我不能通过同时写入来破坏二进制文件吗?)

我的行动

我最近没有对此存储库执行任何不同的操作,与使用LFS建立的任何其他存储库相比,我也没有对此存储库执行任何不同的操作。

因此,我认为这是向全世界提供的新评论&#34;让我们知道新功能。

没有明显的文档

然而,谷歌搜索和快速搜索他们的文档都没有引导我解释这一点。所以,我想知道:

  • 什么是锁定?
    • 是互斥吗?如果是这样,如果没有它,我的回购怎么能运作?
    • 仅限于LFS吗?它与普通的git文件锁定有什么不同?
  • 为LFS添加锁定支持有哪些优缺点?

1 个答案:

答案 0 :(得分:19)

此处记录了锁定对Git LFS的支持https://github.com/git-lfs/git-lfs/wiki/File-Locking

  

Git LFS v2.0.0包含File Locking的早期版本。文件锁定允许开发人员锁定他们正在更新的文件,以防止其他用户同时更新它们。 Git存储库中的并发编辑将导致合并冲突,这在大型二进制文件中很难解决。

  

一旦.gitattributes中的文件模式可锁定,Git LFS将自动在本地文件系统上使它们只读。这可以防止用户在不先锁定文件的情况下意外编辑文件。

  

Git LFS将在推送时验证您是否未修改其他用户锁定的文件。由于文件锁定是早期版本,并且很少有LFS服务器实现API,因此如果Git LFS无法验证锁定文件,则不会停止推送。你会看到这样的消息:

$ 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“锁定”文件后,您可以对其进行编辑,然后存储库服务器会识别出您正在编辑它
  • 服务器不接受提交更改您已被其他人锁定的文件。

它主要用于帮助团队管理大型文件以防止合并冲突。