每次使用Git commit/push,我的项目都变得越来越大。有没有办法清理我的Git文件夹?
commit/push
nfs0ujit1#
我不知道你想要什么。首先,当然每次你提交/推送的时候目录都会变大一点,因为它必须存储每一个额外的提交。但是,您可能需要git gc,它将“清理不必要的文件并优化本地存储库”(manual page)。另一个可能相关的命令是git clean,它将从树中删除未跟踪的文件(manual page)。
git gc
git clean
i7uq4tfw2#
运行:
git remote prune origin
字符串它会删除所有已经在origin上删除但在remotes/origin中仍然可用的过时跟踪分支。
origin
remotes/origin
git gc --auto
型“GarbageCcollection”-运行内务处理任务(压缩修订,并删除松散/不可访问的对象)。--auto标志首先确定是否需要任何工作,如果不需要,则退出而不执行任何操作。
--auto
q3qa4bjr3#
有一种情况下,你的git仓库会随着每次提交而变得越来越大,那就是你提交的是你定期生成的二进制文件,它们的存储效率不会像文本文件那么高。另一种情况是在 * 一个 * repo(这是git的限制)而不是几个子repo(作为子模块管理)中有大量文件。在这篇关于git space的文章中,AlBlue提到:请注意,Git(和Hg,以及其他DVCS)确实存在一个问题,即(大型)二进制文件被检入,然后被删除,因为它们仍然会显示在存储库中并占用空间,即使它们不是最新的。如果你的git repo中存储了大量的二进制文件,你可以考虑:
git filter-branch
正如我在“What are the file limits in Git (number and size)?“中提到的,最近(2015年,这个答案之后的5年)来自GitHub的Git LFS是一种管理这些大文件的方法(通过将它们存储在Git存储库之外)。
kzipqqlq4#
是的,是的,git gc是解决方案,自然。在本地,您可以删除本地存储库并再次克隆它但还有更重要的事...你等待处理巨大的Git和外部数据的时间被收集到很长的几分钟,其中被收集到几个小时的低效时间。
从头开始创建一个新的 (完全的,而不仅仅是一个分支) 存储库,包括唯一的最近版本的文件,* 自然 * 你会丢失所有的历史。
但是在代码世界里,现在不是多愁善感的时候。没有任何意义为了每次提交或差异而拖沿着整整5年的代码。如果你怀旧的话,你仍然可以把旧的Git和外部代码存储在某个地方:]但是,在某些时候你真的必须沿着:]你的团队会感谢你的!
khbbv19g5#
运行此命令非常危险,但它会通过删除所有Git恢复/备份文件来缩小仓库:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
字符串它会删除Git用来从错误命令中恢复仓库的所有文件。例如,如果你执行了git reset --hard,你通常可以恢复丢失的文件。但是如果你在git reflog expire...命令之前执行git reset --hard,那么你就失去了一切。现在,你唯一的希望是使用一些工具来分析你的文件系统,并尝试恢复被删除的文件,如果它们没有被覆盖的话。
git reset --hard
git reflog expire...
piok6c0g6#
git clean -d -f -i是最好的方法。这将有助于以更可控的方式进行清洁。-i是interactive的意思。
git clean -d -f -i
-i
carvr3hs7#
我不知道它是否会缩小它,但在我运行git clean之后,我经常也会运行git repack -ad,这会减少包文件的数量。
git repack -ad
7条答案
按热度按时间nfs0ujit1#
我不知道你想要什么。首先,当然每次你提交/推送的时候目录都会变大一点,因为它必须存储每一个额外的提交。
但是,您可能需要
git gc
,它将“清理不必要的文件并优化本地存储库”(manual page)。另一个可能相关的命令是
git clean
,它将从树中删除未跟踪的文件(manual page)。i7uq4tfw2#
运行:
字符串
它会删除所有已经在
origin
上删除但在remotes/origin
中仍然可用的过时跟踪分支。型
“GarbageCcollection”-运行内务处理任务(压缩修订,并删除松散/不可访问的对象)。
--auto
标志首先确定是否需要任何工作,如果不需要,则退出而不执行任何操作。q3qa4bjr3#
有一种情况下,你的git仓库会随着每次提交而变得越来越大,那就是你提交的是你定期生成的二进制文件,它们的存储效率不会像文本文件那么高。
另一种情况是在 * 一个 * repo(这是git的限制)而不是几个子repo(作为子模块管理)中有大量文件。
在这篇关于git space的文章中,AlBlue提到:
请注意,Git(和Hg,以及其他DVCS)确实存在一个问题,即(大型)二进制文件被检入,然后被删除,因为它们仍然会显示在存储库中并占用空间,即使它们不是最新的。
如果你的git repo中存储了大量的二进制文件,你可以考虑:
git filter-branch
从你的历史中删除这些二进制文件(警告:这将重写历史,如果你已经推了你的repo,如果其他人已经从它拉了出来,这是不好的)正如我在“What are the file limits in Git (number and size)?“中提到的,最近(2015年,这个答案之后的5年)来自GitHub的Git LFS是一种管理这些大文件的方法(通过将它们存储在Git存储库之外)。
kzipqqlq4#
是的,是的,
git gc
是解决方案,自然。在本地,您可以删除本地存储库并再次克隆它
但还有更重要的事...
你等待处理巨大的Git和外部数据的时间被收集到很长的几分钟,其中被收集到几个小时的低效时间。
从头开始创建一个新的 (完全的,而不仅仅是一个分支) 存储库,包括唯一的最近版本的文件,* 自然 * 你会丢失所有的历史。
但是在代码世界里,现在不是多愁善感的时候。没有任何意义为了每次提交或差异而拖沿着整整5年的代码。如果你怀旧的话,你仍然可以把旧的Git和外部代码存储在某个地方:]
但是,在某些时候你真的必须沿着:]
你的团队会感谢你的!
khbbv19g5#
运行此命令非常危险,但它会通过删除所有Git恢复/备份文件来缩小仓库:
字符串
它会删除Git用来从错误命令中恢复仓库的所有文件。例如,如果你执行了
git reset --hard
,你通常可以恢复丢失的文件。但是如果你在git reflog expire...
命令之前执行git reset --hard
,那么你就失去了一切。现在,你唯一的希望是使用一些工具来分析你的文件系统,并尝试恢复被删除的文件,如果它们没有被覆盖的话。piok6c0g6#
git clean -d -f -i
是最好的方法。这将有助于以更可控的方式进行清洁。
-i
是interactive的意思。carvr3hs7#
我不知道它是否会缩小它,但在我运行
git clean
之后,我经常也会运行git repack -ad
,这会减少包文件的数量。