您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Github使用教程图文详解

时间:2023-03-24 16:54:18  来源:今日头条  作者:干饭人小羽

 

前提

在友人的提醒下,发先自己的Github的项目体积过大,在只有一个src文件夹加上一些webpack配置,里面就2个html和一个输出console.log的js的情况下,项目体积竟然又13MB,这显然是不正常的,于是,开始解决这个问题!

问题所在

首先查看整个项目文件夹下的大小

$ du -d 1 -h
复制代码

发现是.git文件夹过大,然后一个一个点进去,.git->objects->pack ,里面的文件太大了,其中一个竟然有12MB。

原因

github在你执行git init操作后,会创建一个.git的隐藏文件夹,该目录结构如下

$ ls
HEAD  // 指向当前分支
branches/   // 目录
config  // 项目特有的配置选项
description  // 仅供 GitWeb 程序使用
hooks/  // 保存了客户端或服务端钩子脚本
index  // 保存了暂存区域信息
info/  // 保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件
objects/  // 存储所有数据内容
refs/  // 存储指向数据 (分支) 的提交对象的指针
复制代码

在你git add 和 git commit 的过程中,保存修改了的文件的 blob,更新索引,创建 tree 对象,最后创建 commit 对象,这些 commit 对象指向了顶层 tree 对象以及先前的 commit 对象。这三类 Git 对象 ── blob,tree 以及 commit ── 都各自以文件的方式保存在 .git/objects 目录下。

所以,当你提交了一个体积特别大的文件后,会记录在objects文件夹下,删除一个文件,只是记录了删除这个操作,但并不会把文件从.git文件夹删除。 当你直接从项目中删除该文件,.git文件夹完全不会变小(理论上还会变大一点,因为多记录了一次删除操作。。。)。

git会记录你的每一次操作,这个是使用git中的很重要的概念

更多内容请点击git内部原理

解决

解决问题之前,请先出去抽支烟,确定自己清楚了这个操作的危险性。(建议先弄一个测试库试上几遍)

操作前提:删除所有的分支,只留下一个master

首先查找出大文件

$ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tAIl -5 | awk '{print$1}')"
复制代码

rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。
--objects:列出该提交涉及的所有文件ID。
--all:所有分支的提交,相当于指定了位于/refs下的所有引用。
verify-pack命令用于显示已打包的内容,我们用它来找到那些大文件。
-v(verbose)参数是打印详细信息。

前面我们通过rev-list得到了文件名-ID的对应关系,通过verify-pack得到了最大的5个文件ID。 用后者筛选前者便能得到最大的5个文件的文件名,比如:

$ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
b96695fd6e62fff41723ab324368da394f3a504e package-lock.json
76ec4d5d5fd79da922b322d53fbd1298dc128dd3 node_modules/acorn/dist/acorn.mjs.map
286dc92a240dac765d81dfbda451fd19f9611e84 node_modules/ajv/dist/ajv.bundle.js
d2cc86eb230313af9bbdbd3faed7f8e7c7247788 node_modules/source-map-support/node_modules/source-map/dist/source-map.min.js.map
aad0620d70e16717ec338fc1d332279739e0d97c node_modules/terser/node_modules/source-map/dist/source-map.debug.js

复制代码

然后我们需要删除他们

$ git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch YOU-FILE-NAME' --tag-name-filter cat -- --all

复制代码

filter-branch命令可以用来重写Git仓库中的提交
--index-filter参数用来指定一条Bash命令,然后Git会检出(checkout)所有的提交, 执行该命令,然后重新提交。
–all参数表示我们需要重写所有分支(或引用)。
YOU-FILE-NAME 你查找出来的大文件名字

重复几次,直到大文件全部删除完毕。

如果你确定某一个文件夹下面都不是你需要的,那么你可以直接删除整个文件夹,比如:

$ git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch node_modules' --tag-name-filter cat -- --all
复制代码

完成后,以强制覆盖的方式推送你的repo, 命令如下:

$ git push --force --all
复制代码

最后,虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间,命令如下:

$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
Enumerating objects: 116, done.
Counting objects: 100% (116/116), done.
Delta compression using up to 4 threads
Compressing objects: 100% (53/53), done.
Writing objects: 100% (116/116), done.
Total 116 (delta 55), reused 116 (delta 55)

复制代码

经验教训

虽然折腾了半天,也成功解决了这个问题。

从中吸取了一个教训:

当你创建了项目后,没有设置好.gitignore之前,千万不要提交代码!!!还有就是,大文件尽量不要提交。

.gitignore设置: 在项目根目录创建.gitignore文件

.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

复制代码

参考: 寻找并删除Git记录中的大文件 彻底删除git中没用的大文件


转载链接:
https://juejin.cn/post/6844903848864137229



Tags:Github   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
GitHub顶流"Web OS"——运行于浏览器的桌面操作系统、用户超100万、原生jQuery和JS编写
Puter 是近日在 GitHub 上最受欢迎的一款开源项目,正式开源还没到一周 ——star 数就已接近 7k。作者表示这个项目已开发 3 年,并获得了超过 100 万用户。根据介绍,P...【详细内容】
2024-03-10  Search: Github  点击:(17)  评论:(0)  加入收藏
基于GitHub App 深度讲解Kotlin高级特性与框架设计
基于GitHub App 深度讲解Kotlin高级特性与框架设计GitHub App 是 GitHub 平台上的一种特殊类型的应用程序,它允许开发者通过 GitHub API 与 GitHub 上的仓库和组织进行交互...【详细内容】
2023-11-28  Search: Github  点击:(199)  评论:(0)  加入收藏
GitHub:程序员正积极使用 AI 编程、JavaScript 语言依然最流行
IT之家 11 月 20 日消息,GitHub 发布了 2023 年度 Octoverse 开源状态报告,其中主要强调了 AI 在开发过程中的作用,并围绕云和 Git 的开源活动展开。官方介绍称,今年的三大趋势...【详细内容】
2023-11-20  Search: Github  点击:(171)  评论:(0)  加入收藏
Git新手如何上传项目代码到GitHub并完成后续的代码更新?
国内对于个人站长的发展空间限制越来越多,首先是百度主推自家产品,现在权重最高的似乎就是百家号了,其次是腾讯云、阿里云这些提供IDC大厂提供的云端服务产品也很少有针对个人...【详细内容】
2023-11-15  Search: Github  点击:(243)  评论:(0)  加入收藏
如何在GitHub上存储源码并保持同步
GitHub是一个广泛使用的基于云的代码托管平台,它为开发者提供了一个便捷的方式来存储、管理和共享他们的源代码。通过GitHub,开发者可以轻松地与团队成员合作,跟踪代码更改,并保...【详细内容】
2023-11-15  Search: Github  点击:(232)  评论:(0)  加入收藏
GitHub在大会上发布的十大AI更新!
作者 | Tasmia 策划 | 言征出品 | 51CTO技术栈(微信号:blog51cto)GitHub的母公司微软在生成人工智能业务方面取得了巨大增长,该公司首席执行官萨蒂亚·纳德拉告诉华尔街,该...【详细内容】
2023-11-13  Search: Github  点击:(226)  评论:(0)  加入收藏
重塑 GitHub、颠覆程序开发:GitHub Universe 2023 发布重大更新
编译 | 核子可乐、TinaGitHub 的东家微软看到了生成式 AI 业务的大幅增长,其首席执行官萨蒂亚·纳德拉 (Satya Nadella) 告诉华尔街,GitHub Copilot 软件的付费客户在第...【详细内容】
2023-11-10  Search: Github  点击:(221)  评论:(0)  加入收藏
GitHub黑市曝光,高档刷星6元一颗,最奇葩开源项目97%都是刷的
梦晨 克雷西 发自 凹非寺量子位 | 公众号 QbitAI在黑市买GitHub星星多少钱?最贵的高达6元一颗。有创业者Yassin Eldeeeb自掏腰包测试了一把。他足足花20欧元(约156人民币),只买...【详细内容】
2023-11-05  Search: Github  点击:(60)  评论:(0)  加入收藏
AI编程,详细比较GitHub Copilot对比Amazon CodeWhisperer
1、简介GitHub Copilot和Amazon CodeWhisperer是采用人工智能技术驱动的编码助手,它们将自动完成编码功能提升到一个全新的水平。在最佳状态下,它们可以根据开发者提供的简短...【详细内容】
2023-11-01  Search: Github  点击:(225)  评论:(0)  加入收藏
大模型无法替代码农!普林斯顿芝大惊人发现:GPT-4解决GitHub编程问题成功率为0
Stack Overflow,已经被ChatGPT创飞了!因为码农大量涌向ChatGPT、Github Copilot,Stack Overflow今天不得已宣布裁员100多人,几乎占员工人数的1/3。所以,ChatGPT这类AI编码工具,真...【详细内容】
2023-10-17  Search: Github  点击:(284)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条