গিট রেপো ক্লোন করতে পিএইচপি সুরকার ব্যবহার করুন


111

আমি গিথুব থেকে গিট রিপোজিটরি স্বয়ংক্রিয়ভাবে ক্লিগ করতে সুরকার ব্যবহার করার চেষ্টা করছি যা প্যাকেজিস্টে নেই তবে এটি কাজ করছে না এবং আমি কী ভুল করছি তা বুঝতে পারি না।

আমি মনে করি আমাকে এটিকে "সংগ্রহস্থল" এর মধ্যে অন্তর্ভুক্ত করতে হবে:

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

এবং তারপরে সম্ভবত এটি "প্রয়োজনীয়" বিভাগে তালিকাবদ্ধ করুন। এটি এই উদাহরণের সাথে সমান হওয়া উচিত তবে এটি কার্যকর হয় না। এটি কেবল এই ত্রুটি দেয়:

আপনার প্রয়োজনীয়তা ইনস্টলযোগ্য প্যাকেজগুলির সেটগুলিতে সমাধান করা যায়নি।

ইতিমধ্যে কেউ কি এরকম কিছু করার চেষ্টা করেছেন?

উত্তর:


109

২০১৩ সালে লেখার সময় এটি করার এক উপায় ছিল। সুরকার আরও ভাল পদ্ধতির জন্য সমর্থন যোগ করেছেন: @ আইগরের উত্তর দেখুন

আপনি কি কোনও রিপোজিটরি পেয়েছেন?

গিট, মার্কুরিয়াল এবং এসভিএন সুরকার দ্বারা সমর্থিত।

আপনি কি রিপোজিটরিতে অ্যাক্সেস লিখেছিলেন?

হ্যাঁ?

রিপোজিটরি একটি composer.jsonফাইল আছে

আপনার যদি কোনও সংগ্রহস্থল থাকে তবে আপনি এখানে লিখতে পারেন: একটি composer.jsonফাইল যুক্ত করুন বা বিদ্যমানটি ঠিক করুন এবং নীচের সমাধানটি ব্যবহার করবেন না।

@Igorw এর উত্তরে যান

কেবলমাত্র এটি ব্যবহার করুন যদি আপনি কোনও রিপোজিটিরি না করেন
বা যদি রিপোজিটিরি না দেয় composer.jsonএবং আপনি এটি যোগ করতে পারবেন না

এটি composer.jsonপ্যাকেজের নির্ভরতা এবং অটোলয়েডিং সহ মূল সুরক্ষকগুলি পড়তে সক্ষম হতে পারে এমন সমস্ত কিছুই ওভাররাইড করবে ।

ধরণটি ব্যবহার packageকরা আপনার উপর সবকিছু সংজ্ঞায়িত করার বোঝা স্থানান্তর করবে will সহজ উপায় হ'ল 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"
}

7
প্যাকেজ সংগ্রহস্থলের সাথে ভিসিএস সংগ্রহস্থল প্রতিস্থাপন করা একটি খারাপ ধারণা। লক্ষ্য composer.jsonরেপোতে ইতিমধ্যে একটি রয়েছে , সুতরাং একটি ভিসিএস রেপো ব্যবহার করুন। আপনার উদাহরণটি অটোলয়েডিংও ভঙ্গ করে এবং এটিকে উপেক্ষা করে branch-alias
igorw

1
@ আইগো আপনি কি দয়া করে সেই তথ্যের সাথে লিঙ্ক করতে পারেন যাতে আমি এবং অন্যান্যরা পার্থক্যটি বুঝতে পারি? ধন্যবাদ।
মাইক গ্রাফ

5
সংগ্রহস্থলের পৃষ্ঠায় ব্যাখ্যা করা হয়েছে একটি প্যাকেজ রেপোতে অবশ্যই সমস্ত তথ্য অন্তর্ভুক্ত করবে। আপনি যদি autoloadক্ষেত্রটি যোগ না করেন তবে এটি অন্তর্ভুক্ত হবে না। মূলত আপনাকে composer.jsonরেपो সংজ্ঞা থেকে সমস্ত তথ্য অনুলিপি-পেস্ট করতে হবে । ভিসিএস রেপো সরাসরি ভিসিএস থেকে সেই তথ্য নিয়ে আসে। এর উপকারিতা এলিয়াস ডক এবং আমার লেখা একটি ব্লগ পোস্টেbranch-alias ব্যাখ্যা করা হয়েছে ।
igorw

2
কেন এখনও এটি উপবিষ্টিত হচ্ছে? সুরকার ডক্স এমনকি স্পষ্টতই বলে দেয় যে প্যাকেজ সরবরাহগুলি এড়ানো উচিত। দয়া করে, খারাপ অভ্যাসগুলি উত্সাহিত করা বন্ধ করুন।
igorw

1
আপনি কি সুপারিশ করেন যে আমি তখন এটিতে পরিবর্তন করব?
মাইক গ্রাফ

146

আসলে সেই প্যাকেজটি প্যাকেজিস্টের মাধ্যমে উপলব্ধ । এই ক্ষেত্রে আপনার পছন্দসই সংগ্রহের সংজ্ঞা দরকার নেই। requireমেলা ভার্সনের সীমাবদ্ধতার সাথে আপনি কোনও (যা সর্বদা প্রয়োজন) যুক্ত করেছেন তা নিশ্চিত করুন ।

সাধারণভাবে, যদি কোনও প্যাকেজ প্যাকেজিস্টে উপলভ্য থাকে তবে ভিসিএস রেপো যুক্ত করবেন না । এটি কেবল জিনিসকে ধীর করবে।


প্যাকেজ যে packagist মাধ্যমে পাওয়া যায় না, একজন ব্যবহার VCS , (অথবা Git) সংগ্রহস্থলের হিসাবে আপনার প্রশ্নে দেখানো হয়েছে। আপনি যখন করবেন, তা নিশ্চিত করুন:

  • "সংগ্রহস্থল" ক্ষেত্রটি মূল রচনাটি কম্পোজারজেসনে নির্দিষ্ট করা হয়েছে (এটি কেবলমাত্র একটি ক্ষেত্রের ক্ষেত্র, প্রয়োজনীয় প্যাকেজগুলির সংগ্রহস্থল সংজ্ঞা উপেক্ষা করা হবে)
  • সংগ্রহস্থলের সংজ্ঞাটি একটি বৈধ ভিসিএস রেপোকে নির্দেশ করে
  • টাইপটি যদি "ভিসিএস" এর পরিবর্তে "গিট" হয় (যেমন আপনার প্রশ্নে) তবে নিশ্চিত হয়ে নিন যে এটি আসলে গিট রেপো
  • আপনার কাছে requireপ্রশ্নবিদ্ধ প্যাকেজটির জন্য একটি রয়েছে
  • requireভিসিএস রেপোর সরবরাহিত সংস্করণগুলির সাথে মেলে প্রতিবন্ধকতা । আপনি composer show <packagename>উপলব্ধ সংস্করণগুলি খুঁজে পেতে ব্যবহার করতে পারেন । এই ক্ষেত্রে ~2.3একটি ভাল বিকল্প হবে।
  • নাম requireদূরবর্তী নাম মিলে যায় composer.json। এই ক্ষেত্রে, এটি হয় gedmo/doctrine-extensions

এখানে একটি নমুনা composer.jsonযা ভিসিএস রেপোর মাধ্যমে একই প্যাকেজটি ইনস্টল করে:

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

VCS রেপো ডক্স এই সব বেশ ভাল ব্যাখ্যা।


যদি একটি Git (অথবা অন্যান্য VCS) সংগ্রহস্থলের একটি সাথে আছেন composer.jsonপাওয়া যায়, না একটি "প্যাকেজ" রেপো ব্যবহার করুন। প্যাকেজ Repos প্রদান করার প্রয়োজন সব সংজ্ঞা মেটাডেটার হবে সম্পূর্ণরূপে উপেক্ষা করা কোনো composer.jsonপ্রদত্ত Dist এবং উৎস উপস্থিত রয়েছে। তাদের অতিরিক্ত সীমাবদ্ধতাও রয়েছে যেমন বেশিরভাগ ক্ষেত্রে যথাযথ আপডেটের অনুমতি না দেওয়া।

প্যাকেজ রেপো এড়িয়ে চলুন (ডকগুলিও দেখুন )।


1
ওউ, ধন্যবাদ! আমি এটি পাইনি কারণ আমি ভেবেছিলাম এটি গিট রেপো ডক্ট্রাইন এক্সটেনশনের পরে ডাকা হবে।
মার্টিন

2
সর্বদা প্রদত্ত নামটি দেখুন composer.json
igorw

16
-1 কেন এটি সঠিক উত্তর হিসাবে চিহ্নিত হয়েছে? এটি অবশ্যই ওপি-র সমস্যার সমাধান করেছে তবে ক্যালারেন্স এবং মাইক গ্রাফ এর পিছনে আরও সাধারণ সমস্যার উত্তর দিয়েছে। এটি অত্যন্ত সম্ভাবনা নয় যে যে কেউ প্যাকেজিস্ট নন-প্রকল্পগুলি অন্তর্ভুক্ত করার জন্য কোনও উপায় অনুসন্ধান করছে তা ডক্ট্রাইন এক্সটেনশনগুলি অন্তর্ভুক্ত করতে চাইবে।
এফএফএক্সএক্স

2
@aefxx আমার উত্তর না আসলে সাধারন সাধারণ সমস্যা, যা ব্যাখ্যা requireক্ষেত্র উল্লেখ করা আবশ্যক।
igorw

6
The VCS repo docs explain all of this quite well.... কি?
hek2mgl

47

আপনি গিটার সংগ্রহশালাটি কমপোজার জেজেসনে এর মধ্যে অন্তর্ভুক্ত করতে পারেন:

"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সম্ভব হলে সমস্ত ফাইল যুক্ত করুন ।
সোভেন

@ সোভেন ... কারণ অন্যথায় নির্দিষ্ট প্রতিশ্রুতি নির্দিষ্ট করা অসম্ভব?
সিস টিমারম্যান

ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ, আমাকে ঘন্টা বাঁচিয়েছে :)
metamaker

এটি সাধারণ হিসাবে সামঞ্জস্য করা হয়েছে, তবে অন্যথায় মূলত মাইক গ্রাফের উত্তরের একটি সরল অনুলিপি, সুতরাং আমি নিশ্চিত নই যে উদাহরণ হিসাবে উদাহরণস্বরূপ কোনও নির্দিষ্ট লাইব্রেরি দেখার চেয়ে জেনারেল ভাল কিনা।
ফ্যান্টমএক্স 1

6

যদি পাওয়া যায় তবে উত্সটি ব্যবহার করতে কেবল সুরকারকে বলুন:

composer update --prefer-source

বা:

composer install --prefer-source

তারপরে আপনি প্যাকেজগুলি ক্লোরড সংগ্রহস্থল হিসাবে উত্তোলিত টার্বলগুলির পরিবর্তে পাবেন, যাতে আপনি কিছু পরিবর্তন করতে পারেন এবং সেগুলি আবার প্রতিশ্রুতিবদ্ধ করতে পারেন। অবশ্যই, ধরে নিই যে আপনার কাছে সংগ্রহস্থলটিতে লেখার / ধাক্কা দেওয়ার অনুমতি রয়েছে এবং সুরকার প্রকল্পের সংগ্রহস্থল সম্পর্কে জানেন।

দাবি অস্বীকার: আমি মনে করি আমি কিছুটা আলাদা প্রশ্নের উত্তর দিতে পারি, তবে এই প্রশ্নটি যখন খুঁজে পেল তখন আমি এটিই খুঁজছিলাম, তাই আমি আশা করি এটি অন্যদের পক্ষেও কার্যকর হবে।

যদি সুরকার জানেন না, কোথায় প্রকল্পের সংগ্রহস্থল রয়েছে, বা প্রকল্পটির যথাযথ রচয়িতা জেসসন নেই, পরিস্থিতিটি আরও কিছুটা জটিল, তবে অন্যরা ইতিমধ্যে এরকম পরিস্থিতিতে উত্তর দিয়েছেন।


3

আমি নিম্নলিখিত ত্রুটির মুখোমুখি ছিলাম: The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.

নিজের পরিবর্তন করতে আপনি যদি অন্য একটি রেপো চালাচ্ছেন তবে আপনি একটি নতুন ভাণ্ডার দিয়ে শেষ করবেন।

উদাহরণ:

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

নতুন ইউআরএলটি আপনার রচয়িতা জেসসনের আপনার ভাণ্ডার বিভাগে যেতে হবে।

মনে রাখবেন যে আপনি যদি নিজের কাঁটাচামিকে my-foo/barআপনার প্রয়োজনীয় বিভাগ হিসাবে উল্লেখ করতে চান তবে composer.jsonআপনার নতুন রেপোর অভ্যন্তরে ফাইলটির প্যাকেজটির নতুন নাম দিতে হবে ।

{
    "name":         "foo/bar",

=>

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

আপনি যদি এটির সর্বাধিক সহজ উপায়টি কল্পনা করেন তবে এটি গিথুব-এর ভিতরেই সম্পাদনা করা।


নোট করুন যে প্যাকেজের নাম কোনওভাবেই URL টি প্রতিফলিত করে না যেখানে আপনি সংগ্রহশালাটি পড়তে পারেন! দুজনের মধ্যে কোনও স্বয়ংক্রিয় লিঙ্ক নেই, উভয়ই স্বাধীনভাবে বেছে নেওয়া যেতে পারে। সুরকার সম্পর্কিত একমাত্র প্রাসঙ্গিক তথ্যটি হ'ল nameভিতরে থাকা বৈশিষ্ট্যটিতে লেখা নাম composer.json
সোভেন

2

আমার ক্ষেত্রে, আমি Symfony2.3.x ব্যবহার করি এবং সর্বনিম্ন-স্থায়িত্ব পরামিতি ডিফল্ট "স্থিতিশীল" হয় (যা ভাল)। আমি প্যাকেজিস্টে নয় একটি রেপো আমদানি করতে চেয়েছিলাম তবে একই সমস্যা ছিল "আপনার প্রয়োজনীয়তাগুলি প্যাকেজগুলির একটি ইনস্টলযোগ্য সেটটিতে সমাধান করা যায় না।" এটি উপস্থিত হয়েছিল যে আমি রেপোতে রচয়িতা কম্পোজার জসন ন্যূনতম স্থায়িত্ব "দেব" ব্যবহার আমদানির চেষ্টা করেছি।

সুতরাং এই সমস্যাটি সমাধান করতে, যাচাই করতে ভুলবেন না minimum-stability। আমি এই পোস্টে উল্লিখিত dev-masterপরিবর্তে একটি সংস্করণ প্রয়োজন দ্বারা এটি সমাধান করেছি ।master


4
আমার একই সমস্যা ছিল, যা এখানে আলোচনা করা হয়েছে । আপনার যদি স্পষ্টত রেফ থাকে (গিট কমিটের মতো), এটি প্রদর্শিত হয় আপনি এর মতো কিছু করতে পারেন "dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
ব্লেস্কোভিজ

1

আপনি যদি composer.jsonগিটহাব থেকে একটি ব্যবহার করতে চান তবে আপনি এই উদাহরণটি দেখতে পাবেন (ভিসিএস বিভাগের অধীনে)।

প্যাকেজ বিভাগটি প্যাকেজগুলির জন্য যা নেই composer.json। তবে আপনি সেই উদাহরণটি অনুসরণ করেননি বা এটিও কাজ করবে। প্যাকেজ সংগ্রহস্থল সম্পর্কে এটি যা বলে তা পড়ুন:

মূলত, আপনি একই তথ্য সংজ্ঞায়িত করেন যা সুরকার সংগ্রহশালার অন্তর্ভুক্ত packages.jsonতবে কেবলমাত্র একটি প্যাকেজের জন্য। আবার, ন্যূনতম প্রয়োজনীয় ক্ষেত্রগুলির নাম হ'ল নাম, সংস্করণ, এবং কোনও ডিস্ট বা উত্স।


0

আমি এখানে সমাধানগুলিতে উল্লিখিত সমাধানগুলিতে যোগদানের চেষ্টা করি কারণ এর তালিকার জন্য কয়েকটি গুরুত্বপূর্ণ পয়েন্ট রয়েছে।

  1. @ আইগোরউয়ের উত্তরে উল্লিখিত হিসাবে रिपোজিটরির ইউআরএলটি কমপোজার জার্সন ফাইলে নির্দিষ্ট করা ক্ষেত্রে অবশ্যই হওয়া আবশ্যক, তবে যেহেতু উভয় ক্ষেত্রেই কম্পোজার জেএসন অবশ্যই উপস্থিত থাকবে (২ য় উপায় @ মাইক গ্রাফের বিপরীতে) এটি প্যাকেজিস্টে প্রকাশ করা হয় এর চেয়ে আলাদা নয় (এছাড়াও গিথুব বর্তমানে এনপিএম প্যাকেজ হিসাবে প্যাকেজ পরিষেবাগুলি সরবরাহ করে), একবার সাইন আপ হওয়ার পরে প্যাকেজিস্ট ইন্টারফেসে আক্ষরিক URL ইনপুট করার পরিবর্তে তফাত হয়।

  2. তদুপরি, এটির একটি ঘাটতি রয়েছে যে এটি কোনও বহিরাগত গ্রন্থাগারের উপর নির্ভর করতে পারে না যা এই পদ্ধতিকে পুনরাবৃত্তির সংগ্রহ সংজ্ঞা হিসাবে রচয়িতা হিসাবে কাজ করে না বলে ব্যবহার করে। তদ্ব্যতীত, এটির কারণে এটি একটি "বাগ" বলে মনে হচ্ছে, যেহেতু পুনরুক্তিযোগ্য সংজ্ঞা নির্ভরতাতে ব্যর্থ হয়েছিল, মূলত স্পষ্টতই সংগ্রহস্থলীদের সম্মান জানানো যথেষ্ট বলে মনে হয় না তবে প্যাকেজগুলির সমস্ত নির্ভরতাও থাকতে হবে সম্মানিত করা।

সঙ্গে একটি সুরকার ফাইল (15:13 igorw এ অক্টোবর 18 '12 এর উত্তরে)

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

কোনও সুরকার ফাইল ছাড়াই (জানুয়ারী 23 '13 17:28 মাইক গ্রাফ উত্তর)

"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"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.