2012-10-18 14 views
70

क्लोन करने के लिए मैं composer उपयोग करने के लिए स्वचालित रूप से GitHub से एक Git भंडार है कि packagist में नहीं है क्लोन करने के लिए कोशिश कर रहा हूँ, लेकिन यह काम नहीं कर रहा है और मैं समझ नहीं क्या मैं गलत कर रहा हूं।उपयोग पीएचपी संगीतकार Git रेपो

मुझे लगता है कि मैं बहुत की तरह "खजाने" के बीच इसे शामिल करने के लिए है:

"repositories": [ 
    { 
     "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", 
     "type": "git" 
    } 
], 

और फिर शायद "की आवश्यकता होती है" खंड में यह सूची। यह this example के समान होना चाहिए लेकिन यह काम नहीं करता है। यह सिर्फ यह त्रुटि देता है:

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

क्या किसी ने पहले से ऐसा कुछ करने की कोशिश की है?

उत्तर

75

2013 में लिखने के समय यह ऐसा करने का एक तरीका था। संगीतकार ने बेहतर तरीकों के लिए समर्थन जोड़ा है: देखें @igorw's answer

क्या आपके पास एक रिपोजिटरी है?

गिट, मर्कुरियल, एसवीएन संगीतकार द्वारा समर्थित है।

क्या आपके पास रिपोजिटरी तक पहुंच है?

हां?

करता रिपोजिटरी एक composer.json फ़ाइल

है यदि आपके पास भंडार आप लिख सकते हैं: एक composer.json फ़ाइल जोड़ें, या मौजूदा एक का समाधान, और नीचे समाधान का उपयोग नहीं करते।

जाओ @igorw करने के answer

इसका उपयोग तभी करें यदि आप भंडार
नहीं है या है, तो संग्रह नहीं एक composer.json है और आपको उसके नहीं जोड़ सकते हैं

यह सब कुछ ओवरराइड करेगा जो संगीतकार मूल भंडार के composer.json से पढ़ने में सक्षम हो सकता है, जिसमें पैकेज की निर्भरता और ऑटोलोडिंग शामिल है।

package प्रकार का उपयोग करके आप सब कुछ सही ढंग से परिभाषित करने का बोझ स्थानांतरित कर देगा। भंडार में composer.json फ़ाइल रखने का आसान तरीका है, और बस इसका उपयोग करें।

यह समाधान वास्तव में केवल दुर्लभ मामलों के लिए है जहां आपके पास एक छोड़ा गया ज़िप डाउनलोड है जिसे आप बदल नहीं सकते हैं, या एक भंडार जिसे आप केवल पढ़ सकते हैं, लेकिन अब इसे बनाए रखा नहीं जाता है।

"repositories": [ 
    { 
     "type":"package", 
     "package": { 
      "name": "l3pp4rd/doctrine-extensions", 
      "version":"master", 
      "source": { 
       "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", 
       "type": "git", 
       "reference":"master" 
      } 
     } 
    } 
], 
"require": { 
    "l3pp4rd/doctrine-extensions": "master" 
} 
+5

एक पैकेज भंडार के साथ VCS भंडार की जगह एक बुरा विचार है। लक्ष्य रेपो में पहले से ही 'composer.json' है, इसलिए एक vcs repo का उपयोग करें। आपका उदाहरण ऑटोलोडिंग भी तोड़ता है और 'शाखा-उपनाम' को अनदेखा करता है। – igorw

+1

@igorw क्या आप कृपया उस जानकारी से लिंक कर सकते हैं ताकि मैं और अन्य अंतर को समझ सकें? धन्यवाद। –

+4

समझाया गया है [भंडार पृष्ठ पर] (http://getcomposer.org/doc/05-repositories.md#package-2) एक पैकेज रेपो में सभी जानकारी शामिल होनी चाहिए। यदि आप 'ऑटोलोड' फ़ील्ड नहीं जोड़ते हैं, तो इसे शामिल नहीं किया जाएगा।असल में आपको 'composer.json' से रेपो परिभाषा तक सभी जानकारी कॉपी-पेस्ट करने की आवश्यकता है। वीसीएस रेपो उस वीसीएस से सीधे जानकारी प्राप्त करता है। 'शाखा-alias' के लाभ में विस्तार से बताया [उपनाम डॉक] (http://getcomposer.org/doc/articles/aliases.md#branch-alias) और [एक ब्लॉग पोस्ट मैंने लिखा] (https कर रहे हैं: // igor.io/2013/01/07/composer-versioning.html)। – igorw

1

आप एक composer.json (VCS खंड के अंतर्गत) आप this example देखेंगे GitHub से उपयोग करना चाहते हैं।

पैकेज अनुभाग उन पैकेजों के लिए है जिनके पास composer.json नहीं है। हालांकि, आपने उस उदाहरण का भी पालन नहीं किया है या यह भी काम करेगा। पढ़ें क्या यह पैकेज खजाने के बारे में कहते हैं:

Basically, you define the same information that is included in the composer repository's packages.json , but only for a single package. Again, the minimum required fields are name, version, and either of dist or source.

102

कि तथ्य यह है is available through packagist में पैकेज। इस मामले में आपको कस्टम रिपोजिटरी परिभाषा की आवश्यकता नहीं है। बस यह सुनिश्चित करें कि आप एक मिलान संस्करण बाधा के साथ require (जो हमेशा आवश्यक है) जोड़ें।

सामान्य रूप से, यदि पैकेज पैकेज पर उपलब्ध है, एक वीसीएस रेपो जोड़ें। यह सिर्फ चीजों को धीमा कर देगा। के रूप में अपने प्रश्न में दिखाया गया


संकुल कि packagist के माध्यम से उपलब्ध नहीं हैं के लिए, किसी VCS (या Git) भंडार का उपयोग करें। जब आप ऐसा करेंगे, सुनिश्चित करें कि:

  • "खजाने" क्षेत्र जड़ composer.json में निर्दिष्ट किया जाता
  • खजाने परिभाषा अंक (यह एक रूट केवल क्षेत्र, आवश्यक संकुल से भंडार परिभाषाओं पर ध्यान नहीं दिया जाता है) एक वैध VCS रेपो
  • प्रकार "VCS" के बदले "Git" (अपने प्रश्न के रूप में) है, यह वास्तव में एक Git रेपो
  • है यकीन है कि आप सवाल
  • में पैकेज के लिए एक require कर
  • require में बाधा संस्करण प्रदान करता है वीसीएस रेपो द्वारा डी। आप उपलब्ध संस्करणों को खोजने के लिए composer show <packagename> का उपयोग कर सकते हैं। इस मामले में ~2.3 एक अच्छा विकल्प होगा।
  • require में नाम रिमोट composer.json में नाम से मेल खाता है। इस मामले में, यह gedmo/doctrine-extensions है।

    { 
        "repositories": [ 
         { 
          "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", 
          "type": "git" 
         } 
        ], 
        "require": { 
         "gedmo/doctrine-extensions": "~2.3" 
        } 
    } 
    

    VCS repo docs यह सब बहुत अच्छी तरह से व्याख्या करते हैं:

यहां नमूने composer.json कि एक VCS रेपो के माध्यम से एक ही पैकेज को स्थापित करता है।


अगर वहाँ एक Git (या अन्य VCS) एक एक "पैकेज" रेपो composer.json उपलब्ध, का उपयोग नहीं करते के साथ भंडार है। पैकेज रिपोज़ आपको परिभाषा में मेटाडेटा के सभी प्रदान करने की आवश्यकता है और किसी भी composer.json को प्रदत्त डिस्ट और स्रोत में पूरी तरह से अनदेखा कर देगा। उनके पास अतिरिक्त सीमाएं भी हैं, जैसे अधिकांश मामलों में उचित अपडेट की अनुमति नहीं है।

पैकेज रिपोज़ से बचें (see also the docs)।

+1

Ouu, धन्यवाद! मुझे यह नहीं मिला क्योंकि मैंने सोचा था कि इसे गिट रेपो डॉक्टरेट एक्सटेंशन के बाद बुलाया जाएगा। – martin

+1

हमेशा 'composer.json' में दिए गए नाम को देखें। – igorw

+0

धन्यवाद, अगली बार, मैं चालाक हो जाऊंगा :)। – martin

2

मेरे मामले में, मैं Symfony2.3.x का उपयोग करें और कम से कम-स्थिरता पैरामीटर डिफ़ॉल्ट रूप से "स्थिर" (जो अच्छा है) है। मैं एक रिपो आयात नहीं करना चाहता था, लेकिन एक ही मुद्दा था "आपकी आवश्यकताओं को संकुल के एक स्थापित सेट में हल नहीं किया जा सका"। ऐसा प्रतीत होता है कि रेपो में composer.json मैंने न्यूनतम-स्थिरता "देव" का उपयोग करने की कोशिश की।

इसलिए इस समस्या को हल करने के लिए, minimum-stability सत्यापित करने के लिए मत भूलना। मैंने इस post में बताए गए अनुसार master के बजाय dev-master संस्करण की आवश्यकता के द्वारा इसे हल किया।

+2

मैं एक ही मुद्दा है, जो [यहां] चर्चा की है था (https://getcomposer.org/doc/04-schema.md#package-links)। आप एक स्पष्ट रेफरी है (एक Git तरह प्रतिबद्ध), यह आप '" देव-गुरु # 4536bbc166ada96ff2a3a5a4b6e636b093103f0e "' की तरह कुछ कर सकते हैं प्रकट होता है। – Blaskovicz

31

आप इस तरह composer.json को Git भंडार में शामिल कर सकते हैं:

"repositories": [ 
{ 
    "type": "package", 
    "package": { 
     "name": "example-package-name", //give package name to anything, must be unique 
     "version": "1.0", 
     "source": { 
      "url": "https://github.com/example-package-name.git", //git url 
      "type": "git", 
      "reference": "master" //git branch-name 
     } 
    } 
}], 
"require" : { 
    "example-package-name": "1.0" 
} 
+1

जैसा कि ऊपर अन्य उत्तर में बताया गया है: यदि आप एक भंडार है, तो यदि सभी संभव पर एक 'composer.json' फ़ाइल जोड़ें। – Sven

+0

@ सेवन ... क्योंकि अन्यथा एक विशिष्ट प्रतिबद्धता निर्दिष्ट करना असंभव है? –

+0

साझा करने के लिए धन्यवाद, मुझे घंटे बचाएं :) – metamaker

2

मैं निम्नलिखित त्रुटि का सामना कर रहा था: The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.

आप एक और रेपो अपने स्वयं के परिवर्तन आप खत्म हो जाएगा बनाने के लिए forking रहे हैं एक नई भंडार के साथ।

उदा:

https://github.com/foo/bar.git 
=> 
https://github.com/my-foo/bar.git 

नया यूआरएल अपने composer.json के अपने खजाने अनुभाग में जाने के लिए की आवश्यकता होगी।

याद रखें अगर आप अपने की आवश्यकता होती है अनुभाग में my-foo/bar के रूप में अपने कांटा का उल्लेख करना चाहते हैं, आप अपने नए रेपो के अंदर composer.json फ़ाइल में पैकेज का नाम बदलने का होगा।

{ 
    "name":   "foo/bar", 

=> 

{ 
    "name":   "my-foo/bar", 

यदि आपने अभी ऐसा करने का सबसे आसान तरीका फोर्क किया है तो इसे गिटूब के अंदर संपादित करें। ,

composer install --prefer-source 

तो फिर तुम निकाले tarballs के बजाय क्लोन खजाने के रूप में संकुल मिल जाएगा ताकि आप कुछ बदलाव करने और प्रतिबद्ध कर सकते हैं:

composer update --prefer-source 

या:

+0

ध्यान दें कि पैकेज नाम किसी भी तरह से यूआरएल को प्रतिबिंबित नहीं करता है जहां से आप भंडार पढ़ सकते हैं! दोनों के बीच कोई स्वचालित लिंक नहीं है, दोनों स्वतंत्र रूप से चुने जा सकते हैं। संगीतकार के बारे में एकमात्र प्रासंगिक जानकारी 'composer.json' के अंदर' नाम 'विशेषता में लिखी गई नाम है। – Sven

1

बस यदि उपलब्ध हो स्रोत का उपयोग करने संगीतकार बता उन्हें वापस। बेशक, यह मानते हुए कि आपके पास रिपोजिटरी और संगीतकार को लिखने/पुश अनुमतियां हैं, प्रोजेक्ट की रिपॉजिटरी के बारे में जानती हैं।

अस्वीकरण: मुझे लगता है मैं थोड़ा अलग सवाल का जवाब दे सकता है, लेकिन यह मैं जब मैं इस सवाल पाया के लिए की तलाश थी, इसलिए मुझे आशा है कि यह रूप में अच्छी तरह दूसरों के लिए उपयोगी हो जाएगा।

यदि संगीतकार नहीं जानता है, जहां प्रोजेक्ट का भंडार है, या परियोजना में उचित संगीतकार नहीं है, तो स्थिति थोड़ा और जटिल है, लेकिन अन्य ने पहले से ही ऐसे परिदृश्यों का उत्तर दिया है।

संबंधित मुद्दे