碼雲 Git Analyze 工具集更新 原 薦

Git Analyze

Git Analyze 是碼雲團隊開發的跨平臺 git 附加工具,在前文 Git Analyze 工具實現與原理 中介紹了 git-analyze ,git-analyze 功能主要是分析存儲庫從哪次提交引入了體積較大的文件,而 git-rollback 則可以根據用戶輸入的 commit 或者回滾版本將存儲庫回滾到早期提交,並且當前工作目錄的文件並不發生任何修改,這樣依賴可以有效的減小存儲庫的體積。

Git Analyze 更新

筆者在碼雲主要負責服務器和 git 原生工具的開發,

Git Cheat

git-cheat 可以基於當前分支創建一個只有一個 commit 的分支,此分支的提交信息,樹對象等都與當前分支一致,但沒有父提交。 很容易看到的一個場景是,用戶清理項目後,創建一個提交,然後在此提交的基礎上使用 git-cheat 創建乾淨的提交併且開源。

命令格式:

git-cheat branch commit-message

git-cheat 的原理非常簡單,當我們創建一個提交時,此提交可能擁有 parent 提交,當 parent 存在時,就可以回溯,回溯的軌跡反向就是歷史記錄了,如果沒有 parent 提交時,那就沒有歷史記錄可以查詢了。我們知道,在 git 中,維繫這些 commit 等等對象的是引用,當 commit 不屬於任何 commit,又沒有被引用記錄,那麼它將無立錐之地,也就是成了懸空對象,而推送到遠程服務器上也是由引用或者子提交維繫的。

使用 git-cheat 創建的分支如果推送到服務器上,只會推送當前工作目錄中納入版本控制的所有文件和樹對象,還有唯一的那個提交了。

Git Complete

git-complete 可能是一個有爭議的工具,按照格式輸入,git-complete 將在當前的存儲庫創建整整一年的提交,當然,要實現貢獻度繪製圖形,筆者並沒有做,使用這個工具,什麼連擊 365 天隨隨便便了,友商的代碼託管平臺一樣有效。

git-complete 原理非常簡單,比如 git commit 有參數 --date 可以設置提交時間,同樣的在 libgit2 中,也可以通過設置 git_signature 的字段 when 來設置提交時間,而時間可以依次使用 time localtime mktime 合成。

Pre commit 鉤子

pre-commit 是 git 的一類鉤子,當用戶創建提交,也就是 git commit -m 後,如果存儲庫中有此類鉤子, git-commit 就會執行 pre-commit 鉤子,用戶在創建提交時,很容易將大文件或者二進制文件提交到存儲庫, 等到推送到代碼託管平臺被拒絕時撤銷更改就非常麻煩了。使用 pre-commit 可以避免此類問題, 用戶將 pre-commit 軟鏈到 .git/hooks/pre-commit 就行了,用戶可以通過命令 git config 設置存儲庫或者全局的 pre-commit 配置,添加 --global 參數時修改全局設置。

git config commit.limitsize 100M # limit file size
git config commit.warnsize 50M # report warning file size
git config commit.filters "\.(exe|obj|pdb)$" # filter regex
git config commit.filterbroken true # filter broken when find

這裏 limitsize 即限制文件大小,單位可以是 K,M,G 不區分大小寫。warnsize 是警告提示大文件,大小爲 limitszie 的一半就可以了。

而 filters 是一個正則表達式,pre-commit 內部編譯正則表達式,然後檢測是否引入和添加了匹配的文件,如果匹配就提示錯誤。filterbroken 是設置當存在過濾文件時是否終止提交。默認爲 false。

下圖是開啓排除文件圖片: 輸入圖片說明

實際上 pre-commit 也可以使用 shell 腳本編寫,git diff --cached 參數可以比較暫存區和 HEAD 文件修改,筆者更習慣使用 C++,所以也就直接使用 libgit2 編寫了。

最後

如果要了解更多的細節以及下載預編譯的二進制可以去碼雲上 Git Analyze 項目主頁。

查看 Git Analyze 的源碼: oscstudio/git-analyze

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章