Referenční informace o správě verzí
Správa verzí umožňuje deterministicky řídit přesné revize závislostí používaných vaším projektem v souboru manifestu. Správa verzí je dostupná pouze uživatelům režimu manifestu.
Další informace o algoritmu správy verzí vcpkg a konceptech vysoké úrovně najdete v tématu Koncepty správy verzí.
Příklad s kontextem najdete v našem průvodci zahájením správy verzí.
Schémata verzí
Porty v vcpkg by se měly pokusit dodržovat konvence správy verzí používané autory balíčku. Z tohoto důvodu se při deklarování verze balíčku má použít příslušné schéma.
Každé schéma verzí definuje vlastní pravidla týkající se platného řetězce verze a důležitější jsou pravidla pro řazení verzí pomocí stejného schématu.
Schémata správy verzí, která rozumí vcpkg, jsou:
Vlastnost manifestu | Schéma správy verzí |
---|---|
version |
Pro číselné verze oddělené tečkami |
version-semver |
Pro verze kompatibilní se semVer |
version-date |
Pro kalendářní data ve formátu YYYY-MM-DD |
version-string |
Pro libovolné řetězce |
Manifest musí obsahovat pouze jednu deklaraci verze.
Poznámka:
Vcpkg záměrně nerovná verze, které používají různá schémata. Například balíček, který obsahuje version-string: 7.1.3
, nelze porovnat se stejným balíčkem pomocí version: 7.1.4
, i když se převod zdá být zřejmý.
version
Přijímá řetězce verzí, které následují za uvolněným schématem odděleným tečkami a semver-like.
Verze se logicky skládá z číselných oddílů oddělených tečkami (.
). Každý oddíl musí obsahovat celé kladné číslo bez počátečních nul.
Vzor regulárního výrazu pro toto schéma správy verzí je: (0|[1-9]\d*)(\.(0|[1-9]\d*))*
Chování řazení: Při porovnávání dvou verzí se jednotlivé části porovnávají zleva doprava podle jejich číselné hodnoty, dokud se nenajde první rozdíl. Verze s nejmenší sadou oddílů má přednost před jinou s větší sadou oddílů vzhledem k tomu, že všechny předchozí oddíly se porovnávají stejně.
Příklad:
0
< 0.1
< 0.1.0
< 1
< 1.0.0
< 1.0.1
< 1.1
< 2.0.0
version-semver
Přijímá řetězce verzí, které dodržují sémantické konvence správy verzí, jak je popsáno ve specifikaci sémantické správy verzí.
Chování řazení: Řetězce jsou seřazené podle pravidel popsaných ve specifikaci sémantické správy verzí.
Příklad:
1.0.0-1
< 1.0.0-alpha
< 1.0.0-beta
< 1.0.0
< 1.0.1
< 1.1.0
version-date
Přijímá řetězce verzí, které lze analyzovat k datu za formátem YYYY-MM-DD
ISO-8601 . Identifikátory nejednoznačnosti jsou povoleny ve formě čísel oddělených tečkami, kladné a celočíselné číslo bez počátečních nul.
Toto je doporučené schéma správy verzí pro knihovny Live at HEAD, které nemají zavedené verze.
Vzor regulárního výrazu pro toto schéma správy verzí je: \d{4}-\d{2}-\d{2}(\.(0|[1-9]\d*))*
Chování řazení: Řetězce jsou nejprve seřazeny podle jejich části kalendářního data a pak podle číselného porovnání jejich nejednoznačných identifikátorů. Nejednoznačné identifikátory se řídí pravidly uvolněného (version
) schématu.
Příklady: 2021-01-01
<2021-01-01.1
<2021-02-01.1.2
<2021-02-01.1.3
<2021-02-01
version-string
U balíčků používajících řetězce verzí, které nevyhovují žádnému z ostatních schémat, přijímá většinu libovolných řetězců. To #
se používá k označení verzí portů je zakázáno.
Chování řazení: U samotného řetězce verze se nepokusí žádné řazení. Pokud se ale řetězce přesně shodují, jejich verze portů je možné porovnat a seřadit.
Příklady:
apple
<>orange
<>orange.2
<>orange2
watermelon#0
<watermelon#1
port-version
Verze portů sledují změny v souborech balení (vcpkg.json
portfile.cmake
atd.), aniž by se změnily verze upstreamové knihovny.
Verze portu je nezáporná celočíselná hodnota.
Pravidla pro verze portů jsou:
- Začněte od 0 pro původní verzi portu,
- zvýšení o 1 při každé změně specifické pro vcpkg na port, který nezvyšuje verzi balíčku,
- a při každé aktualizaci verze balíčku se obnoví na 0.
Poznámka:
vcpkg se řídí textovým formátem <version>#<port version>
. Například 1.2.0#2
znamená verzi portu verze 1.2.0
2
. Pokud je 0
#0
verze portu přípona vynechána (např. 1.2.0
znamená verzi portu verze 1.2.0
0
).
Chování řazení: Pokud se dvě verze porovnávají stejně, jejich verze portů se porovnávají podle jejich číselné hodnoty, mají přednost nižší verze portů.
Příklady:
1.2.0
<1.2.0#1
<1.2.0#2
<1.2.0#10
2021-01-01#20
<2021-01-01.1
windows#7
<windows#8
Omezení verzí
Směrných plánů
Směrné plány definují úroveň globální verze pro to, které verze se budou považovat za. To umožňuje manifestům nejvyšší úrovně udržovat celý graf závislostí aktuální, aniž by bylo nutné jednotlivě specifikovat přímá "version>="
omezení.
Každý nakonfigurovaný registr má přidružený směrný plán. Pro manifesty, které nenakonfigurují žádné registry, "builtin-baseline"
definuje pole směrný plán pro předdefinovaný registr. Pokud manifest nenakonfiguruje žádné registry a nemá "builtin-baseline"
žádný kód, instalace funguje podle algoritmu klasického režimu a ignoruje všechny informace o správě verzí.
Standardní hodnoty, jako jsou jiná nastavení registru, se ignorují z portů spotřebovaných jako závislost. Pokud je během přechodného překladu verzí vyžadována minimální verze, měl by port použít "version>="
.
Příklad
{
"name": "project",
"version": "1.0.0",
"dependencies": ["zlib", "fmt"],
"builtin-baseline":"9fd3bd594f41afb8747e20f6ac9619f26f333cbe"
}
Chcete-li přidat počáteční "builtin-baseline"
, použijte vcpkg x-update-baseline --add-initial-baseline
. Chcete-li aktualizovat směrné plány v manifestu, použijte vcpkg x-update-baseline
.
version>=
Vyjadřuje požadavek na minimální verzi, version>=
deklarace umístí dolní hranici na verze, které lze použít k uspokojení závislosti.
Poznámka:
Vcpkg vybere nejnižší verzi, která odpovídá všem omezením, takže omezení menší než není povinné.
Příklad:
{
"name": "project",
"version-semver": "1.0.0",
"dependencies": [
{ "name": "zlib", "version>=": "1.2.11#9" },
{ "name": "fmt", "version>=": "7.1.3#1" }
],
"builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc"
}
Jako součást deklarace omezení verze lze zadat verzi portu přidáním přípony #<port-version>
, v předchozím příkladu 1.2.11#9
odkazuje na verzi portu verze 1.2.11
9
.
overrides
Deklarace přepsání vcpkg vcpkg ignoruje všechna ostatní omezení verze a použije verzi zadanou v přepsání. To je užitečné pro připnutí přesných verzí a řešení konfliktů verzí.
Přepsání jsou deklarována jako pole deklarací verzí balíčku.
Aby se přepsání projevilo, musí přepsaný balíček tvořit součást grafu závislostí. To znamená, že závislost musí být deklarována manifestem nejvyšší úrovně nebo součástí tranzitivní závislosti.
{
"name": "project",
"version-semver": "1.0.0",
"dependencies": [
"curl",
{ "name": "zlib", "version>=": "1.2.11#9" },
"fmt"
],
"builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "fmt", "version": "6.0.0" },
{ "name": "openssl", "version": "1.1.1h#3" }
]
}