Git有各种操作用于读取/写入其内部数据库。我已经阅读过关于Git中写操作是原子性的。但是,对于像读取这样的其他操作,哪些操作会锁定数据库?
具体而言,我正在编写一个应用程序,将同时调用“git blame”,我想确保这是我可以多线程处理的内容。
git gc
之外的所有内容都可以进行多线程处理。git gc
是唯一会从git仓库中删除内容的操作。git blame HEAD
和您在裸库上运行的每个命令都不使用索引。确实需要最小化锁定。
唯一需要注意的是当同时运行多个 git gc
时,就像提交ed7eda8由Kyle J. McKay (mackyle)为Git 1.9/2.0 (Q1 2014)所示,实际上是在2014年1月15日发布的Git 1.8.5.3。
自从64a99eb4(git 1.8.5)以来,如果同一仓库中已经运行了另一个gc
进程,则git gc
将拒绝运行,除非使用--force
选项。