我很感兴趣,如果它是安全的,运行的东西像git push
和git commit
并行(例如,在cron作业,詹金斯的工作等)。 是否有内置的混帐所以这些操作是序列化或本会损坏库一些锁定机制?
Answer 1:
是。 Git的工作原理是写引用的方式,允许这一点。 如果你是做在同一时间为推提交,推动将只能从引用再往它们所包含的对象。 如果提交结束并更新时间分支参考,它会被推动。 如果没有,老参考将被推。 你不会得到“半提交”推高。
所有文件都写在隐含保留对任何指针引用完整性的方式。 最后写入的文件将是已经拥有一切的依赖有参考。
Answer 2:
从理论上讲,有可能是竞争状态难得一遇的git commit
的一部分,这里的HEAD
文件不可用。
GIT中2.15.x / 2.16(Q1 2018)之前,这是沉默。 这不会是沉默了。
见提交c26de08由(二零一七年十月二十日) 安德烈Okoshkin(``) 。
(通过合并JUNIOÇ滨野- gitster
-在提交4a1638c ,2017年11月6日)
commit
:检查resolve_ref_unsafe结果添加解决HEAD参考的检查,同时提交总结的打印。
resolve_ref_unsafe()
可返回NULL
指针如果底层呼叫lstat()
或open()
中失败files_read_raw_ref()
这种情况可以通过种族原因引起的:文件将无法访问到这一刻。
该消息变为:
if (!head)
die_errno(_("unable to resolve HEAD after creating commit"));
文章来源: Is it safe if more git commands are run on the same repo in parallel?