当多个客户端推送到同一个远程存储库时,git如何处理并发问题?

lin*_*ize 5 git concurrency

对于每个http请求,git-http-backend在服务器端运行单独的进程.

当多个客户端推送到同一个远程存储库时,它如何处理并发问题?

例如,它是否创建锁定文件以及名称是什么?

注意:远程存储库是裸的.

Jan*_*rát 2

与通过 SSH 调用的方式相同 - 请参阅refs.c 中的 update_ref 函数。锁定机制的实际实现位于lockfile.c 中的 lock_file 函数中,是的,它.lock在其中创建了一个文件。在幕后,这是通过O_EXCL选项完成的open()

  • 我不确定你的意思是什么——是的,锁定可能会失败。在这种情况下,您的推送会失败,用户将不得不重试。没有竞争,没有需要解决的冲突,没有数据损坏。即使 ff git 尝试连续锁定几次,你会在哪里划定何时放弃的界限?要不要试三遍?要继续尝试一个小时吗? (2认同)