Kayıt defterleri kavramları
Genel bakış
vcpkg, https://github.com/Microsoft/vcpkgadresinde bağlantı noktalarına paketlenmiş kitaplıkların bir seçimini barındırıyor. Bu bağlantı noktaları koleksiyonu, seçilmiş kayıt defteriolarak adlandırılır. Ancak vcpkg, seçilen kayıt defteriyle sınırlı değildir. Kullanıcılar özel kayıt defterleri oluşturarak bağlantı noktası seçimini genişletebilir.
Kayıt defteri, belirli bir yapıda düzenlenmiş bağlantı noktaları ve yardımcı dosya koleksiyonudur. Kayıt defteri yapısı izlenerek, bir kayıt defterinde yer alan bağlantı noktaları, seçilen kayıt defterindeki bağlantı noktalarına sunulan özelliklerle (sürüm oluşturma, ikili önbelleğe alma) yüklenebilir.
Şu anda üç tür kayıt defteri vardır:
vcpkg'ye, vcpkg-configuration.json
dosyakullanılarak özel kayıt defterlerinde kullanılabilir bağlantı noktalarını dikkate almaları talimatı verilmektedir. Projelerinizde özel kayıt defterlerini kullanma öğreticisi için Öğreticisi: Git tabanlı kayıt defteri bağımlılık yükleme makalesine bakın.
Kayıt defteri yapısı
vcpkg'nin bir kayıt defteriyle arabirim oluşturması için aşağıdaki yapıya uygun olması gerekir:
-
ports
adlı dizin, her alt dizinin alt dizin adıyla eşleşen belirli bir bağlantı noktası içeren bağlantı noktaları koleksiyonunu içerir. Örneğin, bağlantı noktasıfoo
dosyalarıports/foo
konumunda bulunur. -
versions
adlı dizin, sürümleri veritabanını oluşturan dosyaları içerir.
Örnek: kayıt defteri yapısı
ports/
foo/
portfile.cmake
vcpkg.json
versions/
f-/
foo.json
baseline.json
Sürümler veritabanı
Tüm kayıt defterlerinin kökünde, sürümleri veritabanını içeren bir versions
dizini bulunur.
Sürümler veritabanının iki bileşeni vardır:
- Temel dosya
- Sürüm dosyaları
Temel dosya, versions
dizininin kökünde bulunan baseline.json
adlı bir JSON dosyasıdır.
Sürüm dosyaları, kullanılabilir bağlantı noktalarıyla aynı adlara sahip JSON dosyalarıdır.
bunlar versions/<prefix>/<port name>.json
içinde bulunmalıdır; burada <prefix>
, bağlantı noktası adının ilk harfi ve ardından kısa çizgidir. Örneğin, foo
bağlantı noktası için sürüm dosyası versions/f-/foo.json
'de olmalıdır.
Sürüm dosyasının amacı iki kattır:
- Her bağlantı noktasının tüm kullanılabilir sürümlerini listeleme
- Her sürümün alma konumlarını işaret edin.
Sürüm dosyasının biçimi kayıt defterinin türüne bağlıdır.
Temel dosya
Türü ne olursa olsun tüm kayıt defterleri, versions/baseline.json
konumunda bulunan baseline.json
adlı bir dosya içermelidir.
Temel dosyanın amacı, kayıt defterindeki tüm bağlantı noktaları için en son olarak kabul edilen sürüm kümesini açıklamaktır. Her seferinde bir bağlantı noktasının yeni bir sürümü kayıt defterine eklendiğinde, bu dosyanın güncellenmesi beklenmektedir.
Dosya, özellikleri taban çizgisi nesneleri olarak adlandırılan tek bir nesneden oluşan bir JSON dosyasıdır. Temel nesnelerin her birinin özellikleri, değerlerinin sürüm girdileri olduğu bağlantı noktası adlarıdır. kayıt defterlerine referans alınan makale, temel dosyaların düzenini daha ayrıntılı olarak açıklar.
Her temel sürüm girişi aşağıdaki özelliklere sahip bir nesnedir:
-
baseline
: değer, ilgilivcpkg.json
dosyasıyla eşleşen bağlantı noktasının sürümüdür. -
port-version
: değer, bağlantı noktasınınport-version
'i, ilgilivcpkg.json
dosyasıyla eşleşir.
Örnek temel dosya
{
"default": {
"foo": { "baseline": "1.0.0", "port-version": 0 },
"bar": { "baseline": "2024-08-01", "port-version": 1 },
"baz": { "baseline": "vista-xp", "port-version": 0 }
}
}
Aşağıdakiler için başvuru belgelerine bakın:
Sürüm dosyaları
Kayıt defterindeki her bağlantı noktasının karşılık gelen bir sürüm dosyası vardır.
Sürüm dosyaları versions/<prefix>/<port name>.json
konumunda depolanır; burada <prefix>
, bağlantı noktası adının ilk harfi ve ardından kısa çizgidir. Örneğin, foo
bağlantı noktası için sürüm dosyası versions/f-/foo.json
'de bulunmaktadır.
Sürüm dosyasının amacı iki kattır:
- Her bağlantı noktasının tüm kullanılabilir sürümlerini listeleme
- Bu sürümlerin her birinin alma konumunu işaret edin
Sürüm dosyasının düzeni, bir "versions"
dizisi içeren bir nesnedir ve bu dizideki her giriş bir sürüm nesnesidir. Bir sürüm nesnesi aşağıdaki özellikleri içermelidir:
- Sürüm özelliği: Özelliğin anahtarı ve değeri,
vcpkg.json
dosyasında bağlantı noktası tarafından kullanılanlarla eşleşmelidir. Anahtar,version
,version-semver
,version-date
veyaversion-string
biri olmalıdır; değeri, bağlantı noktasının bildirim dosyasında (vcpkg.json
) göründüğü şekilde sürüm olmalıdır. -
port-version
: değer, bağlantı noktasınınvcpkg.json
dosyasında göründüğü şekliyle bağlantı noktasınınport-version
değeridir. -
git-tree
: (yalnızca Git kayıt defterlerinde) değer, bağlantı noktasının dizinine karşılık gelen git ağacı SHA'dır. Bu, bağlantı noktasının dizin içeriğinin karma değeri hesaplanarak elde edilen bir SHA'dır; bu git-tree SHA, sağlanan git ağacına uygun olan bağlantı noktasının içeriğini almak için Git tarafından kullanılabilir. Bu, vcpkg'nin kayıt defterleri Git geçmişinden bağlantı noktalarının eski sürümlerini almasını mümkün kılar. Belirli bir bağlantı noktası sürümü için bu değeri nasıl edineceğinizi öğrenmek için git kayıt defterleri bölümünü okuyun. -
path
: (yalnızca dosya sistemi kayıt defterlerinde) değer, belirli bir sürüm için bağlantı noktası dosyalarını içeren dizinin tam yoludur.
Dosya sistemi kayıt defteri sürüm dosyası örneği
{
"versions": [
{
"path": "$/ports/foo/1.2.0",
"version": "1.2.0",
"port-version": 0
},
{
"path": "$/ports/foo/1.1.0",
"version": "1.1.0",
"port-version": 0
},
{
"path": "$/ports/foo/1.0.0",
"version": "1.0.0",
"port-version": 0
}
]
}
Aşağıdakiler için başvuru belgelerine bakın:
- Git kayıt defterleri için sürüm dosyası düzeni
- dosya sistemi kayıt defterleri için sürümler dosya düzeni
Yerleşik kayıt defteri
Yerleşik kayıt defteri özel bir kayıt defteri türüdür. klasik modda kullanılan varsayılan kayıt defteridir. bildirim modundavarsayılan kayıt defteri belirtilmediğinde vcpkg örtük olarak yerleşik kayıt defterini kullanır.
Dahili kayıt defteri, vcpkg deposunu https://github.com/Microsoft/vcpkg'den git clone
ettiğinizde oluşturulmuş olan seçilmiş kayıt defterinin yerel kopyasını ifade eder. Bazı işlemler, VCPKG_ROOT
ortam değişkeninin yerleşik kayıt defterine işaret etmesini bekler.
vcpkg "tek satırlık komut" veya Visual Studio yükleyicisi aracılığıyla alınırsa, yerleşik kayıt defteri, https://github.com/Microsoft/vcpkg depoya işaret eden bir Git kayıt defterine eşdeğer olur.
Git kayıt defterleri
Git kayıt defteri, kayıt defteri yapısını izleyen ve kayıt defterindeki bağlantı noktaları için sürüm oluşturma sağlamak üzere Git'in özelliklerinden yararlanan bir depodur. https://github.com/Microsoft/vcpkg'da düzenlenmiş kayıt defteri, bir Git kayıt defteri uygulamasıdır.
Git kayıt defterleri herhangi bir Git deposu sağlayıcısında barındırılarak, özel kayıt defterinize erişimi denetlemek için seçtiğiniz Git barındırma hizmetini kullanmanıza olanak tanıyarak kayıt defterinizin paylaşılması kolaylaşır.
Git kayıt defterleri, özel kayıt defteri uygulamak için önerilen yöntemdir.
Sürüm oluşturma mekanizması, seçilen kayıt defteri tarafından kullanılanla aynı olduğundan, Git kayıt defterleri sürüm veritabanı dosyalarınızı yönetmek için x-add-version
kullanabilir.
Git kayıtlarının uygulanma ayrıntıları için kayıt defterleri referansı'e bakın.
Git kayıt defterine yeni sürüm ekleme
x-add-version
komutu, kayıt defterine yeni bir bağlantı noktası veya yeni bir sürüm eklemek için kullanılabilir. Bu komutu kullanarak sürüm eklerken dikkate alınması gereken birkaç şey vardır:
Önemli
Yeni bir sürüm eklerken, sürüm geçmişinin yeniden yazılmasını önlemek için bağlantı noktasının bildirilen sürümünü henüz yayımlanmamış bir sürüme güncelleştirmeyi unutmayın.
Bir bağlantı noktasında değişiklik yaparken, ilk adım vcpkg.json
dosyasındaki sürümünü artırmak olmalıdır. Değişiklikleriniz paketin upstream sürümünde bir güncelleme içeriyorsa, port-version
'yi 0
olarak ayarlamayı unutmayın; aksi takdirde, port-version
'ü bir artırın.
x-add-version
komut, sürüm veritabanını güncelleştirmeden önce tüm bağlantı noktası değişikliklerinizin depoya işlenmesini gerektirir.
Örnek: Git kayıt defterine yeni bir bağlantı noktası sürümü ekleme
git add ports/foo/.
git commit -m "Temporary commit"
vcpkg x-add-version --x-builtin-ports-root=./ports --x-builtin-registry-versions-dir=./versions foo
added version 1.0.0#1 to path/to/registry/versions/f-/foo.json
added version 1.0.0#1 to path/to/registry/versions/baseline.json
--x-builtin-ports-root
ve --x-builtin-registry-versions-dir
yeniden yönlendirme seçenekleri sırasıyla kayıt defterinizin ports
ve versions
dizinlerine işaret etmelidir.
x-add-version
komutu başarıyla çalıştırıldıktan sonra, son işlemeyi sürüm dosyası değişikliklerini içerecek şekilde düzeltin.
git commit --amend -m "Update foo to new version"
Dosya sistemi kayıt defterleri
Dosya sistemi kayıt defterleri, bir dosya sisteminde bulunan bir kayıt defterinin uygulamasıdır. Ortak kayıt defteri yapısını izler ancak sürüm oluşturma özellikleri sunmak için Git'i kullanmaz. Bunun yerine, bağlantı noktalarının her sürümü için ayrı bir yol kullanarak ilkel bir sürüm denetimi biçimi kullanırlar.
Bu tür bir kayıt defteri, bağlantı noktalarınız için bir test alanı olarak veya Git olmayan bir sürüm denetim sisteminde kayıt defteri için alternatif sağlamak için uygundur. Büyük bağlantı noktaları koleksiyonu için dosya sistemi kayıt defterleri önerilmez ve bu tür bir kayıt defteri için sürüm veritabanı dosyalarını işlemek için herhangi bir araç sağlanmaz.
Dosya sistemi kayıt defterini uygulama yöntemleri hakkında detaylar için kayıt defterleri başvurusu bkz.
Kayıt defterlerini kullanma
Projenizde özel bir kayıt defteri kullanmak için, projenizin bildirim dosyasının (vcpkg.json
)yanında bir yapılandırma dosyası (vcpkg-configuration.json
) oluşturmanız gerekir.
Varsayılan kayıt defteri
bağlantı noktası adlarını çözümlemek, bir bağlantı noktasının adı registries
dizisindeki diğer kayıt defterleri tarafından bildirilen paket desenlerinden herhangi biriyle eşleşmediğinde varsayılan kayıt defteri geri dönüş olarak çalışır.
Özel kayıt defterleriyle ilgilenmeyen kullanıcılara kolaylık sağlamak için vcpkg, yerleşik kayıt defteri varsayılan kayıt defteri olarak örtük olarak ekler. Bu davranışı değiştirmek için, varsayılan kayıt defteri herhangi bir kayıt defterine ayarlanabilir veya tamamen devre dışı bırakılabilir.
default-registry
özelliği.
Örnek: Özel kayıt defterini varsayılan olarak ayarlama
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "84a143e4caf6b70db57f28d04c41df4a85c480fa"
}
}
Örnek: Varsayılan kayıt defterini devre dışı bırakma
vcpkg-configuration.json
{
"default-registry": null
}
Kayıt defterleri dizisi
vcpkg ile yüklenebilecek bağlantı noktalarının seçimini genişletmek için, registries
dizisini kullanarak ek kayıt defterleri belirtebilirsiniz.
Örnek: Yapılandırmaya özel kayıt defterleri ekleme
Not (dikkat)
Kayıt defteri türüne bağlı olarak, registries
dizisinde farklı bilgiler sağlamanız gerekebilir. Her kayıt defteri türü için hangi özelliklerin gerekli olduğunu öğrenmek için vcpkg-configurtion.json
başvuru bakın.
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "84a143e4caf6b70db57f28d04c41df4a85c480fa"
},
"registries": [
{
"kind": "git",
"repository": "https://my.privateregistry.git",
"baseline": "caf6b70db5784a143e4f28d05c480fa4c41df4a8",
"packages": [ "foo" ]
},
{
"kind": "filesystem",
"path": "C:/path/to/registry",
"baseline": "baseline1",
"packages": [ "bar" ]
}
]
}
Kayıt defterleri için önerilen uygulamalar
Sürüm geçmişini yeniden yazma
Bir sürüm, sürüm dosyalarına yayımlandıktan sonra, git kayıt defteri veya dosya sistemi kayıt defterindeki ilişkili git-tree
numarasını değiştirmeyin.
vcpkg'nin tasarım ilkelerinden biri, yüklü bağımlılıkların sürümlerinin kullanıcı müdahalesi olmadan değişmemesidir.
git-tree
girdisini değiştirerek sürüm dosya geçmişini yeniden yazmak bu ilkeyi ihlal eder.
Mevcut sürümde sorunlar varsa, yeni bir port-version
oluşturmayı tercih edin.
Sürüm dosyalarını silme
Not
Bu bölüm yalnızca Git kayıt defterleri için geçerlidir
Kayıt defterinizden bir portu kaldırırken, port dizinindeki içeriğini ve temel dosyadaki girdisini çıkarın. Ancak ilişkili sürümler dosyasını kaldırmaz.
Sürüm dosyası kaldığı sürece kayıt defterinde artık bir bağlantı noktası olmasa bile, bağlantı noktası kullanıcıları overrides
sürümünü kullanarak eski sürümleri yükleyebilir.
Sonraki adımlar
Şimdi deneyebileceğiniz bazı görevler şunlardır: