https://www.atlassian.com/git/tutorials/git-gc
https://www.atlassian.com/git/tutorials/git-gc
The git gc
command is a repository maintenance command. The "gc" stands for garbage collection. Executing git gc
is literally telling Git to clean up the mess it's made in the current repository. Garbage collection is a concept that originates from interpreted programming languages which do dynamic memory allocation. Garbage collection in interpreted languages is used to recover memory that has become inaccessible to the executing program.
Git repositories accumulate various types of garbage. One type of Git garbage is orphaned or inaccessible commits. Git commits can become inaccessible when performing history altering commands like git resets
or git rebase
. In an effort to preserve history and avoid data loss Git will not delete detached commits. A detached commit can still be checked out, cherry picked, and examined through the git log
.
In addition to detached commit clean up, git gc
will also perform compression on stored Git Objects, freeing up precious disk space. When Git identifies a group of similar objects it will compress them into a 'pack'. Packs are like zip files of Git bjects and live in the ./git/objects/pack
directory within a repository.
What does git gc actually do?
Before execution, git gc
first checks several git config
values. These values will help clarify the rest of git gc
responsibility.
git gc configuration
gc.reflogExpire
An optional variable that defaults to 90 days. It is used to set how long records in a branches reflog should be preserved.
gc.reflogExpireUnreachable
An optional variable that defaults to 30 days. It is used to set how long inaccessible reflog records should be preserved.
gc.aggressiveWindow
An optional variable that defaults to 250. It controls how much time is spent in the delta compression phase of object packing when git gc
is executed with the --aggressive
option.
gc.aggressiveDepth
Optional variable that defaults to 50. It controls the depth of compression git-repack
uses during a git gc --aggresive
execution
gc.pruneExpire
Optional variable that defaults to "2 weeks ago". It sets how long a inaccessible object will be preserved before pruning
gc.worktreePruneExpire
Optional variable that defaults to "3 months ago". It sets how long a stale working tree will be preserved before being deleted.
git gc execution
Behind the scenes git gc
actually executes a bundle of other internal subcommands like git prune
, git repack
, git pack
and git rerere
.
The high-level responsibility of these commands is to identify any Git objects that are outside the threshold levels set from the git gc
configuration.
Once identified, these objects are then compressed, or pruned accordingly.
git gc best practices and FAQS
Garbage collection is run automatically on several frequently used commands:
The frequency in which git gc
should be manually executed corresponds to the activity level of a repository.
A repository with a single contributing developer will need to execute git gc
far less often than a frequently-updated multi-user repository.
git gc vs git prune
git gc
is a parent command and git prune
is a child.
git gc
will internally trigger git prune
.
git prune
is used to remove Git objects that have been deemed inaccessible by the git gc
configuration.
Learn more about git prune
.
What is git gc aggressive?
git gc
can be invoked with the --aggressive
command line option.
The --aggressive
option causes git gc
to spend more time on its optimization effort.
This causes git gc
to run slower but will save more disk space after its completion.
The effects of --aggressive
are persistent and only need to be run after a large volume of changes to a repository.
What is git gc auto?
The git gc --auto
command variant first checks if any housekeeping is required on the repo before executing.
If it finds housekeeping is not needed it exits without doing any work.
Some Git commands implicitly run git gc --auto
after execution to clean up any loose objects they have created.
Before execution git gc --auto
will check the git
configuration for threshold values on loose objects and packing compression size.
These values can be set with git config
.
If the repository surpasses any of the housekeeping thresholds git gc --auto
will be executed.
Getting started with git gc
You're probably already using git gc
without noticing.
As discussed in the best practices section, it is automatically invoked through frequently used commands.
If you want to manually invoke it simply execute git gc
and you should see an output indicating the work it has performed.
https://www.atlassian.com/git/tutorials/git-gc的更多相关文章
- git使用,Git的skil-map,git配置http/https/socks5代理
. 检出.克隆库: git clone git://git.openwrt.org/openwrt.git 2. git查看某个文件的修改历史 git log --pretty=oneline 文件名 ...
- 【git】git中使用https和ssh协议的区别以及它们的用法
git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 git 协议.其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常 ...
- Git:Git初体验——Git安装配置
作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...
- git使用--git命令项目提交问题总结
提交遇到Error "remote ref does not exist"解决办法:git fetch -p MY_REMOTE eg. git fetch -p o ...
- Android Studio配置Git及Git文件状态说明
Android Studio配置Git还是比较简单的,麻烦的是可能中间出现各种问题.如果你想了解或感兴趣,请往下看. 首先你得下载Git客户端,网址:http://git-scm.com/downlo ...
- 真正理解 git fetch, git pull 以及 FETCH_HEAD【转】
转自:http://www.cnblogs.com/ToDoToTry/p/4095626.html 真正理解 git fetch, git pull 要讲清楚git fetch,git pull,必 ...
- Git起步--git安装与初次运行git前配置
在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安 ...
- 【Git】Git远程操作详解
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...
- Git学习01 --git add, git commit , git log ,git status, git reset --hard, head
Git官方提供的快速入门教程:https://try.github.io/levels/1/challenges/1 特点:Git极其强大的分支管理:分布式版本 集中式版本控制系统,版本库是集中存放在 ...
随机推荐
- 基本代码、插值表达式、v-cloak
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LNMP环境搭建wordpress博客及伪静态
WordPress是使用PHP语言开发的博客平台,是一款开源的软件,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用 ...
- ubuntu18.04安装wine
wine是一个兼容层,可以从多平台(linux,macos,等)运行windows应用. Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和U ...
- word中快捷键查看与设定
很多时候,我们在编辑word文档的时候,为了快速方便都使用快捷键,常用的快捷键大家都知道,但是不常用的是不是就比较懵圈,本文就来告诉你怎么查看与设置word的快捷键. 我使用的word2016 第一步 ...
- 快上车,react 入门拾遗
最近朋友圈和微博都刷了一波杰伦的回忆杀–说好不哭,想想都9012了,在学习react如火如荼的路上,也不妨停下脚步来总结总结,朝花夕拾一下. 为了便于阐述,我们还是来段小明和禅师的故事吧. 小明在学习 ...
- K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot(下)
Kubernetes CSI Snapshot(下篇) 目标目前在Kuberentes中,卷插件仅支持配置空的存储卷.随着新的存储功能(包括卷快照和卷克隆)的提出,因此需要支持配置卷时数据填充以.例 ...
- python基础--切片、迭代、列表生成式
原文地址:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143175684 ...
- Robot Framework--pybot命令
1.执行整个项目下的所有用例: pybot 项目路径.例如: pybot D:\robotPS:robot项目里面所有用例 2.执行某个suit中的所有用例: pybot 项目路径\suit文件名称. ...
- codeforces#571Div2 D---Vus the Cossack and Numbers【贪心】
题目:http://codeforces.com/contest/1186/problem/D 题意:给定一个大小为$n$的浮点序列,这$n$个数的和为0. 现在对这个序列中的每个数,进行向上取整或向 ...
- Codeforces Round #459 (Div. 2) C题【思维好题--括号匹配问题】
题意:给出一个串,只包含 ( ? ) 三种符号,求出有多少个子串是完美匹配的. ( ) ? ) => ( ) ( ) 完美匹配( ( ) ? => ( ( ) )完美匹配? ? ? ? = ...