我正在为git编写一些工具(可以说它是另一个GUI),并且我计划并行运行多个git命令(使用命令行客户端),因此多个进程可能随时访问存储库。 / p>
答案 0 :(得分:2)
- 有几个并行运行的只读命令可以吗?
是的。不幸的是,这些命令实际上是只读的列表令人惊讶:特别是git status
并不是其中之一。更准确地说,只有运行git status
时git --no-optional-locks status
才是只读的。 (尽管--no-optional-locks
只会影响 optional 锁定,所以所有命令都可以这种方式运行,因此对其他命令则无效。)
- 它们是否真正同时执行(即是否有内部锁序列化访问)?
大多数情况下,但请参见(1)。
- 如果执行了修改命令怎么办?可以正确序列化吗?
定义“适当”。
进行更改的命令会相互锁定,但是遇到锁定问题的命令往往会失败。因此,如果两个Git命令都试图让index.lock
都更新索引,那么一个将获胜并继续前进,而另一个则会完全失败并退出。那是“适当”吗?该存储库保持不变,但是其中一个命令从未真正运行过。
真正的只读操作通常将看到“之前”状态或“之后”状态,但是它们有可能看到混合状态。例如,git log
可能会连续读出六个参考名称,而其他一些命令会更新其中一些。在这种情况下,git log
可能会为每个引用名称获得一个或多个“旧”值和一个或多个“新”值。