Bağımlı paketler için kullanılabilir olması için Composer'da belirli bir commit nasıl doğru bir şekilde gerekli kılınır?


108

GitHub'dan belirli bir kaydı foo/foo-libolan bir kitaplığım var requires:

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

ve iyi çalışıyor:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

ancak bu kitaplığı başka bir projede istediğimde:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

bağımlılık hatası verir:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

Öyleyse sorum şu: requireKitaplığımdaki GitHub'dan belirli bir commit nasıl doğru bir şekilde , böylece bağımlı paketlerde kullanılabilir olsun?


3
Bir commit gerektirdiğinde, bestecinin gereksinimleri taahhüt edenlere saygı göstermeyeceğini unutmayın (cmoposer.json). Bunun yerine, zamanla değişecek olan şube başkanı gereksinimini hesaplar. Bu bir süre işe yarayabilir, ancak gelecekte kesin olarak bozulacaktır.
estani

Yanıtlar:


157

devHem kitaplığınızda hem de uygulamanızda bir bayrakla birlikte bu karmada Gaufrette kitaplığına açıkça ihtiyacınız olacak . Bunun gibi bir şey uygulamada çalışmalıdır composer.json:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

Gönderen belgeler :

Bağımlılıklarınızdan birinin kararsız bir pakete bağımlılığı varsa, yeterli kararlılık bayrağıyla birlikte onu da açıkça talep etmeniz gerekir.

Belgeler ayrıca Gaufrette deposunu bar/bar-appComposer dosyanıza eklemeniz gerektiğini önermektedir , ancak bu durumda gerekli değilmiş gibi görünmektedir . Neden olduğundan emin değilim.


Bunu zaten denedim, işe yaramıyor. Özellikle GitHub yerine Packagist'i tercih eden Composer ile bir ilgisi olabilir mi?
Maciej Sz

Hayır, yerel depolarımı kontrol ettim - bu GitHub'a özgü bir sorun değil.
Maciej Sz

Bunu daha önce çalıştırdığımdan oldukça eminim. Ne eklerseniz "minimum-stability": "dev"için bar/bar-appgereksinimleri?
Chris

3
Bu Mecbur gidiyoruz gibi görünüyor açıkça kütüphanenizde ve uygulamanızda hem de bu karmaşanın en gaufrette gerektirir. "Bağımlılıklarınızdan birinin kararsız bir pakete bağımlılığı varsa, yeterli kararlılık bayrağıyla birlikte onu da açıkça talep etmeniz gerekir." Gaufrette gibi bazı paketlere devkararlı durumda ve stablediğer her şey için varsayılan olarak sahip olabileceğinizi unutmayın.
Chris

2
Görünüşe göre GitHub, Composer tarafından kutudan çıkar çıkmaz destekleniyor - "url": "https://github.com/KnpLabs/Gaufrette.git"ilk paketten yeni çıkardım ve hala çalışıyor.
Maciej Sz

15

Komut satırında bunu şu şekilde yaparsınız:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

Tüm karmayı kullanmak zorunda değilsiniz, yedi karakter uzunluğundaki bir karma hile yapıyor gibi görünüyor. Yukarıda bahsedildiği gibi, projenizin geliştiriciyi desteklemesi gerekecek - önceden ayarlanmadıysa şikayet edecek. Ayrıca, --with-dependenciesgüncellemekte olduğunuza ait herhangi bir bağımlılığı elde etmek için kullanın .


0

Çatallayarak bir Git Deposu için değişiklikler yapıyorsanız, Paket adının aslında paketin kendi composer.json dosyasında tanımlandığından emin olun - bu nedenle paketi kendi joshuapaling github hesabıma çatallamış olsam da ve Paket şimdi , besteciler açısından paketin adını hiç etkilemeyen https://github.com/joshuapaling/Cake-Resque.git URL'sinde bulunuyordu.

Aptalca bir hata - ama bestecide yeniyim ve ilk başta net değildi! Öyleyse, umarım bu aynı sorunu olan başka birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.