看起来我的项目每次 commit/push
都越来越大了。有没有一种方法可以清理我的git文件夹?
看起来我的项目每次 commit/push
都越来越大了。有没有一种方法可以清理我的git文件夹?
.gitignore
中,只要它没有被 Git 跟踪,都将被清除。git clean -dfX
(注意大写的 X
)只会删除在 .gitignore
中有对应规则的项目。请注意这个警告:永远不要在不使用交互模式 -i
或至少进行干预运行 -n
的情况下执行 git clean
命令。 - Adrian Günter运行:
git remote prune origin
删除所有已在origin
中被删除但仍然在remotes/origin
本地可用的过期跟踪分支。
git gc --auto
--auto
标志首先确定是否需要任何工作,如果不需要,则退出而不执行任何操作。在一些情况下,每次提交后你的git仓库会变得越来越大,比如你需要定期生成二进制文件并将其提交到仓库中 (与文本文件相比,存储效率较低)。
另一个情况是,如果你在同一个仓库中有大量文件(这是git的限制),而不是使用多个子仓库(作为子模块进行管理)。
在这篇讲解git空间的文章中,AlBlue提到:
请注意,Git(和Hg等其他分布式版本控制系统)存在这样一个问题,即如果检入了(大型)二进制文件,然后将其删除,即使它们已经不再存在,它们仍会出现在仓库中,并占用空间。
如果你的git仓库中有大型二进制文件,建议你:
git filter-branch
从历史记录中删除那些二进制文件(警告:这将重写历史记录,如果您已经推送了您的repo并且其他人已经从中拉取,则会产生问题)如我在 "Git 中有哪些文件限制(数量和大小)?"中提到的那样,最近的GitHub Git LFS(2015年发布,比这个答案晚了5年)是一种管理大文件的方法(通过将它们存储在 Git 仓库之外)。
是的,git gc
是解决方案,当然了,
而且在本地 - 你可以直接删除本地仓库并重新克隆它,
你等待那个巨大的 git & externals 处理的几秒钟会积累成长时间的几分钟,进而积累成浪费的几小时,效率低下。
从头开始创建一个新的 (完全的,不只是一个分支) 仓库,包括最近版本的文件,当然你会失去所有历史记录,
但在代码世界中,现在不是感伤的时候,每次提交或差异都带着整整5年的代码是没有意义的, 如果你想怀旧,你仍然可以把旧的 git & externals 存储在某个地方 :]
但是,你真的必须向前迈进 :]
你的团队会感谢你!
git reflog expire --expire=now --all && git gc --prune=now --aggressive
它将删除git用于从某些错误命令中恢复存储库的所有文件,例如,如果您执行了git reset --hard
,通常可以恢复丢失的文件。但是,如果您在执行git reflog expire...
命令之前执行git reset --hard
,那么您将失去所有东西。现在,您唯一的希望是使用一些工具来分析您的文件系统,并尝试恢复被删除的文件(如果它们没有被覆盖)。
git clean -d -f -i
是最好的方法。
这将帮助以更加受控的方式进行清理。
-i
代表交互模式。
git clean
不是为了清理存储库,而是为了清理目录。对于盲目复制/粘贴的用户,请注意:它会删除您可能希望在本地保留的未跟踪文件/目录。 - sraboy我不确定它是否会收缩它,但是在运行git clean
之后,我经常执行git repack -ad
,这可以减少打包文件的数量。
repack
是 git gc
过程的一部分,因此无需单独运行。 - artkoshelev