一条 Git 命令减少了一般存储空间,我的服务器在偷着笑
元旦不是搭建了一个《Java 程序员进阶之路》的网站嘛,其中用到了 Git 来作为云服务器和 GitHub 远程仓库之间的同步工具。

作为开发者,相信大家都知道 Git 的重要性。Git 是一个分布式版本控制软件,初版由 Linus·Torvalds 开发,并于 2005 年以 GPL 许可协议发布。

Git 的牛逼这次就不吹了,毕竟已经吹了 7 篇了,实在是吹不动了!
- 可能是 Git 历史上最伟大的一次代码提交
- 终于有人把 Git 的数据模型讲清楚了
- 昨晚看完 Linus 第一次提交的 Git 代码后,我失眠了!
- 要熟练使用 Git,恐怕要记住这60个命令
- 崩溃!实习生把小组的代码仓库搞得一团糟。。。
- 信不信,7 张图就能让你把 Git 分支管理拿捏的死死的。。
- 豆瓣9.1分!我昨天在挂急诊时啃完了这本书!
任何一个人,单靠 Git 就可以封神,而 Linus 还是 Linux 内核的开发者,这简直就是神的最高境界。
今天这篇算是 Git 的番外篇,给大家介绍一个牛逼的命令——git sparse-checkout,帮我的云服务器剩下了至少一半的存储空间。
一、使用 Git 中遇到的一个大麻烦
首先给大家通报一下,一天前上线的《Java 程序员进阶之路》网站,目前访问次数已经突破 1000 了。

正所谓不积跬步无以至千里,不积小流无以成江海。
1000 次也许不值一提,但 1000 万也不过是 1 万个 1000,二哥取得的每一点点进步,都要感谢大家的倾力捧场。
看过上一篇搭建过程的小伙伴应该都知道了,我是通过在云服务器上 clone 了一份 GitHub 上的远程仓库,然后通过宝塔面板的定时任务执行 git pull 命令从 GitHub 上拉取到最新的内容,再通过 Nginx 服务器搭建的网站,网站内容是通过 docsify 渲染 md 文件得到的。
直接 git pull 会无脑把 GitHub 上的 codes、images 目录同步到云服务器上,但其实 codes、images 目录是不需要同步的。
具体是怎么一回事呢?
大家可以先看一下我这个 GitHub 仓库的目录结构哈。

- docs 是文档目录,里面是 md 文件,所有的教程原稿都在这里。
- codes 是代码目录,里面是教程的配套源码。
- images 是图片目录,里面是教程的配套手绘图。
这样就可以利用 GitHub 来做免费的图床,并且还可以白票 jsDelivr CDN 的全球加速,简直不要太爽!

比如说 images 目录下有一张 logo 图 logo-01.png:

如果使用 GitHub 仓库的原始路径来访问的话,速度贼慢!
https://github.com/itwanger/toBeBetterJavaer/tree/master/images/logo-01.png
使用 jsDelivr 加速后就不一样了,速度飞起!
https://cdn.jsdelivr.net/gh/itwanger/toBeBetterJavaer/images/logo-01.png
简单总结下 GitHub 作为图床的正确用法,就两条:
- 创建一个 GitHub 仓库作为图床仓库,上传提交图片到仓库中
- 在要使用 GitHub 图床图片的地方将链接换为
https://cdn.jsdelivr.net/gh/{user}/{repo}/图片路径
付费七牛云或者阿里云图床的小伙伴不妨试试这种方式,能白票咱绝不花一分冤枉钱。
那也就是说,《Java 程序员进阶之路》网站上的图片都是通过 GitHub 图床加载的,不需要将图片从 GitHub 仓库拉取到云服务器上。要知道,一台云服务器的空间是极其昂贵的,能省的空间咱必须得省。
二、学习 Git 中遇到的一个大惊喜
于是我今天早上就在琢磨着,怎么样才能把这昂贵的空间省下来呢?
我百度了很多帖子,绝大多数都乱七八糟,毫无价值,能说到点子上的几乎没有。
最后还是浏览 Git 官方手册(也可以看Pro Git)才找到了一个牛逼的命令:git sparse-checkout,它可以帮助我们在拉取远程仓库的时候只同步那些我们想要的目录和文件。

具体怎么用,可以看官方文档:
https://git-scm.com/docs/git-sparse-checkout
但没必要,hhhh,我们直接实战。
第一步,通过 git remote add -f orgin git@github.com:itwanger/toBeBetterJavaer.git 命令从 GitHub 上拉取仓库。

第二步,启用 sparse-checkout,并初始化
拉取到仓库后,执行 git config core.sparseCheckout true 命令启用 sparse-checkout。
然后再执行 git sparse-checkout init 初始化。

第三步,使用 sparse-checkout 来拉取我们想要的仓库目录

比如说,我们只想拉取 docs 目录,可以执行 git sparse-checkout set docs 命令。

如果是第一次使用 sparse-checkout 的话,还需要执行一下 git pull orgin master 命令拉取一次。

第四步,验证是否生效
可以执行 ls -al 命令来确认 sparse-checkout 是否生效。

如图所示,确实只拉取到了 docs 目录。
假如还想要拉取其他文件或者目录的话,可以通过 git sparse-checkout add 命令来添加。

这就实现了,远程仓库和云服务器仓库之间的定制化同步,需要什么目录和文件就同步什么目录和文件,不需要的可以统统不要。
GitHub 仓库可以免费用,空间也无限大,但云服务可是要抠抠搜搜的用,毕竟扩充存储空间是真的贵!
我对比了一下,远程仓库大概 145 M,图片就占了 72 M,妥妥地省下了一半的存储空间。

如何禁用 git sparse-checkout 呢?
也简单,只需要执行一下 git sparse-checkout disable 命令就可以了。

可以看到,那些我们不想要的目录和文件统统都又回来了。
如果重新启用呢?
也简单,只需要执行一下 git sparse-checkout reapply 命令就可以了。

简单总结下:如果你要把一个庞大到撑满你硬盘的远程仓库拉取到本地,而你只需要其中的一部分目录和文件,那就可以试一试
git sparse-checkout 了。
三、使用 Git 后的一点心里话
不得不说,Git 实在是太强大了。就一行命令,解决了困扰我一天的烦恼,我的 80G 存储空间的云服务器又可以再战 3 年了,从此以后再也不用担心了。

Git 是真的牛逼,Linus 是真的牛逼,神不愧是神!
大家好,我是假期肝疼的二哥呀!
昨天的文章发出来后,好朋友 G 哥留言说:“二哥也不出去嗨皮下?”言下之意就是二哥实在是太肝了,连元旦都不放过,实在是太无情了。

主要是好不容易有了一段连贯的时间,有好多事情想要去做。比如说录视频,这次换了一种风格,尝试加入了 BGM,尝试找了很多素材去丰富视频的画面。

计算机专业的学生党可以通过下面的链接围观下,看看这个寒假该如何刷刷题。如果觉得视频有帮助的话,不妨三连支持下,让二哥的 B 站在 2022 年能小有起色,抱拳了。所谓星星之火,就靠你们去点燃了。
视频地址:https://www.bilibili.com/video/BV1vq4y127Ne/
明天就是 2022 年的又一个工作日了,希望工作党的各位都能百尺竿头更进一步!

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
一条 Git 命令减少了一般存储空间,我的服务器在偷着笑的更多相关文章
- 每日一条 Git 命令:git merge remote master
每日一条 Git 命令:git merge remote master 当远程的分支更新后,需要将自己的代码与远程的分支合并就用以下这个命令合并. git merge remote master 如果 ...
- 每日一条 git 命令行:git clone https://xxxxx.git -b 12.0 --depth 1
每日一条 git 命令行:git clone https://xxxxx.git -b 12.0 --depth 1 -b 12.0:分支 12.0 --depth 1:depth 克隆深度,1 为最 ...
- 利用github和git命令,将本地项目共享到服务器上——第二章
附上关于git命令的第一章:https://www.cnblogs.com/mlw1814011067/p/9908856.html 六.删除服务器中的文件 1. 直接物理删除(右键,删除,或者是用b ...
- 利用github和git命令,将本地项目共享到服务器上
一.步骤 1. 创建项目根目录 mkdir 文件夹名 2. 初始化文件夹 git init 3. 配置用户名和邮箱(第一次配置后,不需要再登录) git config user.name 名字 git ...
- git命令使用方法
git安装包 http://c35.yunpan.360.cn/my/?sid=#%2F%E5%AE%89%E8%A3%85%E5%8C%85%2FGit%E5%AE%89%E8%A3%85%2F g ...
- 2015继续任性——不会Git命令,照样玩转Git
最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...
- 10个很有用的高级Git命令
迄今,我已经使用Git很长一段时间了,考虑分享一些不管你是团队开发还是个人项目,都受用的高级git命令. 1. 输出最后一次提交的改变 这个命令,我经常使用它 来发送其他没有使用git的人来检查或者集 ...
- 很有用的高级 Git 命令
10 个很有用的高级 Git 命令 迄今,我已经使用Git很长一段时间了,考虑分享一些不管你是团队开发还是个人项目,都受用的高级git命令. 1. 输出最后一次提交的改变 这个命令,我经常使用它 来发 ...
- 10 个很有用的高级 Git 命令(转)
英文原文:10 Useful Advanced Git Commands 迄今,我已经使用Git很长一段时间了,考虑分享一些不管你是团队开发还是个人项目,都受用的高级git命令. 1. 输出最后一次提 ...
随机推荐
- SQL 注入基础
SQL注入 SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为. 本质:把用户输入的数据当作代码执行.任何和数据库产生交互的地方便有可能存在注入. SQL ...
- CF53C Little Frog 题解
Content 有一只小青蛙想游历 \(n\) 块土堆,它现在在 \(1\) 号土堆上,每次可以跳跃任意距离到达另外的一个土堆.它想让每次跳跃的距离都不相等,试找到这样的一个方案. 数据范围:\(1\ ...
- java 理论基础 类的初始化(加载、连接(验证、准备、解析)、初始化)
一个进程就有一个JVM,每个进程之间资源独立 当调用java命令来启动某个Java程序的时候,该命令创建一个独立的进程来运行我们的Java程序.而这个独立的进程里面就包含一个Java虚拟机.不管该程序 ...
- java 图形化工具Swing 创建工具条
通过JToolBar来创建工具条: Swing提供了JToolBar类来创建工具条,创建JToolBar对象时可以指定如下两个参数: (1),name: 该参数指定该工具条的名称. (2),orien ...
- Django的Form表单验证
Form(from django import forms) 简短理解:后端提供了一个类:from django import forms,继承此类定义子类.子类中定义和form表单中提交到name名 ...
- 【LeetCode】839. 相似字符串组 Similar String Groups (Python)
作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 本文关键词:LeetCode,力扣,算法,算法题,字符串,并查集,刷题群 目录 题目描述 解题思路 并查集 代码 刷题心得 欢迎 ...
- 【LeetCode】70. Climbing Stairs 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目大意 题目大意 解题方法 递归 记忆化搜索 动态规划 空间压缩DP 日期 [L ...
- Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples
目录 概 主要内容 Obfuscated Gradients BPDA 特例 一般情形 EOT Reparameterization 具体的案例 Thermometer encoding Input ...
- java-git 暂存
在接到需求以后,直接在master上开发了,到提交的时候才想起来忘记新建版本分支了,直接提交到master会影响到其他人. 这时候就想着将本地编辑的代码,没有提交的代码暂存起来,然后新建一个新分支,再 ...
- <数据结构>XDOJ317.输出完全二叉树的某一层
问题与解答 问题描述 对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY. 输入格式 输入有多组数据. 每组数据第一行输入一个结点数n(1<=n<=1000), ...