我有一个本地存储库,它也有子模块存储库。如果我尝试从eclipse第三方工具的两个不同实例访问存储库。如果该eclipse存储库正在存在,将git阻止访问第二个第三方工具由第一个第三个eclipse党工具使用?如果git不限制第二方第三方工具如何进行限制。用户对所有第三方工具都相同
答案 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 }} 。
请参见worktree的commit 76a53d6,commit 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目录中,因此该问题已得到正确解决