gclient 是由 Google 用 Python 開發的一套跨平臺的git倉庫管理工具,它的作用類似 git 的 submodule,用來將多個git倉庫組成一個solution進行管理,比如chromium專案是由80多個獨立的git倉庫構成的。這樣的好處是,一個git倉庫可以被多個solution共用,類似CBB的機制,只不過它是直接引用程式碼倉庫,而CBB是引用編譯好的程式。
具體來講,gclient 的核心功能是將solution中由DEPS檔案定義的所有git倉庫拉取到指定的目錄。圍繞著這個功能,它新增了一些其它的輔助功能,比如Hooks
,include_rules
等功能。
1. 關鍵概念
gclient
: 一個跨平臺的程式碼倉庫管理工具,用於管理由多個程式碼倉庫組成的專案;repo
: 作用同gclient,是gclient的前輩,gclient是更新的工具;roll_deps
: 一個gclient 的輔助工具,用於更新DEPS檔案中某個專案的程式碼版本;Gerrit/Rietveld
: 一個Code Review系統,可以和git/svn整合;Hooks
: gclient中的術語,當gclient拉完程式碼之後執行的額外指令碼;Solution
: 一個包含DEPS檔案的倉庫,DEPS檔案中記錄了該solution所有依賴的專案;.gclient
: 一個由 gclient config 命令建立出來的檔案,內部記錄了要拉取的solution;DEPS
: 一個檔案,gclient 用於管理專案依賴的一個檔案,記錄了專案的依賴關係;CL
: Change List ,類似 git 的 diff 和 pack;LKGR
: Last Known Good Revision,一個git tag,記錄了最新的經過完整測試的版本;managed
: gclient 的一種模式,該模式已過時,不推薦使用;該模式用於幫助那些對git不熟悉的開發者更簡單的使用gclient;inlcude_rules
: 指定當前目錄下哪些目錄/檔案可以被其他程式碼inlcude,那些不可以被inlcude;specific_include_rules
: 作用同include_rules,但是可以使用萬用字元;
2. gclient 命令解釋
gclient config
該命令用來初始化要拉取的solution,它會在命令執行目錄下生成 .gclient 檔案; .gclient 檔案中記錄了要拉取的solution的倉庫地址,以及拉取後要儲存的位置,如下:
gclient sync
該命令用來同步solution。它有很多的引數可選:
3. 其他
4. 使用 gclient 的開發流程
5. 參考資料
https://www.chromium.org/developers/how-tos/depottools/
https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up