為什麼要做這件事?
老實説,我平時不太在意自己到底寫了多少行代碼。
一方面是因為這東西真沒啥太大參考價值,想刷行數的話,複製粘貼個幾千行都不是事;另一方面也是因為誰都知道:代碼質量和行數沒什麼關係。
但有時候,好奇心就是擋不住。
就像你聽到別人講“十萬小時定律”的時候,會突然想:
“哎,那我到底練習了多久?”
我寫代碼已經很多年了,也做了不少項目,大部分都丟在 GitHub 上沒怎麼管過。突然有天我就想:
“我這幾年到底寫了多少行代碼?”
沒什麼遠大目標,也不是為了攀比,就是想統計一下,純圖一樂。
發現了一個小工具:cloc
為了滿足這個好奇心,我去搜了一下有沒有能統計代碼行數的工具,結果發現了一個叫 cloc 的小東西。
用起來特別方便,直接在命令行跑一下,它就會幫你統計:
- 每種語言用了多少文件;
- 每種語言寫了多少代碼行;
- 有多少註釋行、空白行;
而且輸出格式非常清爽,長這樣:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
PHP 213 4521 2349 19432
JavaScript 75 1833 1102 10231
...
看着還挺有成就感的(笑)。
但問題是:我的代碼都在 GitHub 上
工具雖然好用,但有個問題:
我的代碼都放在 GitHub 上,平時根本沒下載到本地,如果我想統計,就得先一個個倉庫 clone 下來,太麻煩了。
所以我乾脆就寫了個腳本,把整個流程自動化了。
腳本主要做了三件事:
- 通過 GitHub 官方的
gh命令獲取我賬號下的所有倉庫; - 把這些倉庫一個個同步到本地(已有就 pull,沒有就 clone);
- 然後用
cloc統計整個目錄的代碼行數,並排除掉構建/依賴目錄。
簡單説,就是把 GitHub 上的項目都打包帶回家,然後用 cloc 數一數。
工具準備(支持 macOS / Ubuntu / Windows)
這個腳本依賴以下幾個命令行工具:
-
gh:GitHub CLI,用於獲取倉庫列表; -
jq:命令行 JSON 解析工具,用於處理接口返回的數據; -
cloc:統計代碼行數的小工具; -
git:當然少不了,用來 clone 倉庫。
macOS 安裝方法(用 Homebrew):
brew install gh jq cloc git
Ubuntu / Debian 安裝方法:
sudo apt update
sudo apt install gh jq cloc git
Windows 安裝方法(建議用 WSL)
Windows 用户建議安裝 WSL(Windows 子系統) 並使用 Ubuntu:
-
在 PowerShell(管理員)運行:
wsl --install - 安裝完成後打開 Ubuntu;
-
安裝依賴:
sudo apt update sudo apt install gh jq cloc git
GitHub CLI 登錄一次(非常重要)
運行腳本前,請先登錄 GitHub CLI:
gh auth login
它會引導你通過瀏覽器進行一次性授權。
腳本源碼(可以直接用)
#!/bin/bash
USERNAME="zxc7563598" # 👈 改成你的 GitHub 用户名
WORKDIR="$HOME/github_repos"
# 創建存放倉庫的目錄
mkdir -p "$WORKDIR"
cd "$WORKDIR" || exit
echo "📥 正在獲取 $USERNAME 的所有倉庫..."
# 獲取所有倉庫的 HTTPS 地址(最多 200 個,可改成 1000)
gh repo list $USERNAME --limit 200 --json nameWithOwner,url \
| jq -r '.[].url' | while read repo; do
reponame=$(basename "$repo")
if [ -d "$reponame" ]; then
echo "🔄 更新倉庫: $reponame"
cd "$reponame" && git pull --quiet && cd ..
else
echo "⬇️ 克隆倉庫: $reponame"
git clone --depth=1 "$repo" --quiet
fi
done
echo ""
echo "📊 開始統計代碼行數(排除 node_modules、vendor、dist、build、public)..."
echo ""
cloc --exclude-dir=node_modules,vendor,dist,build,public --exclude-lang=JSON .
運行結果展示
執行腳本後,大概就會看到類似這樣的輸出結果(我的結果):
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
PHP 2334 14079 60356 613174
Vuejs Component 232 2273 1207 29480
JavaScript 198 2769 2813 16292
CSS 13 1566 182 13460
YAML 15 3345 1 12314
HTML 43 507 262 11776
Markdown 52 1881 11 4773
Blade 27 386 52 3942
Go 4 80 65 887
WXSS 10 118 19 753
Bourne Shell 7 106 104 415
SVG 350 0 0 415
WXML 9 7 16 295
Protocol Buffers 1 2 0 187
C 1 6 0 101
Python 1 32 29 91
XML 1 0 2 29
INI 2 4 0 20
Dockerfile 1 1 0 5
DOS Batch 1 0 0 3
CSV 1 0 0 2
-------------------------------------------------------------------------------
SUM: 3303 27162 65119 708414
-------------------------------------------------------------------------------
當然,如果你並不像我一樣需要從 GitHub 上同步倉庫,那你大可不需要使用我的腳本,只需要在你想要統計的目錄下執行 cloc . 就好了
是不是還挺有意思的?
雖然知道這個數字沒啥特別實質意義,但看着這些年自己寫的幾萬行代碼,有點像翻相冊的感覺。
總結一下
-
cloc是一個小巧但非常實用的代碼行數統計工具; - 如果你的項目都放在 GitHub 上,可以配合
gh做自動化統計; - 雖然代碼行數並不重要,但偶爾看看還是挺開心的;
就當是一種和過去的自己打個招呼吧 ——
“嘿,我還在寫代碼,而且已經寫了好多年了。”