ต้องการคอมมิตเฉพาะอย่างถูกต้องใน Composer อย่างไรจึงจะพร้อมใช้งานสำหรับแพ็กเกจที่อ้างอิง


108

ฉันมีไลบรารีfoo/foo-libที่คอมrequiresมิตเฉพาะจาก GitHub:

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

และใช้งานได้ดี:

$ 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

แต่เมื่อฉันต้องการไลบรารีนั้นในโครงการอื่น:

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

ทำให้เกิดข้อผิดพลาดในการพึ่งพา:

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.

ดังนั้นคำถามของฉันคือ: จะทำอย่างไรให้คอมrequireมิตเฉพาะจาก GitHub ในไลบรารีของฉันถูกต้องเพื่อให้สามารถใช้งานได้ในแพ็คเกจที่เกี่ยวข้อง


3
โปรดทราบว่าเมื่อต้องการคอมมิตผู้แต่งจะไม่ปฏิบัติตามข้อกำหนด (cmoposer.json) แต่จะคำนวณความต้องการของหัวหน้าสาขาซึ่งจะเปลี่ยนแปลงตลอดเวลา ดังนั้นสิ่งนี้อาจใช้ได้ผลสักพัก แต่จะพังแน่นอนในอนาคต
estani

คำตอบ:


159

คุณจะต้องกำหนดให้ห้องสมุด Gaufrette อย่างชัดเจนที่แฮชนั้นพร้อมกับdevธงทั้งในห้องสมุดและแอปพลิเคชันของคุณ สิ่งนี้ควรใช้งานได้ในแอปพลิเคชัน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"
    }
}

จากเอกสารประกอบ :

หากการอ้างอิงอย่างใดอย่างหนึ่งของคุณมีการพึ่งพาแพ็กเกจที่ไม่เสถียรคุณจำเป็นต้องกำหนดอย่างชัดเจนเช่นกันพร้อมกับแฟล็กความเสถียรที่เพียงพอ

เอกสารประกอบยังแนะนำว่าคุณจะต้องรวมที่เก็บสำหรับ Gaufrette ไว้ในbar/bar-appไฟล์ Composer ของคุณแม้ว่าจะดูเหมือนว่าไม่จำเป็นในกรณีนี้ ฉันไม่แน่ใจว่าทำไม


ฉันลองแล้วไม่ได้ผลเช่นกัน ฉันคิดว่ามันอาจเกี่ยวข้องกับนักแต่งเพลงที่ชอบ Packagist มากกว่า GitHub โดยเฉพาะ?
Maciej Sz

ไม่ฉันได้ตรวจสอบกับที่เก็บในเครื่องของฉันแล้ว - ไม่ใช่ปัญหาเฉพาะของ GitHub
Maciej Sz

ฉันค่อนข้างมั่นใจว่าจะได้ผลก่อนหน้านี้ เกิดอะไรขึ้นถ้าคุณเพิ่ม"minimum-stability": "dev"ไปยังbar/bar-appความต้องการ?
คริส

3
มันดูเหมือนว่าคุณกำลังจะต้องชัดเจนต้อง Gaufrette ที่กัญชาทั้งในห้องสมุดของคุณนั้นและใบสมัครของคุณ "หากการอ้างอิงรายการใดรายการหนึ่งของคุณมีการพึ่งพาแพ็กเกจที่ไม่เสถียรคุณจำเป็นต้องกำหนดอย่างชัดเจนด้วยเช่นกันพร้อมกับค่าสถานะความเสถียรที่เพียงพอ" โปรดทราบว่าคุณสามารถมีแพ็คเกจบางอย่างเช่น Gaufrette ที่devความเสถียรและค่าเริ่มต้นstableสำหรับทุกอย่าง
คริส

2
ดูเหมือนว่านักแต่งเพลงจะรองรับ GitHub - ฉันเพิ่งลบออก"url": "https://github.com/KnpLabs/Gaufrette.git"จากแพ็คเกจแรกและยังใช้งานได้
Maciej Sz

16

นี่คือวิธีที่คุณทำในบรรทัดคำสั่ง:

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

คุณไม่จำเป็นต้องใช้แฮชทั้งหมดแฮชเจ็ดอักขระที่ยาวดูเหมือนจะหลอกล่อ ดังที่กล่าวไว้ข้างต้นโครงการของคุณจะต้องรองรับ dev - ซึ่งจะบ่นว่าหากยังไม่ได้ตั้งค่าไว้ นอกจากนี้ใช้--with-dependenciesเพื่อรับการอ้างอิงใด ๆ ของสิ่งที่คุณกำลังอัปเดต


0

หากคุณทำการเปลี่ยนแปลงสำหรับ Git Repository โดยการฟอร์กตรวจสอบให้แน่ใจว่าคุณใช้ชื่อแพ็กเกจถูกกำหนดไว้ในไฟล์ composer.json ของแพ็คเกจเอง - แม้ว่าฉันจะแยกแพ็กเกจไปยังบัญชี joshuapaling github ของฉันเองและ ตอนนี้แพ็คเกจอยู่ที่ URL https://github.com/joshuapaling/Cake-Resque.gitซึ่งไม่ได้ส่งผลต่อชื่อแพ็กเกจเลยจากมุมมองของผู้แต่ง

ข้อผิดพลาดโง่ ๆ - แต่ฉันยังใหม่กับนักแต่งเพลงและตอนแรกก็ไม่ชัดเจน! ดังนั้นฉันหวังว่านี่จะช่วยคนอื่นที่มีปัญหาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.