Git专题:历史记录清理:保留代码并删除一年前的提交记录

29.1 克隆最后一个版本

我们在克隆一个使用了很久的 Git 仓库时候可能会发现耗费的时间非常长,这是因为 Git 会拉取所有的历史版本导致,如果我们想让 Git 在克隆代码的时候快一些,可以在git clone命令行后面加--depth=1参数,这样 Git 在克隆代码时候只会克隆最后一个版本的内容,这里我执行命令如下所示:

git clone https://gitee.com/songboy/test201907.git  tempdemo --depth==1

命令执行完毕之后,Git 克隆返回的信息如下图所示:
图片描述
在上图中可以看到克隆已经完成,而且我在等待克隆完成的这个时间也非常短,接着我进入 Git 仓库,看看里面的代码是否已经克隆下来,执行命令如下所示:

cd tempdemo && ls 

命令执行完毕之后,Git 仓库的文件如下图所示:
图片描述
在上图中可以看到文件也都存在,我们再通过git log命令看看版本列表是否完整,执行命令如下所示:

git log

命令执行完毕之后,Git 版本列表如下图所示:
图片描述
在上图中可以看到只有一个版本记录,说明--depth==1参数是可用的。

29.2 清空版本记录

上面一个例子只能解决本地仓库的占用大小,但是服务端依然保存了所以的版本记录,如果想把远程的仓库也进行清理,可以看看下面的方法,首先我们切换到develop分支中,执行命令如下所示:

 cd ../test201907  && git checkout  develop

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到已经切换到develop分支当中。

接着我们创建一个新分支,不过在创建的时候我们需要加上一个--orphan参数,加上这个参数之后创建的分支有点特殊,他只有最后一个版本,而不是把所有的版本都复制过来,严格来说创建出来的不是分支,但很像分支,执行的命令如下所示:

git checkout --orphan new_branch

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到已经创建了一个new_branch分支成功,接着我们将这个特殊的分支里面的文件都添加进来,执行的命令如下所示:

git add -A  && git status

命令执行完毕之后,Git 仓库的文件状态如下图所示:
图片描述
在上图中可以看到所有的文件都处于待添加状态,我们将这些文件使用commit命令提交到一个版本当中去,执行命令如下所示:

git commit -m "new version"

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到提交成功,并生成了一个版本记录,接着我们将原来的develop分支删除,执行命令如下所示:

git branch -D develop

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到已经将 develop 分支删除成功,接着我们在将当前所在的new_branch分支改名为develop,执行命令如下所示:

git branch -m develop

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到已经将分支改名成功,接着我们使用git push -f命令将本地仓库强制推送到远程仓库当中,这里需要注意:

有些仓库有 master 分支保护,不允许强制push,需要在远程仓库项目里暂时把项目保护关掉才能推送

git push -f origin develop

命令执行完毕之后,Git 远程仓库返回的信息如下图所示:
图片描述
在上图中可以看到强制推送到远程的develop分支已经成功,此时我们已经将远程的历史版本记录给覆盖。

29.3 清理大文件

上面一小节中,我们可以通过清理版本库来减少 Git 存储的空间,但有时候我们需要保留历史版本记录,但又想减少 Git 存储空间,这个时候我们就可以考虑清理一些大文件。

Git 本身也给我们提供了解决方案,使用git branch-filter可以遍历 Git 的版本历史信息, 然后从历史版本信息中删除大文件,最终 Git 仓库空间减少,在下面的命令中会涉及到很多 Linux 命令,这些命令我们不用细究,按照步骤执行即可。

演示出效果需要一个使用比较久,而且里面有大文件的仓库,这里我以我们公司的一个仓库为例来演示。

现在需要找出大文件的对应 hash 值,这里我们找出前 5 个为例,执行命令如下所示:

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

命令执行完毕之后,过滤后的 Git 返回信息如下图所示:
图片描述
在上图中,可以看到 5 行记录,其中第 3 列代表文件占用空间大小,我们随意挑选一个 hash 值为例,将这个值6ba572e5b6b9237a29bd883595e82f5a48e62a66复制到剪贴板,然后根据 hash 值找到对应大文件名,执行命令如下所示:

git rev-list --objects --all | grep 6ba572e5b6b9237a29bd883595e82f5a48e62a66

命令执行完毕之后,Git 返回的过滤后信息如下图所示:
图片描述
在上图中可以看到这个 hash 所对应的文件为vendor.zip文件,从文件名可以看出这是一个压缩包,我们要清除这个文件所有历史中的记录,并强制刷新到所有分支,这里推送到远程仓库需要有强制推送权限。执行删除vendor.zip文件,并清除在所有历史版本中的记录命令如下所示:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch vendor.zip'

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在上图中可以看到当前仓库有 1584 个版本记录,已经全部删除完毕;在上面的命令中我们删除了文件, 但是在 Git 的 repo 里面还记录了这些文件的信息,这些信息也会占用一定的空间,我们继续清除这些信息,并收回存储空间,执行命令如下所示:

rm -rf .git/refs/original/  && git reflog expire --expire=now --all

命令执行完毕之后,Git 返回的信息如下图所示:
图片描述
在清除多余信息之后,我们需要重新建立文件与 Git 仓库的关联关系,执行命令如下:

git fsck --full --unreachable

命令执行完毕之后,Git 返回信息如下图所示:
图片描述
接着我们需要重新压缩代码,减少仓库体积:

git repack -A -d

命令执行完毕之后,如下图所示:
图片描述
在上图中可以看到压缩任务已经执行完成,最后可以通过 Git 的GC 清理一些垃圾数据,执行命令如下所示:

git gc --aggressive --prune=now

命令执行完毕之后,Git 仓库的文件状态如下图所示:
图片描述
在上图中可以看到已经回收完成,总记录表有 38091 个对象,可用的只有 14563,其余的便被回收了,刚才这些操作都是在本地,如果我们想让远程仓库也清理,可以强制推送到远程仓库,执行命令如下所示:

git push --force origin master

命令执行完毕之后,Git 仓库的文件状态如下图所示:
图片描述
在上图中可以看到已经推送到远程仓库成功。

29.4 小结

在这一节当中主要学习了如何让 Git 仓库廋身,以达到让 Git仓库 响应速度变快的同时也减少占用仓库的空间。

导致 Git 仓库太大的原因,通常是因为有大文件和迭代版本次数过多导致,前者我们尽量不要把大文件放到存储空间中去,后者的话很难避免,不过我们可以定期清理版本记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21013.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清除 input 的历史记录

问题描述 当input框输入数据时&#xff0c;会显示之前的输入的数据 原因 input的属性autocomplete默认为on&#xff0c;其含义代表让浏览器自动记录之前输入的值 解决办法 在input标签添加autocomplete"off"属性 <input type"text" autocomplete&qu…

git 清除所有历史记录

git 清除所有历史记录 有些时候&#xff0c;git 仓库累积了太多无用的历史更改&#xff0c;导致 clone 文件过大。如果确定历史更改没有意义&#xff0c;可以采用下述方法清空历史 先 clone 项目到本地目录 (以名为 mylearning 的仓库为例) $ git clone gitgitee.com:badboyco…

清除微信登录历史、自定义默认文件保存位置以及聊天记录还原

这篇文章的本意呢&#xff0c;其实对个人用户意义不大&#xff0c;因为桌面端微信本身提供了自定义用户数据文件存放路径的设置项&#xff0c;那么为什么要写出来这么一篇看似无用的教程来呢&#xff1f;是因为微信本身的特殊性&#xff0c;需要用户登录以后才可以修改设置&…

如何清除Git历史变更记录

以前公司的一个项目代码&#xff0c;从2014年一直存活到了2021年&#xff0c;目前应该还在被使用。整个代码将近2G&#xff0c;git文件极大&#xff0c;其中很大的一个原因是代码里存放过apk文件。如此大的项目&#xff0c;导致下载、发布很困难。 最初打算创建一个新的远程仓…

LLM时代NLP研究何去何从?一个博士生的角度出发

深度学习自然语言处理 原创作者&#xff1a;Winni 前言 最近&#xff0c;大语言模型&#xff08;LLMs&#xff09;在许多任务上表现出接近人类水平的性能&#xff0c;这引发了行业兴趣和资金投入的激增&#xff0c;有关LLMs的论文最近也层出不穷。 看起来&#xff0c;NLP领域似…

AIhelp智能问答

前言 2023年,科技圈里,持续爆火的科技应用,毫无疑问是生成式AI,chatGPT了的,之所以令人惊叹,正是因为它的强大 可以这么认为,chatGPT能够解决很多问题,尤其是问答,问题答案的搜索,远比百度,google要精准,方便得多 如何提出高质量的问题,写好一个promot提示词,尤为重要,提出问题…

RLHF-基于人类反馈的强化学习

RLHF 文章目录 RLHF强化学习基础回顾为什么要使用基于人类反馈的强化学习大纲RLHF的起源大预言模型中的RLHF案例 ChatGPT RLHF中的技术细节预训练语言模型训练奖励模型基于RL进行微调 RLHF 的未来 强化学习基础回顾 智能体通过采取行动与环境进行交互&#xff0c;并返回状态和奖…

GPT-4 API 接口调用及价格分析

GPT-4 API 接口调用及价格分析 15日凌晨&#xff0c;OpenAI发布了万众期待的GPT-4&#xff01;新模型支持多模态&#xff0c;具备强大的识图能力&#xff0c;并且推理能力和回答准确性显著提高。在各种专业和学术基准测试上的表现都媲美甚至超过人类。难怪OpenAI CEO Sam Altm…

穷人应该先买房还是先创业?

我个人建议先买房。既然是穷人&#xff0c;那么肯定资金不宽裕&#xff0c;这种情况下不应该是先买房来保障自己的生活&#xff0c;让自己过的安稳吗&#xff1f; 可能大家会问&#xff0c;为什么不能先创业呢&#xff1f;功成名就&#xff0c;买车买房不香吗&#xff1f;但是我…

穷人的新年红包系统,单节点 12W TPS

每年春节都是红包漫天飞&#xff0c;今年百度红包成为了最耀眼的明星。本届春晚红包活动&#xff0c;百度APP 最终累计互动量达到 208 亿次&#xff0c;百度 DAU 峰值突破 3 亿。面对这些数字&#xff0c;我不由感叹大厂技术的强大&#xff0c;机器资源的海量。作为一个穷人&am…

世界上到处都是有才华的穷人

我们每个人都自认为自己很有才华&#xff0c;不觉得自己哪方面比别人差什么&#xff0c;但为什么我们没有变更富有&#xff1f;是我们根本没有才华吗&#xff1f;如果有才华&#xff0c;我们自己真正出众的才华是什么&#xff1f;有几个人真正的清楚了解自己的才华是什么&#…

穷人实现阶级跨越有多难

经常看我们的读者应该知道&#xff0c;周末一般会发一些个人感悟或者分享一些我个人认为比较的文章或者观点&#xff0c;这样看起来公众号内容不是很冰冷&#xff0c;有温度&#xff0c;毕竟我们的生活中除了学习还有更多其他的思考。 周末在起点财经看到一篇文章&#xff0c;跟…

为什么穷人不敢创业?

对于“穷人大多不敢创业”的观点&#xff0c;持中性看法&#xff0c;不认为是对的&#xff0c;也不认为是错的。因为从身边的情况来讲&#xff0c;有钱人往往更加不敢创业&#xff0c;没钱的朋友也有很多喜欢“折腾”的。 创业&#xff0c;最重要的是看创业者的性格、行动&…

Numpy练习小例题(1)--穷人借钱

一个穷人到富人那里去借钱&#xff0c;原以为富人不愿意&#xff0c;哪知富人一口答应了下来&#xff0c;但提出了如下条件: 在30天中&#xff0c;富人第一天借给穷人1万元&#xff0c;第二天借给2万&#xff0c;以后每天所借的钱数都比上一天的多一万; 但借钱…

穷孩子就活该这样吗?10幅漫画扎破穷人真相

文/北妈、刘娜 阅读本文需要 3.0分钟 作者丨刘娜 来源 | 闲时花开&#xff08;ID&#xff1a;xsha369&#xff09; 最近看到一组漫画&#xff0c;真实到震撼人心。 它来自新西兰漫画家Toby Morris&#xff0c;这个漫画叫On a Plate——《盘子上》。 漫画描述了两个在不同环境中…

★为什么不要和“穷人”做朋友?

不要和“穷人”做朋友&#xff08;深度好文&#xff09; 他穷的&#xff0c;不仅仅是物质条件&#xff0c;他穷的&#xff0c;更是视野和格局。 01 我工作在三里屯&#xff0c;那里人多车多&#xff0c;所以停车是一个特别麻烦的事情。 我很少开车&#xff0c;但凡开车&#xf…

EleutherAI GPT-Neo: 穷人的希望

前面一篇blog finetune一个GPT3&#xff0c;借助openai的api finetune了一个GPT3&#xff0c;使用下来确实太贵&#xff0c;生成了1w条数据&#xff0c;花掉了60多美刀。肉痛&#xff0c;所以穷人只能想想穷人的办法&#xff0c;脑子就浮现出好朋友EleutherAI的GPT-Neo来。gith…

路径依赖:穷人很难逆袭突破的科学道理

路径依赖 为什么要了解路径依赖原理 马云说&#xff1a;“晚上想想千条路&#xff0c;早上醒走原路。“我们会看到一些社会现象&#xff0c;为什么穷人最终大部分还是穷人&#xff0c;即使告诉他方法&#xff0c;提供给他资金&#xff0c;最终还是穷人&#xff1f;为什么很多…

穷人跨越阶层有多难?

— 1 — 最难突破的就是父母 父母是每个人的起点&#xff0c;也是绝大部分人的天花板。 中国最近这代人大部分都比父母混的强&#xff0c;是因为父母被耽搁了&#xff0c;再往后几代&#xff0c;大家就能看出来我这句话的威力了。 美国英国德国那边的成熟型社会这一点非常明显&…

李宏毅2023春季机器学习笔记 - 01生成AI(ChatGPT)

一、引言 预设的知识储备要求&#xff1a;数学&#xff08;微积分、线性代数、机率&#xff09;&#xff1b;编程能力&#xff08;读写python&#xff09; 这门课专注在 深度学习领域deep learning&#xff0c; 事实上深度学习在今天的整个机器学习&#xff08;ML&#xff09…