众所周知,我们可以定期运行git gc
来打包.git/objects
下的对象。
对于远程中央Git存储库(裸或不),经过多次推送后,myproj.git/objects
下有很多文件;每次提交似乎都在那里创建一个新文件。
如何打包那么多文件? (我的意思是远程中央裸存储库上的存储库,而不是本地克隆存储库上的那些。)
答案 0 :(得分:48)
远程仓库应配置为在提交后根据需要运行gc。请参阅git-gc和git-config手册页中的gc.auto文档。
但是,远程仓库不需要那么多垃圾收集,因为它很少会有悬空(无法访问)提交。这些通常来自分支删除和变基,这通常只发生在本地存储库中。
因此重新打包需要更多的gc,这是为了节省存储空间而不是删除实际的垃圾。 gc.auto变量足以解决这个问题。
答案 1 :(得分:13)
虽然您应该有一些流程可以定期自动处理,但运行
是没有问题的git gc
在裸存储库
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)...
答案 2 :(得分:4)
This question应该说明你应该多久进行垃圾收集。
最简单的选择是使用Windows中的计划任务或Unix中的cron作业定期运行git gc
。这样你甚至不需要考虑它。
答案 3 :(得分:3)
经过多次推送后,
下有很多文件myproj.git/objects
git 2.11 +(2016年第4季度)和预先接收的钩子不会同样多。
在这种情况下,您不必在所有中触发git gc
。
commit 62fe0eb,见commit e34c2e0,commit 722ff7f,commit 2564d99,commit 526f108,Jeff King (peff
)(2016年10月3日)。
(Junio C Hamano -- gitster
--于2016年10月17日commit 25ab004合并)
receive-pack
:隔离对象,直到预先接收为了接收端" git push"为了检查接收到的历史记录并决定拒绝推送,从发送端发送的对象需要可用于挂钩和连接检查机制,这通常是通过将对象存储在接收存储库中并让出"
git gc
"过期相反,将新接收的对象存储在临时区域中,并通过仅在我们重新使用备用对象存储机制时使它们可用 决定我们是否接受检查,一旦我们决定,将它们迁移到存储库或立即清除它们。
该临时区域将由新的环境变量GIT_QUARANTINE_ENVIRONMENT
设置。
这样,如果某个(大)推送被pre-receive
挂钩拒绝,那些大型物品将会在90天内等待git gc
清理它们。< / p>