有没有办法清理git?

时间:2010-06-25 16:53:45

标签: git

似乎我的项目越来越大,每个git commit/push。有没有办法清理我的git文件夹?

7 个答案:

答案 0 :(得分:203)

我不确定你想要什么。首先,当然每次提交/推送目录都会变得更大,因为它必须存储每个额外的提交。

但是,您可能希望git gc“清除不必要的文件并优化本地存储库”(manual page)。

另一个可能相关的命令是git clean,它将从您的树中删除未跟踪的文件(manual page)。

答案 1 :(得分:47)

运行:

git remote prune origin

删除所有陈旧的跟踪分支,这些分支已在origin处删除,但仍在remotes/origin本地可用。

git gc --auto

' G arbage C ollection' - 运行内务处理任务(压缩修订版,删除松散/不可访问的对象)。 --auto标志首先确定是否需要任何工作,如果没有,则退出而不做任何事情。

答案 2 :(得分:24)

每次提交时,git repo都会认真更大的一种情况是您提交定期生成的二进制文件。 Their storage won't be as efficient than text file

另一个是一个 repo(limit of git)中有大量文件而不是几个子目录(managed as submodules)的文件。

在这个article on git space中,AlBlue提到:

  

请注意,Git(以及Hg和其他DVCS)确实遇到了一个问题,即检查(大)二进制文件然后删除它们,因为它们仍会显示在存储库中并占用空间,即使它们是'不是最新的。

如果您的git仓库中存储了大型二进制文件,您可以考虑:

答案 3 :(得分:19)

是的,git gc是解决方案,当然,

和本地 - 您只需删除本地存储库并再次克隆它,

但这里有一些更重要的事情......

你等待那个巨大的git&处理的外部时间被收集到很长的时间,在这些时间内被收集到数小时的低效时间,

从头开始创建一个新的(完全不仅仅是一个分支)存储库,包括唯一的最新版本的文件,自然地你&# 39; ll松开所有的历史,

但是在代码世界中,现在不是时候变得多愁善感,没有必要拖延整个5年的代码每次提交或差异, 你仍然可以存放旧的git&在某处,如果你怀旧的话:]

但是,在某些时候你真的必须继续前进:]

你的团队会感谢你!

答案 4 :(得分:9)

git clean -d -f -i是最好的方法。

这将有助于以更加可控的方式进行清洁。

-i代表互动。

答案 5 :(得分:7)

运行此命令非常危险,但是会通过删除所有git恢复/备份文件来缩小存储库:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

它将清除git用于从某个错误命令恢复存储库的所有文件,例如,如果您执行git reset --hard,通常可以恢复丢失的文件。但是,如果您在git reset --hard命令之前执行git reflog expire...,则将丢失所有内容。现在,您唯一的希望是使用一些工具来分析文件系统,并尝试恢复已删除的文件(如果未覆盖的话)。

答案 6 :(得分:2)

不知道它是否会缩小它,但在我运行git clean之后,我经常会git repack -ad,这会减少包文件的数量。