给 github 仓库瘦身
问题
随着我们提交代码次数的增多,你会发现 Git 包变得越来越臃肿,尤其是上传大文件上去的时候,当你删除文件时,其实 .git目录下的大文件对象是不会被删除的。 Git 会把文件的每一个差异化版本都记录在案。这意味着,即使你只改动了某个文件的一行内容,Git 也会生成一个全新的对象来存储新的文件内容。
由于没太注意,我的项目 laravel-wjfcms,上传过许多大文件,之前为了找一个好看的背景,上传了好些几个G大小的壁纸上去,还有测试的时候把 .exe文件扔上去过,再加上国内访问github
本来就龟速了,导致项目很多时候无法下载。
E:\www\siren>git clone https://github.com/Galloping-Vijay/laravel-wjfcms.git
Cloning into ‘laravel-wjfcms’…
remote: Enumerating objects: 977, done.
remote: Counting objects: 100% (977/977), done.
remote: Compressing objects: 100% (492/492), done.
effrror: RPC failed; curl 18 transfer closed with outstanding read data remaining
atal: the remote end hung up unexpectedly
atal: early EOF
fatal: index-pack failed
放弃当前包,重新建一个,感觉还是有感情的,不想放弃这个包,那怎样才能解决下载问题呢?
尝试过的方法
修改上传大小
看网上说这可能是上传大小限制造成的,
git config http.postBuffer 524288000
运行如上命令并没有什么效果。
修改 host 文件
其实下载只是慢一点,访问github还是没有问题的,别的 github项目拉去速度都还可以,就自己的拉去不下来,所以可以排除 本地DNS 问题
清理大文件
之前有尝试过清理.git文件夹下面的大文件,操作在文章 github仓库中删除历史大文件 中有说明。但是效果并不好。
终极大法 — 删除版本记录
git包那么大,其实很多都是log及版本记录造成的,版本记录里面包含了所有文件的更改记录,我的目的是:在不重建git的前提下,仅保留当前版本,把之前所有的commit
都删除掉,以此来减小包的大小。
思路
新建一个分支 mains
然后把 master
分支的文件全部添加到 mians
分支中,然后本地和远程都删除master
分支,再把mains
分支重命名为master
,从而清理之前的提交记录。
新建并切换到分支mains
git checkout --orphan mains
添加并提交文件到mains
分支
git add -A
git commit -am "清除所有历史版本以减少仓库大小"
删除 master
git branch -D master
mains
重命名
git branch -m master
强制推送
git push -f origin master
如果主分支改变,别的分支没有进行操作的话,将无法从主分支中合并代码到别的分支,最好本地拉取目标分支的文件,然后备份一份,再删除目标分支,从master
分支基础上新建目标分支。然后再覆盖备份的文件。
简单操作如下
# 切换目标分支(以blog为目标分支为例)
git checkout blog
# 拉去仓库blog分支的最新版本
git pull
# 本地备份
# 删除分支
git branch -D blog
# 在master分支下创建分支
git chekcout blog
# 覆盖代码
# 强制推送到远程
git push -f -u origin blog
如果代码已经部署到网站中,那么需要强制拉取,不然本地会有很多 commit
git fetch --all
git reset --hard origin/blog
git pull