我感兴趣的有两种情况。
- 仓库是共享的,两个用户想同时推送更改
- 我想使用cron作业安排每夜或每周运行"gc"。在操作期间,某人想要推送或克隆。
这两种情况中是否存在损坏的风险?
我感兴趣的有两种情况。
这两种情况中是否存在损坏的风险?
index.lock
的文件来锁定共享资源。Git在需要时创建其他锁定文件:例如,在git index-pack操作期间会创建一个.keep
文件。gc
,因为git本身会定期触发gc
。即使这是真的,man page本身也建议:Users are encouraged to run this task on a regular basis
within each repository to maintain good disk space utilization
and good operating performance.
gc
的问题,但如果您的情况非常不同,我也不会感到惊讶。"git gc
" 通常会删除正在使用,但尚未创建引用的对象,即使其他并发进程正在使用该对象。
Git 2.12 (2017年第一季度) 对此进行了更多解释。
参见 commit f1350d0(由 Matt McCutchen (mattmccutchen
) 于 2016年11月15日提交)
(由 Junio C Hamano -- gitster
-- 合并于 commit 979b82f,2017年1月10日)
并查看Jeff King的评论:
现代版本的git有两个功能来帮助解决这个问题:git gc
手册页面现在包括:请查看以下提交记录:commit 0044f77,commit daecbf2,commit 7384504,commit 22d4e3b,commit 080a448,commit 54d56f5,commit d257e0f,commit b6a8d09(2019年4月7日),以及commit fc559fb,commit cf9cd77,commit b11e856(2019年3月22日),作者为Ævar Arnfjörð Bjarmason (avar
)。
(由Junio C Hamano -- gitster
--于commit ac70c53合并,2019年4月25日)
gc
文档: 删除关于 gc.auto=0
的错误引用由于 "gc
" 导致存储库损坏的机会与是否通过 "gc --auto
" 调用 "gc" 没有任何关系,而是取决于是否有其他并发操作正在进行。
这已经在段落中早先注意到了,因此没有理由在这里建议。用户可以从文档的其余部分推断出除非设置了 gc.auto=0
,否则 "gc
" 将自动运行,我们不应该暗示 "gc --auto
" 比普通的 "gc
" 更容易产生损坏。
嗯,从某种意义上说,阻塞的 "gc
" 会阻止您在特定的终端窗口中执行任何其他操作,但用户可能会拥有另一个窗口,或者担心服务器上的并发 "gc
" 可能会导致损坏。