Freigeben über


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 Manifestmodus Benutzern 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.

Anmerkung

Standardmäßig vergleicht vcpkg keine Versionen, die unterschiedliche Schemas verwenden. Beispielsweise kann ein Paket mit einem version-string: 7.1.3 nicht mit demselben Paket mit version: 7.1.4verglichen 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 semantischen Versionsverwaltungsspezifikationbeschrieben.

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-DDanalysiert 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 #, die zum Kennzeichnen von Portversionen verwendet wird, 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.cmakeusw.) 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.

Anmerkung

vcpkg folgt dem Textformat <version>#<port version>. Beispielsweise bedeutet 1.2.0#2 version 1.2.0 Portversion 2. Wenn die Portversion 0#0 Suffix ausgelassen wird (z. B. impliziert 1.2.0 Version 1.2.0 Portversion 0).

Sortierverhalten: Wenn zwei Versionen gleich vergleichen, werden ihre Portversionen mit ihrem numerischen Wert verglichen, haben niedrigere Portversionen 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

Grundlinien

Basispläne definieren einen globalen Versionsboden für die Versionen, die berücksichtigt werden (es sei denn, an anderer Stelle wird die version verwendet, die diesem Basisplan zugeordnet ist). Auf diese Weise können Manifeste der obersten Ebene das gesamte Diagramm der Abhängigkeiten up-to-date beibehalten, ohne dass direkte "version>=" Einschränkungen einzeln angegeben werden müssen.

Jede konfigurierte Registrierung weist einen zugeordneten Basisplan auf. Für Manifeste, die keine Registrierungen konfigurieren, definiert das feld "builtin-baseline" den Basisplan für die integrierte Registrierung. Wenn ein Manifest keine Registrierungen konfiguriert und keine "builtin-baseline"aufweist, 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 "version>="verwenden.

Beispiel

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": ["zlib", "fmt"],
  "builtin-baseline":"9fd3bd594f41afb8747e20f6ac9619f26f333cbe"
}

Verwenden Sie vcpkg x-update-baseline --add-initial-baseline, um eine anfängliche "builtin-baseline"hinzuzufügen. Verwenden Sie vcpkg x-update-baseline, um Basispläne in einem Manifest zu aktualisieren.

version>=

Drückt eine Mindestversionsanforderung aus, version>= Deklarationen eine untere Grenze für die Versionen setzen, die verwendet werden können, um eine Abhängigkeit zu erfüllen.

Anmerkung

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 Suffixs #<port-version>angegeben werden, im vorherigen Beispiel 1.2.11#9 bezieht sich auf version 1.2.11 Portversion 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ängigkeitsdiagramms sein. Das bedeutet, dass eine Abhängigkeit entweder durch das Manifest der obersten Ebene deklariert oder Teil einer transitiven Abhängigkeit sein muss.

Für einen bestimmten Namen kann nur eine Außerkraftsetzung deklariert werden.

{
  "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" }
  ]
}