Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法减小git文件夹的大小?_Git - Fatal编程技术网

有没有办法减小git文件夹的大小?

有没有办法减小git文件夹的大小?,git,Git,似乎我的项目随着每一个gitcommit/push而变得越来越大。有没有办法清理我的git文件夹?我不知道你想要什么。首先,当然,每次提交/推送时,目录都会变大,因为它必须存储每个额外的提交 但是,您可能需要git gc,它将“清理不必要的文件并优化本地存储库”() 另一个可能相关的命令是git clean,它将从树()中删除未跟踪的文件。一种情况是,每次提交时,git repo都会变得更大,即提交定期生成的二进制文件 另一种是在一个repo(即a)中有大量文件,而不是几个子repo() 在此,

似乎我的项目随着每一个git
commit/push
而变得越来越大。有没有办法清理我的git文件夹?

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

但是,您可能需要
git gc
,它将“清理不必要的文件并优化本地存储库”()


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

一种情况是,每次提交时,git repo都会变得更大,即提交定期生成的二进制文件

另一种是在一个repo(即a)中有大量文件,而不是几个子repo()

在此,AlBlue提到:

请注意,Git(和Hg以及其他DVCSs)确实存在这样一个问题:签入(大型)二进制文件,然后将其删除,因为它们仍然会显示在存储库中并占用空间,即使它们不是最新的

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

  • 在中管理这些二进制文件
  • 尝试从您的历史记录中删除这些二进制文件(警告:这将重写历史记录,如果您已经推送了回购协议,并且其他人已经从中提取了回购协议,则这是不好的)
正如我在“”中提到的,GitHub最近(2015年,在回答这个问题5年之后)提供了一种管理这些大型文件的方法(将它们存储在Git存储库之外)。

运行:

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或无法接触到的对象,大多数人甚至不知道它们在那里,也不知道如何与它们交互,因此会陷入有用的情况,或者以非常低效的方式做事。我甚至想说,如果你不知道,也不知道这些命令会做什么,那么你就可以安全了