হার্ড উইনড অভিজ্ঞতা আমাকে শিখিয়েছে যে প্রায় সবকিছুই সোর্স নিয়ন্ত্রণে থাকে। (এখানে আমার মন্তব্যগুলি মালিকানাধীন মালিকানাধীন হার্ডওয়্যারে এম্বেড / টেলিকম সিস্টেমের জন্য প্রায় দেড় দশক বিকাশযুক্ত, এবং সরঞ্জামগুলি কখনও কখনও খুঁজে পাওয়া শক্ত নয়))
এখানে কিছু উত্তর বলে যে "বাইনারি উত্স নিয়ন্ত্রণে রাখবেন না"। ওইটা ভুল. যখন আপনি প্রচুর তৃতীয় পক্ষের কোড এবং বিক্রেতাদের কাছ থেকে প্রচুর বাইনারি লাইব্রেরি সহ একটি পণ্য নিয়ে কাজ করছেন, আপনি বাইনারি লাইব্রেরিগুলি পরীক্ষা করে দেখুন । কারণ, আপনি যদি তা না করেন তবে এক পর্যায়ে আপনি আপগ্রেড করতে যাচ্ছেন এবং আপনি সমস্যার মধ্যে পড়ে যাবেন: বিল্ড ব্রেকগুলি কারণ বিল্ড মেশিনটির সর্বশেষ সংস্করণ নেই; কেউ নতুন লোকটিকে ইনস্টল করার জন্য পুরানো সিডি দেয়; প্রকল্প উইকিতে কোন সংস্করণ ইনস্টল করতে হবে সে সম্পর্কে বাসি নির্দেশনা রয়েছে; ইত্যাদি আরও খারাপ বিষয়, যদি কোনও নির্দিষ্ট সমস্যা সমাধানের জন্য আপনার যদি বিক্রেতার সাথে ঘনিষ্ঠভাবে কাজ করতে হয় এবং তারা আপনাকে একটি সপ্তাহে পাঁচটি পাঠাগার পাঠায়, আপনাকে অবশ্যইকোন বাইনারিগুলির সেটটি কোন আচরণ প্রদর্শন করেছে তা ট্র্যাক করতে সক্ষম হোন। উত্স নিয়ন্ত্রণ ব্যবস্থা এমন একটি সরঞ্জাম যা ঠিক সেই সমস্যাটি সমাধান করে।
এখানে কয়েকটি উত্তর বলে যে "টুলচেইন উত্স নিয়ন্ত্রণে রাখবেন না"। আমি এটি ভুল বলব না, তবে যদি আপনি এটির জন্য রক সলিড কনফিগারেশন ম্যানেজমেন্ট (সিএম) সিস্টেম না করেন তবে টুলচেনটিকে উত্স নিয়ন্ত্রণে রাখা ভাল । আবার উপরে বর্ণিত হিসাবে আপগ্রেডের বিষয়টি বিবেচনা করুন। তবুও খারাপ বিষয়, আমি এমন একটি প্রকল্পে কাজ করেছি যেখানে আমি যখন ভাড়া নিলাম তখন চারদিকে আলাদা আলাদা আলাদা আলাদা স্বাদে ভেসে বেড়ানো ছিল them এগুলি সবই সক্রিয় ব্যবহারে ! প্রথম কাজগুলির মধ্যে একটি (আমি কাজ করার জন্য একটি বিল্ড পাওয়ার ব্যবস্থা করার পরে )টিকে সরঞ্জামচেইনকে উত্স নিয়ন্ত্রণে রাখা হয়েছিল। (একটি শক্তিশালী সিএম সিস্টেমের ধারণা আশার বাইরে ছিল))
এবং যখন বিভিন্ন প্রকল্পে বিভিন্ন সরঞ্জামচেনের প্রয়োজন হয় তখন কী ঘটে? দৃষ্টিতে কেস: কয়েক বছর পরে, প্রকল্পগুলির মধ্যে একটি বিক্রেতার কাছ থেকে একটি আপগ্রেড পেয়েছিল এবং সমস্ত মেকফিলস ভেঙে যায় broke দেখা যাচ্ছে যে তারা জিএনইউ মেকের একটি নতুন সংস্করণে নির্ভর করে। সুতরাং আমরা সবাই আপগ্রেড করেছি। উফফফ, অন্য প্রকল্পের মেকফিলস সব ভেঙে গেছে। পাঠ: জিএনইউ তৈরির উভয় সংস্করণ প্রতিশ্রুতিবদ্ধ করুন এবং আপনার প্রকল্প চেকআউট সহ যে সংস্করণটি আসবে তা চালান।
বা, আপনি যদি এমন জায়গায় কাজ করেন যেখানে অন্য কিছুগুলি নিয়ন্ত্রণের বাইরে চলে যায়, আপনার মত কথোপকথন রয়েছে, "আরে, নতুন লোকটি আজ শুরু হচ্ছে, কম্পাইলারের সিডি কোথায়?" "ডান্নো, জ্যাক ছাড়ার পর থেকে সেগুলি দেখেনি, তিনি সিডির অভিভাবক ছিলেন।" "আহ্, আমরা ২ য় তলা থেকে ওঠার আগে তা কি ছিল না?" "সম্ভবত তারা একটি বাক্সে বা কোনও কিছুর মধ্যে রয়েছে" " এবং যেহেতু সরঞ্জামগুলি তিন বছরের পুরানো, তাই বিক্রেতার কাছ থেকে সেই পুরানো সিডি পাওয়ার কোনও আশা নেই।
আপনার সমস্ত বিল্ড স্ক্রিপ্টগুলি সোর্স নিয়ন্ত্রণে অন্তর্ভুক্ত। সবকিছু! সমস্ত উপায় নীচে পরিবেশের ভেরিয়েবল। আপনার বিল্ড মেশিনটি প্রকল্পের মূলটিতে একটি স্ক্রিপ্ট সম্পাদন করে আপনার যে কোনও প্রকল্পের একটি বিল্ড চালাতে সক্ষম হওয়া উচিত। ( ./build
একটি যুক্তিসঙ্গত মান; ./configure; make
প্রায় তত ভাল)) স্ক্রিপ্টটির প্রয়োজনমতো পরিবেশ সেট আপ করা উচিত এবং তারপরে যেকোন সরঞ্জাম পণ্য তৈরি করে (মেক, পিঁপড়া ইত্যাদি) চালু করে।
আপনি যদি মনে করেন এটি খুব বেশি কাজ, তবে তা নয়। এটি আসলে এক টন কাজ বাঁচায়। সময়ের শুরুতে আপনি একবারে ফাইলগুলি প্রতিশ্রুতিবদ্ধ করেন এবং তারপরে আপনি যখনই আপগ্রেড করেন। কোনও একাকী নেকড়ে তার নিজস্ব মেশিন আপগ্রেড করতে পারে না এবং উত্স কোডের একগুচ্ছ প্রতিশ্রুতিবদ্ধ করতে পারে যা অন্য কারও জন্য বিল্ড ভেঙে কিছু সরঞ্জামের সর্বশেষতম সংস্করণে নির্ভর করে। আপনি যখন নতুন বিকাশকারী নিয়োগ করেন, আপনি তাদের প্রকল্পটি পরীক্ষা করে চালানোর জন্য বলতে পারেন ./build
। সংস্করণ ১.৮-তে প্রচুর পারফরম্যান্স টিউনিং থাকে এবং আপনি কোড, সংকলক পতাকা এবং পরিবেশের ভেরিয়েবলগুলি টুইট করেন, আপনি নিশ্চিত করতে চান যে নতুন সংকলক পতাকাগুলি দুর্ঘটনাক্রমে সংস্করণ 1.7 প্যাচ বিল্ডগুলিতে প্রয়োগ না হয়, কারণ তাদের সত্যিকারের কোড দরকার পরিবর্তনগুলি যা তাদের সাথে যায় বা আপনি কিছু লোমশ বর্ণের পরিস্থিতি দেখতে পান।
সর্বোপরি , এটি আপনার পাছা কোনও দিন বাঁচাতে পারে: কল্পনা করুন যে আপনি সোমবারে আপনার পণ্যের 3.0.০.২ সংস্করণটি পাঠিয়েছেন। হুররে, উদযাপন করুন। মঙ্গলবার সকালে, একজন ভিআইপি গ্রাহক সমর্থন হটলাইনে কল করেন, আপনি 18 মাস আগে প্রেরণ করেছেন এমন সংস্করণ ২.২..6-তে এই সুপারক্রিটিক্যাল, জরুরি বাগ সম্পর্কে অভিযোগ করে ining এবং আপনাকে এখনও চুক্তিবদ্ধভাবে এটিকে সমর্থন করতে হবে এবং আপনি নতুন কোডে বাগটি স্থির করে দিয়েছেন তা নিশ্চিত না করা পর্যন্ত তারা আপগ্রেড করতে অস্বীকার করেছে এবং এগুলি আপনাকে নাচিয়ে তুলতে যথেষ্ট বড়। দুটি সমান্তরাল মহাবিশ্ব রয়েছে:
মহাবিশ্বে যেখানে আপনার লাইব্রেরি নেই, সরঞ্জামচেইন নেই এবং উত্স নিয়ন্ত্রণে স্ক্রিপ্ট তৈরি করা যায় এবং আপনার কাছে রক-সলিড সিএম সিস্টেম নেই .... আপনি কোডটির সঠিক সংস্করণটি পরীক্ষা করে দেখতে পারেন, তবে এটি দেয় আপনি তৈরি করার চেষ্টা করার সময় আপনি সমস্ত ধরণের ত্রুটিগুলি করেন। আসুন দেখুন, আমরা কি মে মাসে সরঞ্জামগুলি আপগ্রেড করেছি? না, এটি ছিল গ্রন্থাগারগুলি। ঠিক আছে, পুরানো লাইব্রেরিগুলিতে ফিরে যান - অপেক্ষা করুন, সেখানে দুটি আপগ্রেড ছিল? হ্যাঁ, এটি কিছুটা ভাল দেখাচ্ছে looks তবে এখন এই অদ্ভুত লিঙ্কার ক্র্যাশটি পরিচিত দেখাচ্ছে। ওহ, কারণ পুরানো গ্রন্থাগারগুলি নতুন টুলচেনের সাথে কাজ করে নি, এজন্যই আমাদের আপগ্রেড করতে হয়েছিল, তাই না? (আমি আপনাকে বাকি প্রচেষ্টার যন্ত্রণা থেকে বাঁচাব। এটি দুই সপ্তাহ সময় নেয় এবং এর শেষে কেউ খুশি হয় না, আপনি নয়, পরিচালনা নন, গ্রাহক নয়))
মহাবিশ্বে যেখানে সমস্ত কিছু সোর্স নিয়ন্ত্রণে থাকে, আপনি ২.২. check ট্যাগটি পরীক্ষা করে দেখুন, এক ঘন্টা বা তার মধ্যে একটি ডিবাগ বিল্ড প্রস্তুত রেখেছেন, "ভিআইপি বাগ" পুনরুদ্ধার করতে এক-দু'দিন ব্যয় করুন, কারণটি সন্ধান করুন, এটি ঠিক করুন বর্তমান প্রকাশ, এবং গ্রাহককে আপগ্রেড করতে রাজি করুন। স্ট্রেসফুল, তবে আপনার হেয়ারলাইন 3 সেন্টিমিটার বেশি যেখানে অন্য মহাবিশ্বের মতো ততটা খারাপ নয়।
যা বলেছিল, আপনি এটি খুব বেশি দূরে নিতে পারেন:
- আপনার একটি স্ট্যান্ডার্ড ওএস ইনস্টল করা উচিত যা আপনার একটি "সোনার অনুলিপি" রয়েছে। এটা দস্তাবেজ, সম্ভবত একটি README যে হয় উৎস নিয়ন্ত্রণ, তাই ভবিষ্যত প্রজন্মের যে সংস্করণ 2.2.6 জানেন এবং তার আগে শুধুমাত্র RHEL 5.3 এবং 2.3.0 নির্মিত এবং পরে শুধুমাত্র উবুন্টু 11.04 নির্মিত হয়। যদি আপনার পক্ষে এইভাবে সরঞ্জামচেন পরিচালনা করা সহজ হয় তবে এটির জন্য যান, কেবল নিশ্চিত হন যে এটি একটি নির্ভরযোগ্য সিস্টেম।
- উত্স নিয়ন্ত্রণ সিস্টেমে প্রকল্পের ডকুমেন্টেশনগুলি বজায় রাখা জটিল। প্রজেক্ট ডকস সর্বদা কোডের আগে থাকে এবং বর্তমান সংস্করণের কোডে কাজ করার সময় পরবর্তী সংস্করণে ডকুমেন্টেশনে কাজ করা অস্বাভাবিক কিছু নয়। বিশেষত যদি আপনার সমস্ত প্রকল্পের ডক্স বাইনারি ডক্স হয় যা আপনি পৃথক বা মার্জ করতে পারবেন না।
- আপনার যদি এমন সিস্টেম থাকে যা বিল্ডে ব্যবহৃত সমস্ত কিছুর সংস্করণগুলি নিয়ন্ত্রণ করে, এটি ব্যবহার করুন ! কেবলমাত্র নিশ্চিত হয়ে নিন যে পুরো টিম জুড়ে সিঙ্ক করা সহজ, যাতে প্রত্যেকে (বিল্ড মেশিন সহ) একই সরঞ্জামের সেট থেকে টানছেন। (আমি ডেবিয়ানের পিউবিল্ডার এবং পাইথনের ভার্চুয়ালেনভের দায়িত্বশীল ব্যবহারের মতো সিস্টেমগুলির কথা ভাবছি))