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á jenom pro režim manifestu uživatele.
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 začínáme se správou 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:
Manifest – vlastnost | 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ý má 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 každý oddíl porovná 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řazeny 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 na datum podle formátu ISO-8601 YYYY-MM-DD
. 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 se seřadí jako první podle jejich části data a pak číselnou porovnáním 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ů.
#
, která se používá k označení verzí portů, je zakázána.
chování řazení: U samotného řetězce verze se nepokoušá žá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.) bez jakýchkoli změn v nadřazené verzi 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á 2
verze portu 1.2.0
verze portu . Pokud je verze portu 0
přípona #0
vynechána (např. 1.2.0
znamená verzi 1.2.0
0
portu).
chování řazení: Pokud se obě 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 (pokud neurčíte jinde, použije se verze přidružená k danému směrnému plánu). To umožňuje manifestům nejvyšší úrovně zachovat celý graf závislostí up-to-date bez nutnosti individuálního určení přímých omezení "version>="
.
Každý nakonfigurovaný registr má přidružený směrný plán. Pro manifesty, které nenakonfigurují žádné registry, definuje pole "builtin-baseline"
směrný plán pro předdefinovaný registr. Pokud manifest nenakonfiguruje žádné registry a nemá "builtin-baseline"
, 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, port by měl používat "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
. Pokud chcete 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"
}
V rámci 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 1.2.11
verze portu 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.
Pro daný název může být deklarováno pouze jedno přepsání.
{
"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" }
]
}