আপনি যদি নীচে আমার প্রস্তাবগুলি অনুসরণ করেন (আমার কয়েক বছরের জন্য রয়েছে) তবে আপনি সক্ষম হবেন:
- প্রতিটি প্রকল্প উত্স নিয়ন্ত্রণে যে কোনও জায়গায় রেখে দিন যতক্ষণ না আপনি প্রকল্পের মূল ডিরেক্টরি থেকে কাঠামোটি নীচে সংরক্ষণ করেন
- ন্যূনতম ঝুঁকি এবং ন্যূনতম প্রস্তুতি সহ যে কোনও যেকোন যেকোন জায়গায় প্রতিটি প্রকল্প তৈরি করুন
- প্রতিটি প্রকল্প সম্পূর্ণভাবে একা তৈরি করুন, যতক্ষণ না আপনার বাইনারি নির্ভরতা (স্থানীয় "গ্রন্থাগার" এবং "আউটপুট" ডিরেক্টরিগুলি) অ্যাক্সেস থাকে
- প্রকল্পগুলির যে কোনও সংমিশ্রণের সাথে বিল্ড এবং কাজ করুন, কারণ তারা স্বাধীন
- একক প্রকল্পের একাধিক অনুলিপি / সংস্করণগুলি তৈরি এবং কাজ করুন, যেহেতু তারা স্বাধীন independent
- উত্পন্ন ফাইল বা লাইব্রেরি সহ আপনার উত্স নিয়ন্ত্রণের সংগ্রহস্থলকে এলোমেলো করে এড়ান
আমি প্রস্তাব দিই (এখানে গরুর মাংস রয়েছে):
একটি একক প্রাথমিক সরবরাহযোগ্য, যেমন একটি .DLL, .EXE, বা। জেআর (ভিজ্যুয়াল স্টুডিও সহ ডিফল্ট) উত্পাদন করতে প্রতিটি প্রকল্পকে সংজ্ঞায়িত করুন।
প্রতিটি প্রকল্পকে একক মূল দিয়ে ডিরেক্টরি গাছ হিসাবে কাঠামো করুন।
প্রতিটি প্রকল্পের জন্য এটির মূল ডিরেক্টরিতে একটি স্বয়ংক্রিয় বিল্ড স্ক্রিপ্ট তৈরি করুন যা এটি কোনও আইডিইয়ের উপর নির্ভরশীলতা ছাড়াই স্ক্র্যাচ থেকে তৈরি করবে (তবে এটি সম্ভবপর হলে আইডিইতে নির্মিত হতে বাধা দেবে না)।
উইন্ডোজ .NET প্রকল্পের জন্য NAnt বা আপনার OS, টার্গেট প্ল্যাটফর্ম ইত্যাদির উপর ভিত্তি করে অনুরূপ কিছু বিবেচনা করুন
প্রতিটি প্রকল্পের বিল্ড স্ক্রিপ্টকে একটি একক স্থানীয় ভাগ করা "লাইব্রেরি" ডিরেক্টরি থেকে তার বাহ্যিক (তৃতীয় পক্ষের) নির্ভরতাগুলি রেফারেন্স করুন %DirLibraryRoot%\ComponentA-1.2.3.4.dll
, সংস্করণ অনুসারে প্রতিটি বাইনারি পুরোপুরি চিহ্নিত করা: , %DirLibraryRoot%\ComponentB-5.6.7.8.dll
।
প্রতিটি প্রকল্পের বিল্ড স্ক্রিপ্টকে একক স্থানীয় ভাগ করা "আউটপুট" ডিরেক্টরিতে প্রাথমিক বিতরণ প্রকাশ করুন: %DirOutputRoot%\ProjectA-9.10.11.12.dll
, %DirOutputRoot%\ProjectB-13.14.15.16.exe
।
প্রতিটি লাইব্রেরি স্ক্রিপ্টকে "লাইব্রেরি" এবং "আউটপুট" ডিরেক্টরিতে কনফিগারযোগ্য এবং সম্পূর্ণ-সংস্করণযুক্ত পরম পাথগুলি (উপরে দেখুন) এর মাধ্যমে তার নির্ভরতাগুলি রেফারেন্স করুন এবং যেখানেই নেই O
কখনও কোনও প্রকল্পকে অন্য কোনও প্রকল্প বা এর যে কোনও বিষয়বস্তুতে সরাসরি রেফারেন্স দেওয়া যাক - কেবলমাত্র "আউটপুট" ডিরেক্টরিতে প্রাথমিক সরবরাহযোগ্যগুলির উপর রেফারেন্সের অনুমতি দিন (উপরে দেখুন)।
প্রতিটি প্রকল্প বিল্ড স্ক্রিপ্টকে তার প্রয়োজনীয় বিল্ড সরঞ্জামগুলি একটি কনফিগারযোগ্য এবং সম্পূর্ণ-সংস্করণযুক্ত পরম পথ দ্বারা রেফারেন্স করুন: %DirToolRoot%\ToolA\1.2.3.4
, %DirToolRoot%\ToolB\5.6.7.8
।
প্রকল্পের রুট ডিরেক্টরিতে একটি সুনির্দিষ্ট পাথ আপেক্ষিক দ্বারা প্রত্যেক প্রকল্পের বিল্ড স্ক্রিপ্ট রেফারেন্স উৎস বিষয়বস্তু তৈরি করুন: ${project.base.dir}/src
, ${project.base.dir}/tst
(সিনট্যাক্স বিল্ড টুল দ্বারা পরিবর্তিত হয়)।
সর্বদা একটি প্রকল্প বিল্ড স্ক্রিপ্টের জন্য প্রতিটি ফাইল বা ডিরেক্টরিকে একটি নিরঙ্কুশ, কনফিগারযোগ্য পাথ (কনফিগারযোগ্য ভেরিয়েবলের দ্বারা নির্দিষ্ট ডিরেক্টরিতে মূল): ${project.base.dir}/some/dirs
অথবা এর মাধ্যমে উল্লেখ করতে হয় ${env.Variable}/other/dir
।
কখনও কখনও প্রজেক্ট বিল্ড স্ক্রিপ্টকে যেমন প্রাসঙ্গিক পথের সাথে .\some\dirs\here
বা যেমন ..\some\more\dirs
সর্বদা নিখুঁত পাথ ব্যবহার করে তা উল্লেখ করার অনুমতি দেয় ।
কখনও প্রজেক্ট বিল্ড স্ক্রিপ্টকে এমন কোনও নিখুঁত পাথ ব্যবহার করে যেমন কনফিগারযোগ্য রুট ডিরেক্টরি নেই, C:\some\dirs\here
বা ব্যবহার করে তা উল্লেখ করতে মঞ্জুরি দেয় \\server\share\more\stuff\there
।
প্রজেক্ট বিল্ড স্ক্রিপ্ট দ্বারা রেফারেন্সযুক্ত প্রতিটি কনফিগারযোগ্য রুট ডিরেক্টরিগুলির জন্য, একটি পরিবেশের ভেরিয়েবল নির্ধারণ করুন যা re রেফারেন্সগুলির জন্য ব্যবহৃত হবে।
প্রতিটি মেশিনটি কনফিগার করতে আপনাকে অবশ্যই পরিবেশের ভেরিয়েবলের সংখ্যা হ্রাস করার চেষ্টা করতে হবে।
প্রতিটি মেশিনে, একটি শেল স্ক্রিপ্ট তৈরি করুন যা প্রয়োজনীয় পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়িত করে, যা THAT মেশিনের সাথে সুনির্দিষ্ট (এবং সম্ভবত এটি ব্যবহারকারীর সাথে সম্পর্কিত, যদি প্রাসঙ্গিক হয়)।
উত্স নিয়ন্ত্রণে মেশিন-নির্দিষ্ট কনফিগারেশন শেল স্ক্রিপ্টটি রাখবেন না; পরিবর্তে, প্রতিটি প্রকল্পের জন্য, প্রকল্পের মূল ডিরেক্টরিতে স্ক্রিপ্টটির একটি অনুলিপি টেমপ্লেট হিসাবে প্রতিশ্রুতিবদ্ধ করুন।
প্রতিটি প্রজেক্ট বিল্ড স্ক্রিপ্ট এর প্রতিটি পরিবেশের ভেরিয়েবলগুলি পরীক্ষা করতে প্রয়োজনীয় এবং যদি সেগুলি সংজ্ঞায়িত না করা হয় তবে অর্থবোধক বার্তা দিয়ে বাতিল করতে হবে।
প্রতিটি নির্ভরশীল বিল্ড টুল এক্সিকিউটেবল, বহিরাগত গ্রন্থাগার ফাইল এবং নির্ভরশীল প্রকল্প বিতরণযোগ্য ফাইলগুলি পরীক্ষা করতে প্রতিটি প্রকল্প বিল্ড স্ক্রিপ্টের প্রয়োজন এবং যদি সেই ফাইলগুলি না থাকে তবে একটি অর্থবহ বার্তা দিয়ে বাতিল করতে হবে।
উত্স নিয়ন্ত্রণে যে কোনও উত্পন্ন ফাইল ফাইল করার প্রলোভনের প্রতিরোধ করুন - কোনও প্রকল্প বিতরণযোগ্য নয়, উত্পন্ন উত্স নেই, উত্পন্ন কোনও ডকস ইত্যাদি নেই etc.
আপনি যদি কোনও আইডিই ব্যবহার করেন তবে যা কিছু প্রকল্প নিয়ন্ত্রণ ফাইল আপনি পারেন তা উত্পন্ন করুন এবং উত্স নিয়ন্ত্রণে তাদের প্রতিশ্রুতিবদ্ধ করবেন না (এটিতে ভিজ্যুয়াল স্টুডিও প্রকল্প ফাইলগুলি অন্তর্ভুক্ত)।
বিকাশকারী ওয়ার্কস্টেশনগুলিতে অনুলিপি / ইনস্টল করার জন্য সমস্ত বাহ্যিক গ্রন্থাগার এবং সরঞ্জামগুলির একটি সরকারী অনুলিপি সহ একটি সার্ভার স্থাপন করুন। আপনার উত্স নিয়ন্ত্রণ সংগ্রহস্থল সহ এটি ব্যাক আপ করুন।
কোনও বিকাশ সরঞ্জামের সাথে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার (বিল্ড মেশিন) স্থাপন করুন।
আপনার বাহ্যিক লাইব্রেরি এবং বিতরণযোগ্য আইভির (পিঁপড়ার সাথে ব্যবহৃত) পরিচালনার জন্য একটি সরঞ্জাম বিবেচনা করুন।
মাভেন ব্যবহার করবেন না - এটি প্রাথমিকভাবে আপনাকে আনন্দিত করবে এবং শেষ পর্যন্ত আপনাকে কেঁদে ফেলবে।
মনে রাখবেন যে এগুলির কোনওটি সাবভারশনের জন্য সুনির্দিষ্ট নয় এবং এর বেশিরভাগটি কোনও ওএস, হার্ডওয়্যার, প্ল্যাটফর্ম, ভাষা ইত্যাদির জন্য লক্ষ্যযুক্ত প্রকল্পগুলির ক্ষেত্রে জেনেরিক I -আমি বিশ্বাস করি আপনি আপনার ওএস বা পছন্দের সরঞ্জামটিতে অনুবাদ করবেন।
ভিজ্যুয়াল স্টুডিও সমাধান সম্পর্কিত অতিরিক্ত নোট: এগুলিকে উত্স নিয়ন্ত্রণে রাখবেন না! এই পদ্ধতির সাথে আপনার কোনও প্রয়োজন নেই বা আপনি এগুলি উত্পন্ন করতে পারবেন (ঠিক ভিজ্যুয়াল স্টুডিও প্রকল্প ফাইলগুলির মতো)। তবে আমি সমাধান ফাইলগুলি পৃথক বিকাশকারীদের যথাযথ দেখতে (যেমন উত্স নিয়ন্ত্রণে চেক ইন করা হয়নি) তৈরি / ব্যবহার করতে রেখে দেওয়া ভাল। আমি Rob.sln
আমার ওয়ার্কস্টেশনে একটি ফাইল রাখি যা থেকে আমি আমার বর্তমান প্রকল্প (গুলি) উল্লেখ করি। যেহেতু আমার প্রকল্পগুলি সমস্ত একা একা, তাই আমি ইচ্ছামত প্রকল্পগুলি যুক্ত / অপসারণ করতে পারি (এর অর্থ কোনও প্রকল্প-ভিত্তিক নির্ভরতার উল্লেখ নেই)।
দয়া করে সাবভারশন এক্সটার্নালগুলি (বা অন্যান্য সরঞ্জামের অনুরূপ) ব্যবহার করবেন না, এগুলি একটি অ্যান্টি-প্যাটার্ন এবং অতএব অপ্রয়োজনীয়।
আপনি যখন অবিচ্ছিন্ন ইন্টিগ্রেশন প্রয়োগ করেন, বা এমনকি আপনি যখন মুক্তির প্রক্রিয়াটি স্বয়ংক্রিয় করতে চান তখনও এর জন্য একটি স্ক্রিপ্ট তৈরি করুন। একটি একক শেল স্ক্রিপ্ট তৈরি করুন যা: প্রকল্পের নামের প্যারামিটারগুলি নেয় (সংগ্রহস্থলীতে তালিকাবদ্ধ হিসাবে) এবং ট্যাগ নামের, একটি কনফিগারযোগ্য রুট ডিরেক্টরিতে একটি অস্থায়ী ডিরেক্টরি তৈরি করে, প্রদত্ত প্রকল্পের নাম এবং ট্যাগ নামের জন্য উত্স পরীক্ষা করে (নির্মাণ করে সেই অস্থায়ী ডিরেক্টরিতে সাবভার্শনের ক্ষেত্রে উপযুক্ত ইউআরএল) একটি ক্লিন বিল্ড সম্পাদন করে যা পরীক্ষা এবং প্যাকেজগুলি সরবরাহযোগ্য runs এই শেল স্ক্রিপ্টটি কোনও প্রকল্পে কাজ করা উচিত এবং আপনার "বিল্ড সরঞ্জাম" প্রকল্পের অংশ হিসাবে উত্স নিয়ন্ত্রণে পরীক্ষা করা উচিত। আপনার অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার এই স্ক্রিপ্টটি নির্মাণ প্রকল্পগুলির ভিত্তি হিসাবে ব্যবহার করতে পারে, বা এটি এমনকি এটি সরবরাহ করতে পারে (তবে আপনি এখনও নিজের নিজের পছন্দ করতে পারেন)।
@ ভনসি: আপনার বিল্ড স্ক্রিপ্টটি যখন ভেঙে যায় তখন আপনি "অ্যান্টি-অ্যাবসিডজার" এর পরিবর্তে "অ্যান্টজজার" দিয়ে কাজ করতে চান না কারণ আপনি অজান্তেই এন্টির একটি বেমানান সংস্করণ দিয়ে চালিয়েছেন। এটি পিঁপড় 1.6.5 এবং 1.7.0 এর মধ্যে বিশেষত সাধারণ। সাধারণকরণ, আপনি সর্বদা জানতে চান আপনার প্ল্যাটফর্ম (জাভা এবিসিডি) এবং আপনার বিল্ড সরঞ্জাম (পিপীলিকা EFGH) সহ প্রতিটি উপাদানটির নির্দিষ্ট সংস্করণটি কী ব্যবহৃত হচ্ছে। অন্যথায়, আপনি শেষ পর্যন্ত একটি ত্রুটির মুখোমুখি হবেন এবং আপনার প্রথম বিআইজি সমস্যাটি আপনার বিভিন্ন উপাদানগুলির কী সংস্করণ জড়িত তা সন্ধান করবে সামনে সমস্যাটি সমাধান করা সহজ to