共享git存储库上的哪些操作是安全的?

问题描述:

使用--shared选项克隆git存储库时,哪些操作在源存储库上安全?特别是,如果在原始存储库中运行git fetch origin,克隆的存储库是否会损坏?共享git存储库上的哪些操作是安全的?

例如,给定资料库~/repos/foo.git(它是一个裸露的git仓库),当我创建使用git clone --shared ~/repos/foo.git新的存储库,然后里面~/repos/foo.git我跑git fetch origin,可以克隆库成为腐败?

很难想出一个规范的来源,说明git-fetch是否删除孤立的对象(即,如果它曾经触发git gc --auto)。但是如果你想确保自动垃圾回收从不运行时,你可以在你裸露的,源库的配置坚持这样的:

git config --global gc.auto 0 

这将防止它自动运行GC。除auto-gc之外,git-fetch不会删除对象(它可能会根据您的配置删除引用,但最糟糕的是将对象设置为孤立,只要您从未GC)。 git-fetch的联机帮助页明确指出,只要不删除现有对象,源代码回购中的任何操作都可以。