- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果两个用户尝试同时使用存储库,是否保证本地 Git 存储库没有竞争条件?
假设有两个用户在运行 git commit
的 Linux 系统上同时,或者一个用户正在应用补丁,而另一个用户试图 checkout 一个分支,在这种情况下 Git 的行为是否得到了很好的定义?
最佳答案
Git 使用锁定和原子重命名来避免 .git
中的数据损坏问题目录。因此,例如,可能有 git gc
在执行其他操作的同时继续进行,不会丢失任何数据,存储库也不会在任何时候出现损坏或丢失的对象。但是,某些并发操作(例如,更新索引)仍有可能由于争用锁而中止。
然而,话虽如此,工作树并不能保证没有种族。例如,没有用目录替换文件的原子方式,git checkout
因此,它不会尝试成为原子的。同样,在 checkout 期间应用补丁可能会导致数据丢失或意外故障。
如果您需要让多个程序使用同一个存储库,请考虑使用裸存储库和类似 libgit2 或其特定语言的包装器之一。这将使您更容易创建多个分支和提交,而无需争夺工作树。
如果您需要多个人类用户来使用存储库,您应该使用存储库的多个副本。用户不会喜欢共享工作树,如果两个人同时使用一个,您会遇到实际问题。此外,Git 的安全模型不允许恶意用户通过传输协议(protocol)以外的方式共享存储库。例如,自动调用的钩子(Hook)可以执行任意代码。即使是非恶意用户也可能想要自定义 Hook 或其他配置(例如 .git/info/exclude
),这使得共享存储库变得不可取。
关于git - 本地 Git 存储库是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897153/
我是一名优秀的程序员,十分优秀!