一條 Git 命令減少了一般儲存空間,我的伺服器在偷著笑

沉默王二發表於2022-01-16

元旦不是搭建了一個《Java 程式設計師進階之路》的網站嘛,其中用到了 Git 來作為雲伺服器和 GitHub 遠端倉庫之間的同步工具。

作為開發者,相信大家都知道 Git 的重要性。Git 是一個分散式版本控制軟體,初版由 Linus·Torvalds 開發,並於 2005 年以 GPL 許可協議釋出。

YYDS
YYDS

Git 的牛逼這次就不吹了,畢竟已經吹了 7 篇了,實在是吹不動了!

任何一個人,單靠 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 年的又一個工作日了,希望工作黨的各位都能百尺竿頭更進一步!


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

相關文章