設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.50.1 → 2.51.2 無更改
-
2.50.0
2025-06-16
- 2.47.1 → 2.49.1 無更改
-
2.47.0
2024-10-06
- 2.42.2 → 2.46.4 無變更
-
2.42.1
2023-11-02
- 2.38.1 → 2.42.0 無變更
-
2.38.0
2022-10-02
概要
scalar clone [--single-branch] [--branch <main-branch>] [--full-clone] [--[no-]src] [--[no-]tags] [--[no-]maintenance] <url> [<enlistment>] scalar list scalar register [--[no-]maintenance] [<enlistment>] scalar unregister [<enlistment>] scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>] scalar reconfigure [--maintenance=(enable|disable|keep)] [ --all | <enlistment> ] scalar diagnose [<enlistment>] scalar delete <enlistment>
描述
Scalar 是一個倉庫管理工具,旨在最佳化 Git 在大型倉庫中的使用。Scalar 透過配置高階 Git 設定、在後臺維護倉庫以及減少透過網路傳送的資料來提高效能。
Scalar 的一個重要概念是登記 (enlistment):這是專案的頂層目錄。它通常包含一個名為 src/ 的子目錄,該目錄是一個 Git 工作樹。這鼓勵了已跟蹤檔案(在 src/ 內)與未跟蹤檔案(如構建產物,在 src/ 外)之間的分離。當向 Scalar 註冊一個名稱不是 src 的現有 Git 工作樹時,登記目錄將與該工作樹相同。
scalar 命令實現了各種子命令,並根據子命令提供不同的選項。除了 clone、list 和 reconfigure --all 之外,所有子命令都預期在登記目錄中執行。
以下選項可以在子命令之前指定
命令
Clone (克隆)
- clone [<選項>] <url> [<登記目錄>]
-
克隆指定的倉庫,類似於 git-clone[1]。預設情況下,僅克隆提交 (commit) 和樹 (tree) 物件。完成後,工作樹位於 <登記目錄>
/src。稀疏檢出 (sparse-checkout) 功能預設啟用(除非帶
--full-clone執行),且初始僅顯示頂層目錄中的檔案。使用gitsparse-checkoutset來擴充套件你想要檢視的目錄集,或使用gitsparse-checkoutdisable擴充套件到所有檔案(詳見 git-sparse-checkout[1])。你可以透過使用gitls-treeHEAD[:<目錄>] 來瀏覽稀疏檢出之外的子目錄。 - -b <名稱>
- --branch <名稱>
-
不檢出被克隆倉庫 HEAD 所指向的分支,而是檢出 <名稱> 分支。
- --single-branch
- --no-single-branch
-
僅克隆通往單個分支末端的歷史記錄,該分支由
--branch選項指定或為遠端倉庫HEAD指向的主分支。後續對生成倉庫的獲取 (fetch) 操作將僅更新用於初始克隆的分支的遠端跟蹤分支。如果在進行
--single-branch克隆時遠端 HEAD 未指向任何分支,則不會建立遠端跟蹤分支。 - --src
- --no-src
-
預設情況下,
scalarclone將克隆的倉庫放置在 <登記目錄>/src目錄中。使用--no-src可將克隆的倉庫直接放置在 <登記目錄> 中。 - --tags
- --no-tags
-
預設情況下,
scalarclone會獲取遠端通告的標籤物件,且未來的gitfetch命令也會執行同樣操作。使用--no-tags可以在克隆時避免獲取標籤,並配置倉庫在未來也不獲取標籤。若要在使用--no-tags克隆後獲取標籤,請執行gitfetch--tags。 - --full-clone
- --no-full-clone
-
預設會初始化稀疏檢出。可以透過
--full-clone關閉此行為。 - --maintenance
- --no-maintenance
-
預設情況下,
scalarclone將登記目錄配置為使用 Git 的後臺維護功能。使用--no-maintenance可跳過此配置。
Run (執行)
- scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<登記目錄>]
-
執行給定的維護任務(如果指定了
all則執行所有任務)。除all和config外,此子命令只需移交給 git-maintenance[1] 執行(將fetch對映為prefetch,將pack-files對映為incremental-repack)。一旦倉庫在 Scalar 註冊,這些任務將作為計劃維護的一部分自動執行。因此,通常不需要手動執行此子命令。
config任務是 Scalar 特有的,它配置所有那些能讓 Git 在大型倉庫中更高效工作的強制性預設設定。由於此任務作為scalarclone的一部分自動執行,因此很少需要顯式呼叫此任務。
推薦配置值
作為 scalar clone 和 scalar register 的一部分,某些 Git 配置值會被設定,以針對大型倉庫或跨平臺支援進行最佳化。這些選項會根據大型倉庫的最佳已知建議在新的 Git 版本中更新,使用者可以透過執行 scalar reconfigure [--all] 來獲取最新的建議。
本節列出了最新版本中所設配置值的理由。
- am.keepCR=true
-
此設定對於 Windows 和非 Windows 平臺之間的跨平臺開發非常重要,並可在某些工作流中保留回車 (\r) 字元。
- commitGraph.changedPaths=true
-
此設定有助於計算序列化 commit-graph 的後臺維護步驟同時儲存路徑變更 (changed-path) 布隆過濾器。這可以加速檔案歷史命令,並允許使用者在不執行前臺命令的情況下自動獲益。
- commitGraph.generationVersion=1
-
雖然出於效能原因首選版本 2,但預設使用版本 1 的現有使用者在升級到版本 2 時需要特別小心。隨著升級方案的完善,這在未來可能會發生變化。
- core.autoCRLF=false
-
這取消了當僅存在 LF 換行符時,為工作樹檔案新增 CRLF 換行符的轉換。出於效能原因取消了此操作。使用關心 CRLF 換行符的工具的倉庫,應直接提交帶有這些換行符的必要檔案。
- core.logAllRefUpdates=true
-
這將在所有分支上啟用引用日誌 (reflog)。雖然這對於大型倉庫有效能成本,但它通常是使用者擺脫困境或向專家尋求支援的重要資料來源。
- core.safeCRLF=false
-
類似於
core.autoCRLF=false,這停用了關於 CRLF 轉換是否可逆的檢查。這是一項效能改進,但如果使用者重新啟用了core.autoCRLF,則可能存在危險。 - credential.https://dev.azure.com.useHttpPath=true
-
此設定僅針對 Azure DevOps 的 Web URL 啟用
credential.useHttpPath功能。這對於使用多個組織以及多個憑據令牌與該服務互動的使用者非常重要。 - feature.experimental=false
-
這停用了在此功能配置下歸類的“實驗性”最佳化。預期所有有價值的最佳化也已由 Scalar 配置顯式設定,任何差異都是故意的。顯著差異包括停用了針對客戶端 Scalar 倉庫的若干點陣圖 (bitmap) 相關配置選項。
- feature.manyFiles=false
-
這停用了在此功能配置下歸類的“多檔案”最佳化。預期所有有價值的最佳化也已由 Scalar 配置顯式設定,任何差異都是故意的。
- fetch.showForcedUpdates=false
-
這停用了
gitfetch結束時的檢查,該檢查會通知使用者引用更新是否為強制更新(即先前位置無法從最新位置到達)。此檢查在大型倉庫中可能非常昂貴,因此被停用並替換為建議訊息。設定advice.fetchShowForcedUpdates=false可停用此建議訊息。 - fetch.unpackLimit=1
-
此設定防止 Git 將從伺服器下載的包檔案 (packfiles) 解包為鬆散物件 (loose objects)。預設限制 100 旨在防止因包檔案過多導致的效能問題,但 Scalar 使用後臺維護來對包檔案進行分組並使用多包索引 (multi-pack-index) 覆蓋它們,從而消除了此問題。
- fetch.writeCommitGraph=false
-
此配置設定旨在幫助使用者在執行獲取操作時自動更新其 commit-graph 檔案。然而,這會佔用前臺獲取和拉取的時間,而 Scalar 使用後臺維護來執行此功能。
- gc.auto=0
-
這停用了自動垃圾回收,因為 Scalar 使用後臺維護來保持倉庫資料的良好狀態。
- gui.GCWarning=false
-
由於 Scalar 透過設定
gc.auto=0停用了垃圾回收,git-gui工具可能會開始對此設定發出警告。停用此警告,因為 Scalar 的後臺維護配置已使該警告變得無關緊要。 - index.skipHash=true
-
停用在寫入索引內容時計算其雜湊值。這有助於提高效能,特別是對於大型索引檔案。
- index.threads=true
-
這告訴 Git 根據
core.preloadIndex的預設值自動檢測在讀取索引時應使用的執行緒數,從而啟用並行索引讀取。此顯式設定還啟用了index.recordOffsetTable=true以加速並行索引讀取。 - index.version=4
-
此索引版本為路徑名添加了壓縮,大幅減小了大型倉庫的索引大小。這是一項重要的效能提升。
- log.excludeDecoration=refs/prefetch/*
-
由於 Scalar 啟用了帶有
incremental策略的後臺維護,此設定可避免後臺預取 (prefetch) 操作儲存的引用汙染gitlog的輸出。 - merge.renames=true
-
在大型倉庫中計算合併時,檢測重新命名對於最大限度地提高獲得正確驗證結果的可能性尤為重要。在本地執行合併的使用者通常是因為伺服器端合併(透過拉取請求或類似方式)導致了衝突。雖然這是預設設定,但顯式設定它是為了覆蓋使用者出於效能原因可能對
diff.renames進行的潛在更改。 - merge.stat=false
-
這停用了計算合併後的 diff 輸出。這提高了大型倉庫中
gitmerge的效能,同時減少了冗餘輸出。 - pack.useBitmaps=false
-
這停用了使用附加到包檔案的
.bitmap檔案。點陣圖檔案是針對伺服器端而非客戶端使用而最佳化的。Scalar 停用此項是為了避免使用者誤建立.bitmap檔案時可能出現的效能問題。 - pack.usePathWalk=true
-
這預設啟用了
gitpack-objects的--path-walk選項。這可以加速由gitpush和其他重新打包 (repack) 操作建立的包檔案的計算和壓縮。 - receive.autoGC=false
-
類似於
gc.auto,停用此設定以優先使用後臺維護。 - status.aheadBehind=false
-
這停用了通常在
gitstatus命令期間發生的領先/落後 (ahead/behind) 計算。這些資訊經常被使用者忽略,但在每天接收成千上萬個提交的大型倉庫中,計算成本可能很高。該計算被替換為一條建議訊息,可以透過停用advice.statusAheadBehind配置來關閉該訊息。
以下設定根據所使用的平臺而有所不同