git - 在单个存储库上工作的并发 git 进程
问题描述
我正在为 git 编写一些工具(假设它是另一个 GUI),并且我计划并行运行几个 git 命令(使用命令行客户端),因此多个进程可能随时访问 repo。
- 可以并行运行多个只读命令(例如 git log、git show、git status)吗?
- 它们真的会同时执行吗(即是否有内部锁序列化访问)?
- 如果执行了修改命令怎么办?它会被正确序列化吗?
解决方案
- 可以并行运行几个只读...命令吗?
是的。不幸的是,哪些命令实际上是只读的列表令人惊讶:特别是,git status
它不是其中之一。更准确地说,git status
只有在您运行git --no-optional-locks status
. (所有命令都可以以这种方式运行,但无论如何--no-optional-locks
只会影响可选锁,因此它对其他命令没有任何作用。)
- 它们真的会同时执行吗(即是否有内部锁序列化访问)?
大多数情况下,但请参阅 (1)。
- 如果执行了修改命令怎么办?它会被正确序列化吗?
定义“正确”。
进行更改的命令会相互锁定,但遇到锁定问题的命令往往会失败。因此,如果两个 Git 命令都试图index.lock
同时更新索引,一个获胜并继续,另一个失败并完全退出。那是“适当的”吗?存储库保持不变,但其中一个命令从未真正运行过。
真正的只读操作通常会看到“之前”状态或“之后”状态,但它们有可能看到混合状态。例如,git log
可能会连续读出六个参考名称,而其他一些命令会更新其中的一些。在这种情况下git log
,每个引用名称可能会获得一个或多个“旧”值和一个或多个“新”值。
推荐阅读
- android - 网站在其他浏览器上加载,但不是 Android Webview
- javascript - 获取MSAL.JS生成的localStorage中的访问令牌,放到axios中
- c# - HttpWebRequest 流中的错误超过 Content-Length 字节大小
- python - 如何在 Python 2.7 中安装 Torch
- laravel - 当我向 gmail 发送电子邮件时,邮件进入垃圾邮件并且不在 cpanel 中显示图像
- java - Avro 工具 - 无法在 hadoop 二进制路径中找到 winutils 二进制文件
- javascript - Tinymce 允许制表符空间缩进
- java - jconsole/visualvm如何知道本地运行的java应用
- android - LinearLayout android:layout_gravity="center_vertical" 在设计时有效,但在运行时无效
- wso2 - 更改 username_java_script_regex 会导致 401 Unauthorized 错误