Versionsverwaltungsreferenz
Mit der Versionsverwaltung können Sie die genauen Überarbeitungen von Abhängigkeiten, die von Ihrem Projekt in Ihrer Manifestdatei verwendet werden, deterministisch steuern. Die Versionsverwaltung ist nur für Benutzer im Manifestmodus verfügbar.
Weitere Informationen zum vcpkg-Versionsverwaltungsalgorithmus und allgemeinen Konzepten finden Sie unter Versionsverwaltungskonzepte.
Ein Beispiel mit Kontext finden Sie in unserem Leitfaden für die ersten Schritte mit der Versionsverwaltung.
Versionsschemas
Ports in vcpkg sollten versuchen, die Versionsverwaltungskonventionen zu befolgen, die von den Autoren des Pakets verwendet werden. Aus diesem Grund sollte beim Deklarieren der Version eines Pakets das entsprechende Schema verwendet werden.
Jedes Versionsverwaltungsschema definiert eigene Regeln für eine gültige Versionszeichenfolge und wichtiger ist die Regeln zum Sortieren von Versionen mithilfe desselben Schemas.
Die versionsverwaltungsschemas, die von vcpkg verstanden werden, sind:
Manifesteigenschaft | Versionsverwaltungsschema |
---|---|
version |
Für punkttrennte numerische Versionen |
version-semver |
Für SemVer-kompatible Versionen |
version-date |
Für Datumsangaben im Format YYYY-MM-DD |
version-string |
Für beliebige Zeichenfolgen |
Ein Manifest darf nur eine Versionsdeklaration enthalten.
Hinweis
Standardmäßig vergleicht vcpkg keine Versionen, die unterschiedliche Schemas verwenden. Beispielsweise kann ein Paket, das über ein version-string: 7.1.3
Paket verfügt, nicht mit demselben Paket version: 7.1.4
verglichen werden, auch wenn die Konvertierung offensichtlich erscheint.
version
Akzeptiert Versionszeichenfolgen, die einem entspannten, punkttrennten, semverähnlichen Schema folgen.
Die Version besteht logisch aus punkttrennten (.
) numerischen Abschnitten. Jeder Abschnitt muss eine ganzzahlige positive Zahl ohne führende Nullen enthalten.
Das regex-Muster für dieses Versionsverwaltungsschema lautet: (0|[1-9]\d*)(\.(0|[1-9]\d*))*
Sortierverhalten: Beim Vergleichen von zwei Versionen wird jeder Abschnitt von links nach rechts mit dem numerischen Wert verglichen, bis der erste Unterschied gefunden wird. Eine Version mit der kleinsten Gruppe von Abschnitten hat Vorrang vor einer anderen mit einer größeren Gruppe von Abschnitten, da alle vorherigen Abschnitte gleich vergleichen.
Beispiel:
0
< 0.1
< 0.1.0
< 1
< 1.0.0
< 1.0.1
< 1.1
< 2.0.0
version-semver
Akzeptiert Versionszeichenfolgen, die den Konventionen für die semantische Versionsverwaltung folgen, wie in der Spezifikation für die semantische Versionsverwaltung beschrieben.
Sortierverhalten: Zeichenfolgen werden nach den regeln sortiert, die in der Semantikversionsspezifikation beschrieben sind.
Beispiel:
1.0.0-1
< 1.0.0-alpha
< 1.0.0-beta
< 1.0.0
< 1.0.1
< 1.1.0
version-date
Akzeptiert Versionszeichenfolgen, die nach dem ISO-8601-Format YYYY-MM-DD
analysiert werden können. Mehrdeutige Bezeichner sind in Form von punkttrennten, positiven, ganzzahligen Zahlen ohne führende Nullen zulässig.
Dies ist das empfohlene Versionsverwaltungsschema für "Live at HEAD"-Bibliotheken, die keine etablierten Versionsversionen haben.
Das regex-Muster für dieses Versionsverwaltungsschema lautet: \d{4}-\d{2}-\d{2}(\.(0|[1-9]\d*))*
Sortierverhalten: Zeichenfolgen werden zuerst nach ihrem Datumsteil und dann nach numerischem Vergleich ihrer Mehrdeutigkeitsbezeichner sortiert. Mehrdeutige Bezeichner folgen den Regeln des entspannten (version
) Schemas.
Beispiele: 2021-01-01
<2021-01-01.1
<2021-02-01.1.2
<2021-02-01.1.3
<2021-02-01
version-string
Für Pakete, die Versionszeichenfolgen verwenden, die keines der anderen Schemas entsprechen, akzeptiert sie die meisten beliebigen Zeichenfolgen. Die #
zum Kennzeichnen von Portversionen verwendete Version ist unzulässig.
Sortierverhalten: Für die Versionszeichenfolge selbst wird keine Sortierung versucht. Wenn die Zeichenfolgen jedoch exakt übereinstimmen, können ihre Portversionen verglichen und sortiert werden.
Beispiele:
apple
<>orange
<>orange.2
<>orange2
watermelon#0
<watermelon#1
port-version
Portversionen verfolgen Änderungen in den Paketdateien (vcpkg.json
, portfile.cmake
usw.) ohne Änderungen an der Upstream-Bibliotheksversion.
Eine Portversion ist ein nicht negativer ganzzahliger Wert.
Die Regeln für Portversionen sind:
- Beginnen Sie bei 0 für die ursprüngliche Version des Ports,
- wird jedes Mal um 1 erhöht, wenn eine vcpkg-spezifische Änderung an dem Port vorgenommen wird, der die Version des Pakets nicht erhöht,
- und jedes Mal, wenn die Version des Pakets aktualisiert wird, auf 0 zurückgesetzt.
Hinweis
vcpkg folgt dem Textformat <version>#<port version>
. Beispiel 1.2.0#2
: Versionsportversion 1.2.0
2
. Wenn die Portversion das Suffix ausgelassen 0
wird (z. B. 1.2.0
impliziert version portierte Version 1.2.0
0
).#0
Sortierverhalten: Wenn zwei Versionen gleich vergleichen, werden ihre Portversionen mit ihrem numerischen Wert verglichen, niedrigere Portversionen haben Vorrang.
Beispiele:
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
Versionsbeschränkungen
Basislinien
Basispläne definieren einen globalen Versionsboden für die Versionen, die berücksichtigt werden. Dadurch können Manifeste der obersten Ebene das gesamte Diagramm der Abhängigkeiten auf dem neuesten Stand halten, ohne dass sie direkte "version>="
Einschränkungen einzeln angeben müssen.
Jede konfigurierte Registrierung weist einen zugeordneten Basisplan auf. Für Manifeste, die keine Registrierungen konfigurieren, definiert das "builtin-baseline"
Feld die Basislinie für die integrierte Registrierung. Wenn ein Manifest keine Registrierungen konfiguriert und keine "builtin-baseline"
verfügt, wird die Installation gemäß dem Algorithmus für den klassischen Modus ausgeführt und ignoriert alle Versionsverwaltungsinformationen.
Baselines, wie andere Registrierungseinstellungen, werden von Ports ignoriert, die als Abhängigkeit verwendet werden. Wenn während der transitiven Versionsauflösung eine Mindestversion erforderlich ist, sollte der Port verwendet werden "version>="
.
Beispiel
{
"name": "project",
"version": "1.0.0",
"dependencies": ["zlib", "fmt"],
"builtin-baseline":"9fd3bd594f41afb8747e20f6ac9619f26f333cbe"
}
Verwenden Sie zum Hinzufügen eines anfänglichen "builtin-baseline"
Verwendungszwecks vcpkg x-update-baseline --add-initial-baseline
. Verwenden Sie vcpkg x-update-baseline
zum Aktualisieren von Basisplanen in einem Manifest .
version>=
Expresses a minimum version requirement, version>=
declarations put a lower boundary on the versions that can be used to satisfy a dependency.
Hinweis
vcpkg wählt die niedrigste Version aus, die allen Einschränkungen entspricht, sodass keine Einschränkung kleiner als erforderlich ist.
Beispiel:
{
"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"
}
Als Teil einer Versionseinschränkungsdeklaration kann eine Portversion durch Hinzufügen des Suffixes #<port-version>
angegeben werden, im vorherigen Beispiel 1.2.11#9
bezieht sich auf version 1.2.11
port version 9
.
overrides
Durch das Deklarieren einer Außerkraftsetzung wird vcpkg gezwungen, alle anderen Versionseinschränkungen zu ignorieren und die in der Außerkraftsetzung angegebene Version zu verwenden. Dies ist nützlich zum Anheften exakter Versionen und zum Beheben von Versionskonflikten.
Außerkraftsetzungen werden als Array von Paketversionsdeklarationen deklariert.
Damit eine Außerkraftsetzung wirksam wird, muss das überschriebene Paket Teil des Abhängigkeitsdiagramm sein. Das bedeutet, dass eine Abhängigkeit entweder durch das Manifest der obersten Ebene deklariert oder Teil einer transitiven Abhängigkeit sein muss.
{
"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" }
]
}