এসভিএন এর জন্য একটি সংস্করণ নিয়ন্ত্রণ কৌশল নিয়ে আসা


9

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

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

dev/
  branches/
  tags/
  trunk/
      Site1/
      Site2/
      WebService/
      SharedCode/

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

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


5
বক্স কৌশলের বাইরে: গিটে স্যুইচ করুন।
রেন হেনরিচস

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

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

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

উত্তর:


5

আপনি যদি একটি ইউনিফাইড বিল্ড প্রক্রিয়া চান, তবে এই শাখাগুলি / ট্যাগ / ট্রাঙ্কটি মূলটিতে স্থাপন করতে ভুলবেন না:

branches/
tags/
trunk/
  dev/
    ...

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

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

branches/
  dev/
    Site1/
    Site2/
    WebService/
    SharedCode/
tags/
  release1/
    Site1/
    Site2/
    WebService/
    SharedCode/
trunk/
  Site1/
  Site2/
  WebService/
  SharedCode/

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

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

1
  1. যতক্ষণ না এসএনএন-র মধ্যে কোড কাঠামো যায় এটি সত্যই ব্যক্তিগত পছন্দ।

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

সুতরাং আপনার ক্ষেত্রে এটির মতো শোনা যাচ্ছে যে আপনি উপরে স্কেচ করা লেআউটটি যুক্তিসঙ্গত হবে, কারণ আপনার কোডটি ভাগ করা আছে এবং আপনি শাখা / ট্যাগগুলি সেই ভাগ করা কোডটি অন্তর্ভুক্ত করতে চান।

  1. ট্যাগ এবং শাখা ব্যবহারের আপনার বিবরণ অত্যন্ত সংবেদনশীল শোনায় এবং আমি কীভাবে এসএনএন ব্যবহারের আশা করব। ট্যাগিংয়ের উদ্দেশ্যটি আমি এটি বুঝতে পারি। এসএনএন ট্যাগ এবং শাখাগুলিতে বিটিডাব্লু আসলে একই জিনিস, তবে আপনি যেমন এটি প্রয়োগ করেছেন তেমন পরিভাষা প্রয়োগ করা হয়।

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


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

0

সাবভার্সন সংগ্রহস্থল রাখার সর্বোত্তম উপায় নীচে

project_a
     - branches
     - tags
     - trunk
project_b
     - branches
     - tags
     - trunk
project_c
     - branches
     - tags
     - trunk
master
     - branches
     - tags
     - trunk       
         - svn:external project_a
         - svn:external project_b
         - svn:external project_c

এইভাবে আপনি নিজেরাই পৃথক প্রকল্পগুলি পরীক্ষা করে দেখতে পারেন।

যদি আপনি সমস্ত 3 টি প্রকল্প পরীক্ষা করে দেখতে চান এবং কিছু একশাস্ত্রীয় বিল্ড স্ক্রিপ্ট / সিস্টেমের সাথে একীভূত বিল্ড করতে চান তবে এসএনএন সহ একটি মাস্টার মডিউল ব্যবহার করে তদন্ত করুন : অন্যান্য সমস্ত প্রকল্পকে মাস্টারে ম্যাপিং করে এক্সটার্নালtrunk

এটি প্রথম নজরে আরও জটিল তবে সাবভার্সনের সাহায্যে সমস্যাটি সমাধানের এটি সর্বাধিক রক্ষণাবেক্ষণযোগ্য এবং অভিবাদনীয় উপায়।


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