锁定git存储库(如果它已在使用中)

时间:2017-05-25 06:34:17

标签: eclipse git egit jgit

我有一个本地存储库,它也有子模块存储库。如果我尝试从eclipse第三方工具的两个不同实例访问存储库。如果该eclipse存储库正在存在,将git阻止访问第二个第三方工具由第一个第三个eclipse党工具使用?如果git不限制第二方第三方工具如何进行限制。用户对所有第三方工具都相同

2 个答案:

答案 0 :(得分:0)

是的,Git同时保护多个进程同时写入同一个存储库。

它使用锁定文件。 headerGet()%module headerGet %{ #include "headerGet.h" %} 期间锁定索引(也称为暂存区域)。 .git/index.lock期间git add会锁定HEAD。 .git/HEAD.lock将在移动时锁定主分支,依此类推。其他进程将等到他们需要的存储库可用。

许多进程可以安全地同时读取,因为许多进程可以同时运行git commit.git/refs/heads/master

大多数Git命令都是如此之快,你永远不会注意到。

答案 1 :(得分:0)

在Git 2.25(2020年第一季度)中,“ git rev-parse --git-path HEAD.lock”(控制并发访问的方法之一)在次要 {{3 }}

请参见worktreecommit 76a53d6commit 3ce4721(2019年10月28日)。
(由Johannes Schindelin (dscho)Junio C Hamano -- gitster --中合并,2019年12月1日)

  

commit a2b0451:正确处理.lock个文件

     

签名人:Johannes Schindelin

     

自从引入工作树(git_path())以来,git_path()函数_really _必须被调用,例如到达logs/HEAD的路径(HEAD特定于工作树,因此它的引用日志也是如此)。但是,为logs/HEAD.lock返回了错误的路径。

     

这无关紧要,只要Git可执行文件正在执行询问即可,因为logs/HEAD.lock文件的路径是通过附加git_path("logs/HEAD")后缀从.lock构造的。

     

但是,Git GUI刚学会了使用--git-path而不是将相对路径附加到git rev-parse --git-dir返回的内容上(因此,不仅要使用正确的钩子目录,而且还要在工作树中使用正确的路径)除了主要的)。虽然看起来特别不是Git GUI要求logs/HEAD.lock,但为了安全起见,不要后悔。

     

旁注:Git GUI _does _要求index.lock,但由于update_common_dir()倾向于将未知路径保留在(特定于工作树的)git目录中,因此该问题已得到正确解决