瀏覽 1.1.1 文件
1.1.1

附錄:外部 Repository 設定

透過三份 1.1.1 TOML 約定宣告、鎖定、物化、繫結並在本地覆蓋外部 Repository。

適用對象: 開發者、整合方與發布工程師

外部 Repository 設定#

1.1.1 把作者意圖、確切解析結果和本地開發覆蓋項,拆成三個 TOML 檔案:

檔案權威
ait-external.toml由 Repository 編寫的直接宣告。
ait-external.lock解析完成的完整依賴圖,帶確切的 Snapshot 鎖定;由 AIT 生成。
ait-external.links.toml由 AIT 命令管理的本地路徑覆蓋項。

ait-external.toml#

每一條 [[external]] 指明一個直接的外部 Repository,以及它的內容物化到 哪裡。

程式碼 · toml
[[external]]
name = "shared-core"
repo_name = "shared-core"
repository_index = 23
remote = "origin"
line = "main"
snapshot = "SNP-0123456789AB"
materialize_to = ".ait-external/shared-core"
license = "Apache-2.0"
version = "1.2.0"

[external.bindings.rust]
kind = "cargo-path"
path = "rust/crates/shared-core"
package = "shared-core"

[external.bindings.python]
kind = "python-path"
path = "python"
package = "shared-core"
module = "shared_core"

宣告欄位#

欄位型別與含義
name必填,非空的本地外部名。它用來標識這條宣告和對應的 link 覆蓋項。
repo_name必填,非空的源 Repository 名。
repository_index必填,無符號 32 位的 server Repository 索引。
remote必填,非空的已設定遠端名,用來解析源。
line必填,非空的源 Line。
snapshot必填,非空且確切的源 Snapshot ID。這是鎖定,不只是一個分支提示。
materialize_to必填,規範化的儲存庫相對目標路徑。絕對路徑和 .. 穿越會被拒絕。
license必填,非空的已宣告授權條款表示式或標籤。
version可選,非空的、給人看的版本字串。內容權威仍然是 Snapshot。
bindings可選對映,每種受支援的語言最多一條繫結。

直接名稱必須無歧義。物化路徑和繫結路徑會按儲存庫相對路徑校驗,不能逃出 它們所屬的根目錄。

繫結欄位#

必填欄位可選後設資料
[external.bindings.rust]kind = "cargo-path"pathpackage
[external.bindings.python]kind = "python-path"pathpackagemodule
[external.bindings.node]kind = "file-package"pathpackage
[external.bindings.go]kind = "replace-path"pathmodule

每個 path 都是相對於該外部 Repository 物化位置的。後設資料只要寫了就必須 非空。繫結校驗還會檢查相應的語言工具和依賴檔案;光是 TOML 形狀合法, 並不能證明這條包繫結真的能用。

ait-external.lock#

不要憑空造這個檔案,也別隨手手改。ait external update 會解析直接和 傳遞的外部依賴、規範化順序、校驗依賴圖,並原子地寫入 lock。

程式碼 · toml
format = "ait.external.lock"

[[node]]
name = "shared-core"
repo_name = "shared-core"
repository_index = 23
remote = "origin"
line = "main"
snapshot = "SNP-0123456789AB"
parent_path = ""
materialize_to = ".ait-external/shared-core"
license = "Apache-2.0"
version = "1.2.0"

[[node.binding]]
language = "rust"
kind = "cargo-path"
path = "rust/crates/shared-core"
package = "shared-core"

Lock 欄位#

欄位約定
format確切字串 ait.external.lock
[[node]]零個或多個規範化的直接與傳遞依賴圖節點。
node.name必填非空名稱,與 parent_path 組合後唯一。
node.repo_name必填,非空的源 Repository 名。
node.repository_index必填,無符號 32 位的源 Repository 索引。
node.remote必填,非空的遠端名。
node.line必填,非空的源 Line。
node.snapshot必填,非空且確切的 Snapshot ID。
node.parent_path直接根節點為空;否則是規範化的相對祖先路徑。
node.materialize_to必填,規範化的相對目標路徑。
node.license必填,非空的授權條款標籤。
node.version可選的版本字串。
[[node.binding]]零個或多個規範化的繫結摘要。
node.binding.languagerustpythonnodego
node.binding.kind該語言允許的確切 kind。
node.binding.path規範化的相對路徑。
node.binding.package可選,非空的包名。
node.binding.module可選,非空的模組名。

lock 會拿 ait-external.toml 來比對,查出缺失的、多餘的和欄位漂移的 直接根節點。乾淨的 lock 必須和清單一起提交,這樣每個 worktree 和遠端 建置看到的才是同一張依賴圖。

本地 link 讓開發者可以臨時把某個具名外部從一個已有目錄物化出來,而不是 用它鎖定的 Snapshot。

程式碼 · toml
[[link]]
name = "shared-core"
path = "../shared-core"

每一條只有 namepath 這兩個操作值。name 指向一條外部宣告;path 必須能解析到一個已存在的目錄。用擁有它的那兩條命令:

程式碼 · bash
ait external link shared-core ../shared-core
ait external unlink shared-core

最後一條 link 被移除時,AIT 會把這個檔案刪掉。本地 link 屬於開發者覆蓋 項,在鎖定的或可發布的物化過程中會被拒絕。它們從不修改已宣告的 Snapshot 或生成的 lock。

更新與驗證流程#

程式碼 · bash
ait external update
ait external status
ait external doctor
ait diff ait-external.toml ait-external.lock

像評審一次依賴升級那樣評審 lock 的改動:在記錄最終的 Snapshot 之前,先 核對 Repository 索引、Line、Snapshot、物化目標、授權條款和繫結漂移。

相關參考#

版本權威

對照 1.1.1 原始碼逐條核對

這一頁是公開文件,不是第二份產品契約。要確認發布權威,請以確切的原始碼和分發契約為準。

所屬元件 Snapshot
  • ait-coreSNP-ED7593DBF982
  • ait-serverSNP-0CCD7DD2A077
  • ait-runnerSNP-35C9C133D2EE
  • ait-pythonSNP-756C731A4CC0
  • ait-nodeSNP-55E90D0A81F1