元旦不是搭建了一個《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 年的又一個工作日了,希望工作黨的各位都能百尺竿頭更進一步!

沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟。