有没有办法减小git文件夹的大小?
似乎我的项目随着每一个git有没有办法减小git文件夹的大小?,git,Git,似乎我的项目随着每一个gitcommit/push而变得越来越大。有没有办法清理我的git文件夹?我不知道你想要什么。首先,当然,每次提交/推送时,目录都会变大,因为它必须存储每个额外的提交 但是,您可能需要git gc,它将“清理不必要的文件并优化本地存储库”() 另一个可能相关的命令是git clean,它将从树()中删除未跟踪的文件。一种情况是,每次提交时,git repo都会变得更大,即提交定期生成的二进制文件 另一种是在一个repo(即a)中有大量文件,而不是几个子repo() 在此,
commit/push
而变得越来越大。有没有办法清理我的git文件夹?我不知道你想要什么。首先,当然,每次提交/推送时,目录都会变大,因为它必须存储每个额外的提交
但是,您可能需要git gc
,它将“清理不必要的文件并优化本地存储库”()
另一个可能相关的命令是
git clean
,它将从树()中删除未跟踪的文件。一种情况是,每次提交时,git repo都会变得更大,即提交定期生成的二进制文件
另一种是在一个repo(即a)中有大量文件,而不是几个子repo()
在此,AlBlue提到:
请注意,Git(和Hg以及其他DVCSs)确实存在这样一个问题:签入(大型)二进制文件,然后将其删除,因为它们仍然会显示在存储库中并占用空间,即使它们不是最新的
如果git repo中存储了大型二进制文件,您可以考虑:
- 在中管理这些二进制文件
- 尝试从您的历史记录中删除这些二进制文件(警告:这将重写历史记录,如果您已经推送了回购协议,并且其他人已经从中提取了回购协议,则这是不好的)
git remote prune origin
删除所有过时的跟踪分支,这些分支已在origin
中删除,但在remotes/origin
中仍在本地可用
git gc --auto
“GarbageCCollection”-运行内务管理任务(压缩修订,删除松散/无法访问的对象)。
--auto
标志首先确定是否需要执行任何工作,如果不需要,则退出而不执行任何操作。git clean-d-f-i
是执行此操作的最佳方法
这将有助于以更可控的方式进行清洁
-i
代表交互式。不知道它是否会缩小,但在我运行了git clean
之后,我也经常做git repack-ad
,这减少了打包文件的数量。是的,当然,git gc
是解决方案
本地-您只需删除本地存储库并再次克隆
但这里有更重要的东西。。。
等待大量git和External处理的秒数被收集到很长的分钟数,而在这几分钟内,收集到的秒数将花费数小时的低效时间
从头开始创建一个新的(完全,而不仅仅是一个分支)存储库,包括文件的唯一最新版本,当然你会丢失所有历史记录
但是,在代码世界里,不是时候变得多愁善感了,在每一次提交或差异中拖拉整整5年的代码是没有意义的,
如果怀旧,您仍然可以将旧git和externals存储在某个地方:]
但是,在某个时刻,你真的必须继续前进:]
您的团队将感谢您 运行此命令非常危险,但会通过删除所有git恢复/备份文件来缩小存储库:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
它将删除git用于从某个错误命令中恢复存储库的所有文件,例如,如果您执行了
git reset--hard
,通常可以恢复丢失的文件。但是如果您在git reflog过期之前执行了git reset--hard
。
命令,那么您就失去了一切。现在,您唯一的希望是使用一些工具来分析您的文件系统,并尝试恢复已擦除的文件(如果它们未被覆盖)。git clean-d-f-x删除.gitignore等中列出的文件。例如,不属于git、Pods文件夹等的工作区。警告
上面由@Kalle编写的命令将删除git根目录中所有>未跟踪的<文件和目录,而不仅仅是“在.gitignore中列出的文件”。任何未被Git跟踪的内容,无论是否列在.gitignore
中,都将被擦除git clean-dfX
(注意X
上的大小写)将仅删除中具有适用规则的项。gitignore
。请注意此警告:如果未以交互模式运行git clean,请使用-i
而不是-f
,或者至少先进行一次干运行--n
,然后再次使用-f
。或者进行备份:-)请解释一下这些操作?我知道我们可以用谷歌搜索他们并搜索他们的文档,但当答案只涉及代码或命令时,通常会提供简短的描述。重新打包是git gc过程的一部分,因此无需单独运行。完全同意,我们最近在一个旧的存储库中采用了这种方法,没有回头看;嗯,主要是因为我们不能,但你知道我的意思:)虽然OP的问题很模糊,这是一个很好的答案,但我想指出,git clean
与其说是清理回购协议,不如说是清理目录。对于盲目复制/粘贴的用户,要小心;这会删除本地可能需要的未跟踪文件/目录。git clean-d-x-f可以很好地工作,如果您想进行深度清理,我真的不会认为这是非常危险的。我会给它贴上你必须小心的标签。根据我的经验,很少有人真正接触过reflog或无法接触到的对象,大多数人甚至不知道它们在那里,也不知道如何与它们交互,因此会陷入有用的情况,或者以非常低效的方式做事。我甚至想说,如果你不知道,也不知道这些命令会做什么,那么你就可以安全了