হেভিওয়েট কর্পোরেট কমস, কনফিগারেশন পরিচালনা এবং পরীক্ষার প্রয়োজনীয়তার সাথে মার্কুরিয়াল রিপোজিটরি কাঠামো


16

আমি বিতরণিত সংস্করণ নিয়ন্ত্রণের টাওতে নিজেকে পুনরায় শিক্ষিত করার জন্য লড়াই করা আমি এখনও অন্য সাবভার্সন ব্যবহারকারী।

সাবভারশনটি ব্যবহার করার সময়, আমি প্রকল্প-গৌণ পদ্ধতির একটি বড় অনুরাগী ছিলাম এবং আমার বেশিরভাগ প্রাক্তন নিয়োগকর্তার সাথে আমরা আমাদের ভাণ্ডার শাখাগুলি গঠন করতাম; ট্যাগ এবং ট্রাঙ্ক নীচে:

branches-+
         +-personal-+
         |          +-alice-+
         |          |       +-shinyNewFeature
         |          |       +-AUTOMATED-+
         |          |                   +-shinyNewFeature
         |          +-bob-+
         |                +-AUTOMATED-+
         |                            +-bespokeCustomerProject
         +-project-+
                   +-shinyNewFeature
                   +-fixStinkyBug
tags-+
     +-m20110401_releaseCandidate_0_1
     +-m20110505_release_0_1
     +-m20110602_milestone
trunk

প্রকৃত উত্স গাছের মধ্যেই আমরা নিম্নলিখিত কাঠামোটি ব্যবহার করব (এর মতো কিছু):

  (src)-+
        +-developmentAutomation-+
        |                       +-testAutomation
        |                       +-deploymentAutomation
        |                       +-docGeneration
        |                       +-staticAnalysis
        |                       +-systemTest
        |                       +-performanceMeasurement
        |                       +-configurationManagement
        |                       +-utilities
        +-libraries-+
        |           +-log-+
        |           |     +-build
        |           |     +-doc
        |           |     +-test
        |           +-statistics-+
        |           |            +-build
        |           |            +-doc
        |           |            +-test
        |           +-charting-+
        |           |          +-build
        |           |          +-doc
        |           |          +-test
        |           +-distributedComputing-+
        |           |                      +-build
        |           |                      +-doc
        |           |                      +-test
        |           +-widgets-+
        |                     +-build
        |                     +-doc
        |                     +-test
        +-productLines-+
        |              +-flagshipProduct-+
        |              |                 +-coolFeature
        |              |                 +-anotherCoolFeature
        |              |                 +-build
        |              |                 +-doc
        |              |                 +-test
        |              +-coolNewProduct
        +-project-+
                  +-bigImportantCustomer-+
                  |                      +-bespokeProjectOne
                  |                      +-bespokeProjectTwo
                  +-anotherImportantCustomer-+
                                             +-anotherBespokeProject

ইঞ্জিনিয়ারিং দলের মধ্যে কাঠামো যোগাযোগের ক্ষেত্রে সাহায্যের জন্য সংগ্রহস্থলের কাঠামোটি ব্যবহার করার (এবং এখনও রয়েছে) ধারণাটি ছিল; ব্যবসায়ের গ্রাহক-মুখোমুখি অংশ এবং অন্যান্য বিভিন্ন স্টেকহোল্ডার এবং ডোমেন বিশেষজ্ঞ

বুদ্ধিমান হতে: উত্স নথি যা "প্রকল্প" ডিরেক্টরিগুলির মধ্যে একটিতে বসে থাকে কেবল একবার একবার ব্যবহার হয়ে যায় (এবং অর্থ উপার্জন করে)। "প্রোডাক্টলাইনস" ডিরেক্টরিগুলির মধ্যে যে কোনও একটি দস্তাবেজগুলি সেই নির্দিষ্ট লাইন থেকে পণ্য বিক্রি হওয়ার পরে বহুগুণ অর্থ উপার্জন করে। "লাইব্রেরি" ডিরেক্টরিগুলির মধ্যে যে কোনও একটি দস্তাবেজগুলি যে সমস্ত পণ্য ব্যবহার করে সেগুলি বিক্রি হয়ে যায় তার থেকে বহুগুণ বেশি অর্থ উপার্জন করে।

এটি ব্যয়গুলির সূক্ষ্মকরণের ধারণাটি সুস্পষ্ট করে তোলে এবং ব্যবসায়ের পুরো উত্স নথির পুনরায় ব্যবহারের জন্য সমর্থন তৈরি করতে সহায়তা করে build

এর অর্থ হ'ল এখানে একটি সাধারণ কাঠামো রয়েছে যার উপরে আমাদের বিল্ড অটোমেশন সরঞ্জামগুলি পরিচালনা করতে পারে। (আমাদের বিল্ড স্ক্রিপ্টগুলি "বিল্ড" ফোল্ডারগুলির সন্ধানকারী উত্স গাছের পথে হাঁটে যার মধ্যে তারা কনফিগারেশন ফাইলগুলি সন্ধান করে যা প্রতিটি উপাদান কীভাবে তৈরি করা যায় তা উল্লেখ করে; ডকুমেন্টেশন জেনারেশন এবং পরীক্ষার জন্য অনুরূপ প্রক্রিয়া ঘটে)।

তাত্পর্যপূর্ণভাবে, আমি যে পণ্যগুলিতে আমি কাজ করি সেগুলি কার্য সম্পাদন পরিমাপ এবং বৈশিষ্ট্য পরীক্ষা চালাতে দীর্ঘ সময় নেয়; 20 থেকে 200 ঘন্টা পর্যন্ত; প্রক্রিয়াজাত পরীক্ষার ফলাফল / ইন্টারমিডিয়েট ডেটা (যা অবশ্যই নির্দিষ্ট সিস্টেমের কনফিগারেশনের সাথে সঞ্চয় করতে হবে এবং বেঁধে রাখতে হবে তাই সময়ের সাথে সাথে পারফরম্যান্সের উন্নতি পরিমাপ করা যেতে পারে) থেকে বেশ কয়েকটি জিবি-র মধ্যে কোথাও উত্পাদন করা। এই সমস্যাটি কনফিগারেশন পরিচালনকে একটি গুরুত্বপূর্ণ বিবেচনা করে তোলে এবং কেন্দ্রীয়ীকরণের জন্য কিছু প্রয়োজনীয়তা আরোপ করে, সাধারণত পারফরম্যান্স পরিমাপ এবং চরিত্রায়ন পরীক্ষা চালানোর জন্য প্রয়োজনীয় গণ্য সংস্থানগুলি সীমিত; (64-128 কোরের একটি ছোট ক্লাস্টার)।

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

এখন, এখানে আমার প্রশ্ন: আমি কীভাবে উপরের সমস্তগুলি (এবং সম্ভব হলে এটির উন্নতি), মুরচুরিয়ালের সাথে প্রতিলিপি করতে পারি।

--edit:

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


1
কি দারুন. এর একটি ভাল উত্তর আমার মনে হয় একটি দীর্ঘ প্রবন্ধ হতে চলেছে।
এড জেমস

আমি মনে করি মূল প্রশ্নটি কীভাবে এবং কোথায় কোড সংহত হয়ে চলেছে সম্ভবত এটি সর্বনিম্ন প্রতিরোধের পথটি সংজ্ঞায়িত করবে। সুতরাং, কোডটি কীভাবে একীভূত হয়?
ওয়াইয়াট বার্নেট 18

সাধারণত, কোনও ব্যক্তিগত শাখা থেকে কোনও প্রকল্প বা বৈশিষ্ট্য শাখায় এবং পরে ট্রাঙ্কে মার্জ হতে পারে। আমি একত্রীকরণের সাথে খুব বেশি অসুবিধাগুলি কখনও অনুভব করি না (আমরা উইন 32-তে টর্টোজাইএসভিএন ব্যবহার করছিলাম), যদিও আমরা কখনও ট্রাঙ্কে একীকরণ না করে খুব বেশি দীর্ঘ (বেশিরভাগ ক্ষেত্রে একটি পুনরাবৃত্তি) দৌড়ে যাই না। আমরা আমাদের বেশিরভাগ কাজ ট্রাঙ্কে করে যাই হোক না কেন, লক্ষ্য ছিল উন্নয়ন কর্ম প্রবাহের চেয়ে ম্যান-ম্যানেজমেন্টকে সহজতর করা। (একটি ডেভ-লিড, অনেক স্বতন্ত্রভাবে বিকাশকারী বিকাশকারী, তাই ট্রাঙ্কে সমস্ত কিছু থাকায় ডেভ-লিডে কী ঘটেছিল তা ট্র্যাক করে রাখা আরও সহজ করে দিয়েছিল))
উইলিয়াম পায়েেন

একটি মূল বিষয়টি ছিল সিআই সিস্টেম দ্বারা পরিচালিত পরীক্ষার উপর বিশেষ করে সিস্টেম-পরীক্ষা পর্যায়ে একটি ভারী নির্ভরতা। এটি এই আত্মবিশ্বাস তৈরি করতে সহায়তা করেছিল যে বিভিন্ন বিকাশকারী একে অপরের সাথে হস্তক্ষেপ করছে না, এবং বহু-ছোট-পুনরাবৃত্তি মানসিকতা প্রচার করে। (এছাড়াও, সিস্টেম পরীক্ষা চালানোর জন্য প্রয়োজনীয় গণ্য ভারী-উত্তোলনের অর্থ হ'ল লোকেরা ট্রাঙ্কে প্রধানত কাজ করলে গণ্য সংস্থার জন্য কম বিতর্ক ছিল))
উইলিয়াম পায়েেন

উত্তর:


10

স্পাইকের উত্তরটি দুর্দান্ত, তবে কয়েকটি জিনিস রয়েছে যা আমি মনে করি এটি যুক্ত করা উপযুক্ত হবে যা মন্তব্যগুলির জন্য খুব বড়।

শাখা সংস্থা

মার্চুরিয়ালের সাহায্যে আপনি আপনার প্রথম সাংগঠনিক চার্টটি পুরো আনন্দের সাথে উপেক্ষা করতে পারেন। স্পোক যেমন বলেছিলেন, প্রতিটি সংগ্রহস্থলের নিজস্ব নিজস্ব ট্যাগ, শাখা (নামযুক্ত এবং নামবিহীন) রয়েছে এবং ব্যবসায়ের প্রয়োজন অনুযায়ী এটি সংগঠিত করা যেতে পারে।

যদি গ্রন্থাগারের bespokeProjectTwoকোনও বিশেষ সংস্করণ প্রয়োজন হয় chartingতবে আপনি শাখা করবেন charting, নতুন সুবিধাগুলি যুক্ত করুন এবং এটি ব্যবহার করুন bespokeProjectTwo। নতুন সুবিধাগুলি (এবং তাদের বাগগুলি) অন্যান্য প্রকল্পগুলি ব্যবহার করবে না যা মানক chartingগ্রন্থাগারটি উল্লেখ করবে । যদি প্রধান chartingলাইব্রেরিতে বাগগুলি স্থির থাকে তবে আপনি সেই পরিবর্তনগুলি শাখায় একীভূত করতে পারেন। অন্যান্য প্রকল্পগুলিতেও যদি এই সুবিধার দরকার হয় তবে আপনি সেই প্রকল্পগুলি বিশেষ শাখা ব্যবহার করতে পারেন , বা শাখাটি প্রধান লাইনটিতে একীভূত করতে এবং শাখাটি বন্ধ করতে পারেন।

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

ডিরেক্টরি সংস্থা

কোনও কারণ নেই যে আপনি নিজের উত্স ডিরেক্টরিটি ঠিক যেমন মার্চুয়ালিয়ালের মতো রাখতে পারবেন না। পার্থক্যটি কেবল হ'ল সাবভার্সনের সাথে আপনার একক একক একক (src)সংগ্রহস্থল রয়েছে, তবে মার্চুরিয়ালের সাথে আপনি ভাণ্ডারগুলিতে বিভক্ত হওয়া ভাল which আপনার উত্স গাছের কাঠামো থেকে, আমি সম্ভবত নিম্নলিখিত সংগ্রহগুলি পৃথক সংগ্রহস্থল হিসাবে বের করতে চাই:

src-+
      +-(developmentAutomation)
      +-libraries-+
      |           +-(log)
      |           +-(statistics)
      |           +-(charting)
      |           +-(distributedComputing)
      |           +-(widgets)
      +-productLines-+
      |              +-(flagshipProduct)
      |              +-(coolNewProduct)
      +-project-+
                +-bigImportantCustomer-+
                |                      +-(bespokeProjectOne)
                |                      +-(bespokeProjectTwo)
                +-anotherImportantCustomer-+
                                           +-(anotherBespokeProject)

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

কর্মধারা

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

পূর্বের মতো, বিকাশকারী আশীর্বাদী রেপো থেকে টানেন এবং স্থানীয়ভাবে কাজ করেন, তবে কাজটি শেষ হয়ে গেলে তারা আবার আশীর্বাদী রেপো থেকে টানতে থাকে এবং অবিরাম রেপোতে চাপ দেওয়ার আগে নিজেকে একীভূত করে। অপ্রয়োজনীয় রেপোতে যে কোনও পরিবর্তন হয় তারপরে পর্যালোচনা করা হয় (ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে) এবং অনুমোদিত হলে কেবল আশীর্বাদী রেপোতে স্থানান্তরিত হয়।

এর অর্থ হ'ল ইন্টিগ্রেটার কেবল পরিবর্তনটি গ্রহণ বা প্রত্যাখ্যান করেছে, মার্জ করবেন না do আমার অভিজ্ঞতায় এটি ডেভেলপার যিনি কোড লিখেছেন তাদের পক্ষে এটি অন্য কারওর চেয়ে মজবুত করার জন্য প্রায় সবসময়ই ভাল।

মার্উরিয়াল বইয়ের পরামর্শ অনুসারে, এই পদ্ধতিটি স্বয়ংক্রিয় করতে হুক ব্যবহার করা যেতে পারে:

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

অন্যান্য ব্যাপার

বড় পরীক্ষার ডেটাসেটগুলির সমস্যাটি সেই পরীক্ষার ডেটাটিকে একটি পার্কিয়াল সাব-রিপোজিটরিতে রাখার মাধ্যমেও সমাধান করা যেতে পারে । এটি পরীক্ষার ডেটাটি পুনর্বিবেচনার নিয়ন্ত্রণে রাখার সময় পরীক্ষার ডেটা দিয়ে সজ্জিত হওয়া রোধ করবে।


আবারও একটি দুর্দান্ত এবং তথ্যমূলক উত্তর। ধন্যবাদ.
উইলিয়াম পায়েেন

আরই: শাখা সংস্থা। আমি সম্মত হই যে প্রথম সাংগঠনিক চার্টটি আনন্দের সাথে উপেক্ষা করা যেতে পারে। এটি কার্যত প্রবাহকে বিশেষভাবে, যাইহোক, ভালভাবে যোগাযোগ করে না এবং তাই কনভেনশনকে চাঙ্গা করার বাইরে কোনও বাস্তব উপযোগিতা সরবরাহ করে না। আমি এটিকে প্রতিস্থাপন করতে চাই, তবে এমন কিছু দিয়ে যা দৃ a়ভাবে একটি (সহজ-সম্ভাব্য) ওয়ার্কফ্লোতে যোগাযোগ করে এবং ঘন ঘন কমিটিকে উত্সাহ দেয়। সম্ভবত প্রধান "ট্রাঙ্ক / বিকাশ" শাখাকে "দৈনিক" বললে কি তা ঘটবে?
উইলিয়াম পায়েেন

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

পুনরায়: কর্মপ্রবাহ আমি মনে করি যে সবচেয়ে সহজ ওয়ার্কফ্লো হ'ল "দৈনিক" সংগ্রহস্থলটি থেকে স্থানীয়ভাবে কাজ করা, তারপরে (ঘন ঘন) সিআই সিস্টেমের মাধ্যমে স্থির বিশ্লেষণ, ধূমপান পরীক্ষা ও রিগ্রেশন পরীক্ষা বন্ধ করে "দৈনিক" সংগ্রহস্থলের দিকে ফিরে যান। মূল রেপো "ভাঙ্গা" হওয়ার জন্য আমি খুশি, যতক্ষণ না আমি এটি সম্পর্কে জানি এবং যতক্ষণ না এটি দ্রুত আবার ঠিক হয়ে যায়। আসলে, আমি থেকে "দৈনন্দিন" রেপো সংগঠনের উপার্জন বিবেচনা করছি শুধুমাত্র উপায় যে এক কম্পাইল & নির্মাণ করতে পারেন, ঘন করে ও ভাল পরীক্ষা কভারেজ উৎসাহিত করার জন্য। (বিচ্ছিন্নভাবে কাজ করার ক্ষমতার চেয়ে অনেক বেশি গুরুত্বপূর্ণ, আইএমএইচও)।
উইলিয়াম পায়েেন

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

9

ঠিক আছে, সহজ উত্তর দেওয়ার চেষ্টা করছি।

তুমি কি জানতে চাও

প্রথম জিনিসটি আপনার জানা দরকার: মার্চুরিয়াল সংস্করণ নিয়ন্ত্রণ বিতরণ করা হয় এবং এর কয়েকটি বৈশিষ্ট্য রয়েছে যা নীচে তালিকাভুক্ত হওয়া উচিত।

  • উত্সটি একটি সংগ্রহস্থল থেকে আসে, যেখানে সেই সংগ্রহস্থলটি ক্লোন করা যায়। সমস্ত ক্লোন করা সংগ্রহস্থলগুলি সিঙ্কিংয়ের মাধ্যমে একে অপরের সাথে কোড ভাগ করতে পারে (টানুন এবং পুশ কমান্ড সহ, যা অ্যাক্সেস সীমাবদ্ধ হতে পারে)।
  • কোডটির অনুলিপি থাকা প্রত্যেক ব্যবহারকারীর কাছে ভান্ডারটির ক্লোন রয়েছে। তারা শাখা করতে চাইলে তারা তাদের স্থানীয় ক্লোনটিতে এটি করতে পারে। এর অর্থ প্রতিটি ব্যবহারকারীকে কীভাবে শাখা করা উচিত তা আপনার সংগঠিত করার দরকার নেই। তারা নিজেরাই এটি করতে পারে।
  • ট্যাগগুলি একটি প্রতিশ্রুতি দ্বারা মার্চিয়াল তৈরি করা হয় (যা গিটের হার্ড ট্যাগগুলির সমান)। এর অর্থ ট্যাগগুলির জন্য আপনার সংগ্রহস্থল কাঠামোর ভিতরে কোনও ডিরেক্টরি দরকার নেই।
  • ডিভিসিএসে লোকেরা যে মডেলটির সাথে কাজ করে (যা গিথুব এবং বিটবাকেটে নিযুক্ত) এটি আধা-কেন্দ্রীভূত করতে হয়।

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

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

প্রতি-প্রকল্পের সেটআপ

সুতরাং সাধারণ সেটআপটি হ'ল প্রতিটি প্রকল্পের জন্য নিম্নলিখিতগুলি থাকে:

  • ইন্ডিগ্রেটারের জন্য দায়বদ্ধ এমন একটি সর্বজনীন পঠনযোগ্য রিপোজিটরি। এটি "ধন্য"।

    অর্থাৎ সমস্ত ব্যবহারকারীর সামগ্রী টানা / আনতে পারে তবে এটিকে ধাক্কা দেওয়ার কোনও অ্যাক্সেস নেই।

  • প্রতিটি ব্যবহারকারীর নিজস্ব সংগ্রহস্থলের নিজস্ব পাবলিক ক্লোন থাকতে পারে।

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

  • প্রতিটি ব্যবহারকারীর নিজস্ব সংগ্রহস্থলের ব্যক্তিগত ক্লোন থাকতে পারে।

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

উত্স কোড সংস্থা

প্রকল্পের উত্স নিজেই কীভাবে সাজানো যায় তা আপনাকে ভাবতে হবে। যদি কোনও শৈল্পিক উত্স নিয়ন্ত্রিত করা প্রয়োজন তবে এটি উত্স নিয়ন্ত্রণে রাখুন। ব্যক্তিগতভাবে আমি বাইনারি বা লগ ফাইলগুলির মতো বিল্ড বা রানটাইম দ্বারা তৈরি (এই ধরণের শিল্পগুলিতে সংযুক্তির ঝুঁকির উচ্চ ঝুঁকির কারণে) তৈরি করা শিল্পকর্মগুলি যাচাই করার ধারণাটি পছন্দ করি না।

আপনি ততক্ষণ কনফিগারেশন পরীক্ষা করতে পারেন, যতক্ষণ না তারা বিকাশকারীদের পক্ষে যাওয়া সহজ করে তোলে এবং রিলিজ বা লাইভ / প্রোডাকশন পরিবেশের জন্য কনফিগারেশন না জড়িত না (যেমন অ্যাপ্লিকেশন / ওয়েব সার্ভার সেটিংস)। এটি ধারণার দিকে পরিচালিত করে যে আপনার যদি কনফিগারেশনটি গুরুতরভাবে হয় তবে বিকাশকারীদের কোডটি চেক আউট করার পাঁচ মিনিটের মধ্যেই শুরু করতে বাধা দেয় তবে তার পুনঃসংশোধন করা দরকার। আর একটি প্রয়োজনীয়তা হ'ল বিকাশকারীদের মুক্তির বা লাইভ / উত্পাদনের পরিবেশকে গোলমাল করা শক্ত হওয়া উচিত।

আপনি উল্লেখ করেছেন যে আপনার কাছে পরীক্ষার ডেটা রয়েছে যা কোডের কিছু সংস্করণে আবদ্ধ হওয়া দরকার। এখন এটি কিছুটা জটিল কারণ ডিভিসিএস-সিস্টেম যেমন মার্চুরিয়াল এবং গিটের ধীরে ধীরে ঝোঁক হওয়ার প্রবণতা রয়েছে যখন আপনি প্রচুর ডেটা পরীক্ষা করেন। আমার অভিজ্ঞতায় এটি 5 গিগাবাইট বাইনারি ফাইলের পরে সত্যিই অসহনীয় হয়ে যায় (আপনার মাইলেজ বিভিন্ন রকম হতে পারে, সুতরাং এটি আপনার জন্য কীভাবে কার্যকর হয় তা পরীক্ষা করা উচিত)। তবে আমি আপনাকে সুপারিশ করব যে আপনি উত্পন্ন ডেটাটিকে তার নিজস্ব ভান্ডারে রাখুন এবং তাদের পরীক্ষা করে পরীক্ষা করার সময় আপনার টেস্ট সিস্টেমটি যথাযথভাবে ট্যাগ করুন (এবং / অথবা একই মেটা ডেটা উদ্দেশ্যে টেক্সট ফাইল তৈরি করুন)।

আমি এই সব ইন্দ্রিয় তোলে আশা করি। আমি কিছু বিশদ মিস করলে বা যদি আরও কিছু ব্যাখ্যা করার প্রয়োজন হয় তবে নীচে মন্তব্য করুন এবং আমি সম্পাদনা করার চেষ্টা করব।


বেশ কয়েকটি দরকারী পয়েন্ট সহ খুব সুন্দর প্রতিক্রিয়ার জন্য +1। আপনার উত্তরের প্রথম বিভাগের প্রতিক্রিয়া হিসাবে, আমি প্রতিটি ব্যবহারকারীর নিজস্ব পাবলিক ভান্ডার থাকার তাৎপর্যটি উপলব্ধি করতে পারি নি। পিয়ার-টু-পিয়ার ওয়ার্কফ্লোগুলি কীভাবে সংগঠিত করা যেতে পারে সে সম্পর্কে আমার আরও চিন্তা করা প্রয়োজন।
উইলিয়াম পায়েেন

আপনার উত্তরের দ্বিতীয় বিভাগের প্রতিক্রিয়া হিসাবে, পুরো সংস্থার জন্য একটি একক ভান্ডার থাকার পুরো বিষয়টি (আমার মনে) কীভাবে কাজটি কাঠামোগত করা যায় তার জন্য একটি ভাগ করা মানসিক চিত্র তৈরি করা এবং যে উপাদানগুলি সম্ভব তা খুঁজে পাওয়া সহজ করে তোলে পুনরায় ব্যবহার করা। (বাজারের চেয়ে ক্যাথেড্রাল খুব বেশি, তবে এটি যে পরিবেশে আমি কাজ করি)। আমি সত্যিই জানতে চাই কীভাবে একটি ডিসিভিএস দিয়ে কাঠামোগত সংস্থার (ফাইলিং সিস্টেম) একই ধারণাটি অর্জন করতে পারি।
উইলিয়াম পায়েেন

আপনার উত্তরের তৃতীয় বিভাগের জবাবে: আমি আন্তরিকভাবে সম্মত হই যে উত্স নিয়ন্ত্রণ ব্যবস্থা উত্স নথিগুলির জন্য, এবং প্রাপ্ত প্রাপ্ত শিল্পগুলি সেখানে অন্তর্ভুক্ত নয় there আমি এটিও সম্মত করি যে ভিসিএসে কোনও বর্ণনার বৃহত বাইনারি সংরক্ষণ করা অবৈধ। তবে আমি বিশ্বাস করি যে আপনি একটি নির্ধারিত নাম সহ কোনও সম্মতিযুক্ত নেটওয়ার্কের স্থানে বড় বাইনারি সঞ্চয় করতে পারেন এবং ভিসিএসের মধ্যে থেকে সেগুলি উল্লেখ করতে পারেন। উদাহরণস্বরূপ, বিল্ড এনভায়রনমেন্ট (গুলি) নামক ভিএম ডিস্ক চিত্র হিসাবে সংরক্ষণ করা যেতে পারে এবং বিভিন্ন বিল্ড স্ক্রিপ্ট থেকে রেফারেন্স করা যায়। (যেমন: আমাকে build_env_A এ তৈরি করুন)। একই তথ্য পরীক্ষার ডেটা ধরে রাখে।
উইলিয়াম পায়েেন

অতীতে, আমি একটি নেটওয়ার্ক ড্রাইভে ডিরেক্টরিগুলির একটি হায়ারার্কি ব্যবহার করেছি, যেখানে ডিরেক্টরিগুলির নামগুলি মধ্যবর্তী ফাইলগুলি পরীক্ষা করতে এবং পরীক্ষার ফলাফলগুলিকে নির্দিষ্ট সংশোধন করার জন্য শাখার অবস্থানের বিবর্তন সংশোধন নম্বর + হ্যাশ থেকে প্রাপ্ত। এর অর্থ হ'ল সংস্করণ নিয়ন্ত্রণে উত্পন্ন ফাইলগুলি সংরক্ষণ করার প্রয়োজন ছাড়াই আমাদের সন্ধানের ক্ষমতা রয়েছে।
উইলিয়াম পায়েেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.