pet*_*ang 51 git repository git-gc
众所周知,我们可以定期运行git gc以打包对象.git/objects.
对于远程中央Git存储库(裸或不),经过多次推送后,下面有很多文件myproj.git/objects; 每次提交似乎都在那里创建一个新文件.
我该如何打包那么多文件?(我的意思是远程中央裸存储库上的那些,而不是本地克隆存储库.)
Nei*_*hew 48
远程仓库应配置为在提交后根据需要运行gc.请参阅git-gc和git-config手册页中的gc.auto文档.
但是,远程仓库不需要那么多垃圾收集,因为它很少会有悬空(无法访问)提交.这些通常来自分支删除和变基,这通常只发生在本地存储库中.
所以gc更需要重新打包,这是为了节省存储空间而不是去除实际的垃圾.gc.auto变量足以解决这个问题.
小智 13
虽然你应该有一些过程定期,自动地处理这个,但运行没问题
git gc
Run Code Online (Sandbox Code Playgroud)
在一个裸存储库
git@domU:/pix/git/repositories/abd.git$ ls -l
total 28
drwxrwxr-x 2 git git 6 2010-06-06 02:44 branches
-rw-rw-r-- 1 git git 66 2010-06-06 02:44 config
-rw-r--r-- 1 git git 23 2011-03-15 18:19 description
-rw-rw-r-- 1 git git 23 2010-06-06 02:44 HEAD
drwxrwxr-x 2 git git 4096 2010-06-06 02:44 hooks
drwxrwxr-x 2 git git 20 2010-06-06 02:44 info
drwxrwxr-x 260 git git 8192 2010-09-01 00:26 objects
drwxrwxr-x 4 git git 29 2010-06-06 02:44 refs
$ git gc
Counting objects: 3833, done.
Compressing objects: 31% (1085/3500)...
Run Code Online (Sandbox Code Playgroud)
多次推送后,下有很多文件
myproj.git/objects
git 2.11+(2016 年第 4 季度)和 pre-receive hook 不会有那么多。
在这种情况下,你不会有触发git gc 所有。
请参阅Jeff King ( ) 的commit 62fe0eb、commit e34c2e0、commit 722ff7f、commit 2564d99、commit 526f108(2016 年 10 月 3 日)。(由Junio C Hamano合并-- --在commit 25ab004,2016 年 10 月 17 日)peff
gitster
receive-pack: 隔离对象直到预接收接受为了让“git push”的接收端检查接收到的历史记录并决定拒绝推送,从发送端发送的对象需要提供给钩子和连接检查机制,这已经完成了传统上通过将对象存储在接收存储库中并让“
git gc”使其过期。相反,将新接收的对象存储在临时区域中,并仅在我们决定是否接受检查时通过对它们重用备用对象存储机制使它们可用,一旦我们决定,要么将它们迁移到存储库,要么立即清除它们.
该临时区域将由新的环境变量设置GIT_QUARANTINE_ENVIRONMENT。
那样的话,如果一个(大)推被一个pre-receive钩子拒绝了,那些大物体将不会放置 90 天等待git gc清理它们。