সাব্ভারশন সংগ্রহস্থলগুলিতে "শাখা", "ট্যাগ" এবং "ট্রাঙ্ক" এর অর্থ কী?


1193

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

তাঁরা কি বোঝাতে চাইছেন?


29
ট্রাঙ্ক, শাখা এবং ট্যাগগুলি কীভাবে / কখন ব্যবহার করতে হয় তা ব্যাখ্যা করার জন্য আমি এখানে একটি নিবন্ধ ছড়িয়েছি। আমি আগে সোর্স কন্ট্রোল ব্যবহার করতাম না, তবে এই নিবন্ধটি আমার মতো নুবুকের পক্ষে এটি বোঝা বেশ সহজ করে তুলেছে। ডে-টু-ডে
অফ

উত্তর:


910

হুম, নিশ্চিত নয় যে আমি নিক রে ট্যাগটির সাথে একটি শাখার অনুরূপ। একটি ট্যাগ কেবল একটি চিহ্নিতকারী

  • ট্রাঙ্কটি প্রকল্পের শুরু থেকে এখন অবধি উত্থানের মূল বিকাশ হবে be

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

  • ট্যাগটি ট্রাঙ্ক বা একটি শাখায় আপনি যে সময় সংরক্ষণ করতে চান তাতে সময় পয়েন্ট হবে। সংরক্ষণের দুটি প্রধান কারণ হ'ল হয় এটি সফ্টওয়্যারটির একটি প্রধান মুক্তি, আলফা, বিটা, আরসি বা আরটিএম হোক বা ট্রাঙ্কের উপরের বড় সংশোধনী প্রয়োগের আগে এটি সফ্টওয়্যারটির সবচেয়ে স্থিতিশীল পয়েন্ট।

ওপেন সোর্স প্রকল্পগুলিতে, প্রকল্পের স্টেকহোল্ডাররা ট্রাঙ্কের মধ্যে গ্রহণ না করা প্রধান শাখাগুলি কাঁটাচামচগুলির ঘাঁটি হতে পারে - যেমন, সম্পূর্ণ পৃথক প্রকল্প যা অন্য উত্স কোডের সাথে একটি সাধারণ উত্স ভাগ করে।

শাখা এবং ট্যাগ সাবট্রিগুলি নিম্নলিখিত উপায়ে ট্রাঙ্ক থেকে পৃথক করা হয়:

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

সাবভার্শনটি "শাখা মার্জ ট্র্যাকিং" সম্পর্কিত 1.5 সংস্করণ থেকে বৈশিষ্ট্যগুলিও যুক্ত করেছে যাতে একটি শাখায় প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি ক্রমবর্ধমান, "স্মার্ট" মার্জিংয়ের সমর্থনে ট্রাঙ্কে আবার একত্রীকরণ করা যায়।


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

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

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

3
হতে পারে স্থিতিশীল শাখাগুলির উল্লেখ করা উচিত: সাধারণত সেখানে পরিবর্তনগুলি ট্রাঙ্কের মধ্যে একীভূত হয় না ।
নেকড়ে

4
আমার বোধগম্যতা হল যে একটি "নিখুঁত বিশ্বে" ট্রাঙ্কে কোনও বিকাশ কখনও ঘটবে না, ট্রাঙ্কটি সর্বদা হয় লাইভের মধ্যে থাকা সঠিক কোড বা লাইভে প্রকাশিত হতে চলেছে এমন কোড হওয়া উচিত। শাখাগুলিকে বিকাশের প্রধান অঙ্গ হিসাবে গড়ে তুলবে।
মাইকটি

556

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

আমি সম্ভবত শাখা এবং ট্যাগগুলির সর্বাধিক সাধারণ ব্যবহারের চিত্র বর্ণনা করব এবং সেগুলি কীভাবে ব্যবহৃত হবে তার একটি উদাহরণ দান করব।

  • ট্রাঙ্ক : প্রধান উন্নয়ন ক্ষেত্র। কোডটি আপনার পরবর্তী প্রধান রিলিজ এখানে থাকে এবং সাধারণত সমস্ত নতুন বৈশিষ্ট্য থাকে has

  • শাখা : প্রতিবার আপনি একটি প্রধান সংস্করণ প্রকাশ করেন, এটি একটি শাখা তৈরি করে। এটি আপনাকে বাগ-ফিক্সগুলি করতে এবং নতুন - সম্ভবত অসম্পূর্ণ বা অনির্ধারিত - বৈশিষ্ট্যগুলি প্রকাশ না করেই একটি নতুন প্রকাশ করতে সহায়তা করে।

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


উদাহরণস্বরূপ, ধরা যাক আপনি একটি নতুন প্রকল্প শুরু করেছেন। আপনি "ট্রাঙ্ক" এ কাজ শুরু করেন, শেষ পর্যন্ত 1.0 সংস্করণ হিসাবে প্রকাশিত হবে on

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.0
  • শাখা / - খালি

০.০.০ শেষ হয়ে গেলে, আপনি ট্রাঙ্কটি একটি নতুন "১.০" শাখায় পরিণত করেন এবং একটি "১.০.০" ট্যাগ তৈরি করেন। এখন অবশেষে 1.1 কী হবে তা নিয়ে ট্রাঙ্কে চালিয়ে যান।

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.1 হবে
  • শাখা / 1.0 - 1.0.0 প্রকাশ সংস্করণ
  • ট্যাগ / 1.0.0 - 1.0.0 সংস্করণ

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

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.1 হবে
  • শাখা / 1.0 - আসন্ন 1.0.1 প্রকাশ
  • ট্যাগ / 1.0.0 - 1.0.0 সংস্করণ

একবার আপনি পর্যাপ্ত বাগ (বা সম্ভবত একটি সমালোচনামূলক ত্রুটি) খুঁজে পান, আপনি একটি 1.0.1 রিলিজ করার সিদ্ধান্ত নিয়েছেন। সুতরাং আপনি 1.0 টি শাখা থেকে "1.0.1" ট্যাগ করেন এবং কোডটি প্রকাশ করুন। এই মুহুর্তে, ট্রাঙ্কে 1.1 কী হবে এবং "1.0" শাখায় 1.0.1 কোড থাকবে। পরের বার আপনি 1.0 এ আপডেট প্রকাশ করবেন, এটি 1.0.2 হবে।

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.1 হবে
  • শাখা / 1.0 - আসন্ন 1.0.2 প্রকাশ
  • ট্যাগ / 1.0.0 - 1.0.0 সংস্করণ
  • ট্যাগস / 1.0.1 - 1.0.1 রিলিজ সংস্করণ

অবশেষে আপনি 1.1 প্রকাশের জন্য প্রায় প্রস্তুত, তবে আপনি প্রথমে একটি বিটা করতে চান। এই ক্ষেত্রে, আপনি সম্ভবত "1.1" শাখা এবং একটি "1.1 বেটা 1" ট্যাগ করুন। এখন, কী হবে 1.2 (বা হতে পারে 2.0) ট্রাঙ্কে চালিয়ে যান, তবে "1.1" শাখায় 1.1 তে কাজ অবিরত রয়েছে।

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.2
  • শাখা / 1.0 - আসন্ন 1.0.2 প্রকাশ
  • শাখা / 1.1 - আসন্ন 1.1.0 প্রকাশ
  • ট্যাগ / 1.0.0 - 1.0.0 সংস্করণ
  • ট্যাগস / 1.0.1 - 1.0.1 রিলিজ সংস্করণ
  • ট্যাগ / 1.1beta1 - 1.1 বিটা 1 রিলিজ সংস্করণ

আপনি একবার 1.1 ফাইনাল প্রকাশ করার পরে, আপনি "1.1" শাখা থেকে একটি "1.1" ট্যাগ করেন do

আপনি তিনটি শাখার মধ্যে বাগ ফিক্সগুলি পোর্টিং (1.0, 1.1 এবং ট্রাঙ্ক) চাইলে আপনি 1.0 বজায় রাখাও চালিয়ে যেতে পারেন। গুরুত্বপূর্ণ গ্রহণযোগ্যতাটি হ'ল আপনি যে সফ্টওয়্যারটি বজায় রাখছেন তার প্রতিটি মূল সংস্করণের জন্য আপনার একটি শাখা রয়েছে যাতে সেই সংস্করণটির জন্য কোডের সর্বশেষতম সংস্করণ থাকে।


শাখাগুলির অন্য ব্যবহার বৈশিষ্ট্যগুলির জন্য। এটি যেখানে আপনি শাখা ট্রাঙ্ক (বা আপনার প্রকাশিত শাখাগুলির মধ্যে একটি) এবং বিচ্ছিন্নকরণে একটি নতুন বৈশিষ্ট্য নিয়ে কাজ করেন। বৈশিষ্ট্যটি শেষ হয়ে গেলে, আপনি এটিকে আবার মার্জ করে এবং শাখাটি সরান।

  • ট্রাঙ্ক / - বিকাশ সংস্করণ, শীঘ্রই 1.2
  • শাখা / 1.1 - আসন্ন 1.1.0 প্রকাশ
  • শাখা / ইউআই-পুনর্লিখন - পরীক্ষামূলক বৈশিষ্ট্য শাখা

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


আরও মনে রাখবেন, আমি এখানে যে সংস্করণী স্কিমটি ব্যবহার করেছি তা হ'ল অনেকের মধ্যে একটি। কিছু দলগুলি বাগ ফিক্স / রক্ষণাবেক্ষণ রিলিজগুলি ১.১, ১.২, ইত্যাদি হিসাবে করবে এবং বড় পরিবর্তনগুলি 1.x, 2.x ইত্যাদি করবে etc. .x "এর পরিবর্তে" 1.0 "বা" 1.0.x "। (পাশাপাশি, সংস্করণ সংখ্যাগুলি কীভাবে করা যায় সে সম্পর্কে সিনেম্যাটিক সংস্করণটি একটি ভাল গাইড)।


6
@ বারুচ - এটি সম্পূর্ণ ভুল। ট্যাগগুলি লাইটওয়েট এবং শাখাগুলির সমান (যেমন সাবভার্সন নিজেই সম্পর্কিত)।
জোশ কেলি

7
ইউজ-কেস বিশদটি ভালবাসুন। ধন্যবাদ @ গ্রেগম্যাক
জেরোমি ফ্রেঞ্চ

2
ট্যাগ / শাখাগুলি হালকা হ'ল যেখানে আমি এখানে উল্লেখ করেছি যে এখানে একটি উদ্ধৃতি পেতে পারি?
এমনটি

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত যা আরও ভাল ^^
নম জি ভি ইউ

4
@ কার্ডিন আমার কাছে এখনই রেফারেন্স নেই তবে ট্যাগ নোট করা গুরুত্বপূর্ণ সার্ভারে হালকা ওজনের, তবে ক্লায়েন্ট নয়। আপনি যদি সমস্ত ট্যাগ চেকআউট করেন, আপনি সেই অনেকগুলি সম্পূর্ণ অনুলিপি পাবেন। তবে, আপনি যদি সার্ভারে ভান্ডার আকারের দিকে তাকান তবে তা কেবল ট্যাগ প্রতি কয়েক বাইট বৃদ্ধি পাবে। এজন্য আপনার সাধারণত ডিরেক্টরি বলতে গেলে রুট ডিরেক্টরিটি চেকআউট করা উচিত নয়।
গ্রেগম্যাক

97

নিক যা বলেছে তা ছাড়াও আপনি স্ট্রিমড লাইনে আরও জানতে পারেন : সমান্তরাল সফ্টওয়্যার বিকাশের জন্য ব্র্যাঞ্চিং প্যাটার্নস

এখানে চিত্র বর্ণনা লিখুন

এই চিত্রের mainমধ্যে ট্রাঙ্ক, rel1-maintএকটি শাখা এবং 1.0একটি ট্যাগ।


1
@ ওল্ফ তিনি হতে পারেন - যে চিত্রটি টুলিং নির্বিশেষে বেশ জেনেরিক। সমস্ত এসসিএম বিভিন্ন শব্দ ব্যবহার করে তবে একই ধারণা, ট্রাঙ্ক এবং মেইনের মধ্যে কোনও পার্থক্য নেই; বা ট্রাঙ্ক এবং মাস্টার। এই চিত্রটি দেখায় যে আমার বর্তমান সংস্থা কীভাবে এসভিএন ব্যবহার করে।
gbjbaanb

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

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

75

সাধারণভাবে (সরঞ্জাম অজোনস্টিক ভিউ), একটি শাখা সমান্তরাল বিকাশের জন্য ব্যবহৃত প্রক্রিয়া। একটি এসসিএমের 0 থেকে n শাখা থাকতে পারে। সাবভার্সন 0 আছে।

  • ট্রাঙ্ক সাবভারশন দ্বারা প্রস্তাবিত একটি প্রধান শাখা , তবে আপনি কোনওভাবেই এটি তৈরি করতে বাধ্য হন না। আপনি এটিকে 'মূল' বা 'রিলিজ' বলতে পারেন, বা একেবারে নাও থাকতে পারেন!

  • শাখা একটি উন্নয়ন প্রচেষ্টা প্রতিনিধিত্ব করে। এটি কখনই কোনও সংস্থার নামে নামকরণ করা উচিত নয় (যেমন 'ভনক_বাঞ্চ') তবে এর পরে:

    • একটি উদ্দেশ্য 'আমারপ্রজেক্ট_দেব' বা 'মাইপ্রজেক্ট_মের্জ'
    • একটি রিলিজ পরিধি 'myProjetc1.0_dev'or myProject2.3_ মার্জ' বা 'মাইপ্রজেক্ট 6..2_প্যাচ 1' ...
  • সহজেই সেই অবস্থায় ফিরে আসার জন্য ট্যাগ হ'ল ফাইলগুলির একটি স্ন্যাপশট। সমস্যাটি হ'ল সাবভার্সনে ট্যাগ এবং শাখাটি একই । এবং আমি স্পষ্টতই ভৌতিক পদ্ধতির সুপারিশ করব:

    ট্যাগস এরিয়ায় নতুন কপি তৈরি করা থেকে যে কাউকে কিছু করা থেকে বিরত রাখতে আপনি সাবভারশন দিয়ে সরবরাহ করা অ্যাক্সেস কন্ট্রোল স্ক্রিপ্টগুলির একটি ব্যবহার করতে পারেন।

একটি ট্যাগ চূড়ান্ত হয়। এর সামগ্রী কখনই পরিবর্তন করা উচিত নয়। না। কখনো। আপনি কি রিলিজ নোটের একটি লাইন ভুলে গেছেন? একটি নতুন ট্যাগ তৈরি করুন। পুরানোটিকে অপ্রচলিত বা অপসারণ করুন।

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

কনভেনশন দ্বারা, ট্রাঙ্ক শাখাটি আপনার বিকাশের বর্তমান অবস্থার প্রতিনিধিত্ব করতে পারে, তবে এটি একটি সাধারণ অনুক্রমিক প্রকল্পের জন্য, এটি এমন একটি প্রকল্প যা:

  • কোনও 'আগাম' বিকাশ নেই (পরবর্তী পরিবর্তনগুলি বোঝায় যে তারা বর্তমান 'ট্রাঙ্ক' বিকাশের সাথে সামঞ্জস্যপূর্ণ নয় এমন পরিবর্তনগুলি বোঝায়)
  • কোন বৃহত রিফ্যাক্টরিং (একটি নতুন প্রযুক্তিগত পছন্দ পরীক্ষা করার জন্য)
  • পূর্ববর্তী প্রকাশের দীর্ঘমেয়াদী রক্ষণাবেক্ষণ নেই

কারণ এই দৃশ্যের একটি (বা সমস্ত) এর সাথে আপনি নিজেকে চারটি 'ট্রাঙ্ক', চারটি 'বর্তমান বিকাশ' পেতে পারেন এবং এই সমান্তরাল বিকাশে আপনি যা করেন না তা অবশ্যই 'ট্রাঙ্কে' একত্রীকরণ করতে হবে।


38

এসভিএন-তে একটি ট্যাগ এবং শাখা সত্যিই সমান।

ট্যাগ = সময়ে একটি সংজ্ঞায়িত টুকরা, সাধারণত প্রকাশের জন্য ব্যবহৃত হয়

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

ট্রাঙ্ক = বিকাশের কাজের জায়গাগুলি, এখানেই সমস্ত বিকাশ ঘটানো উচিত এবং তারপরে শাখা রিলিজ থেকে ফিরে একত্রিত হওয়া পরিবর্তিত হয়।


30

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

  • ট্রাঙ্কটি এমন যেখানে আপনি আপনার বিকাশের মূল লাইনটি রাখেন। শাখা ফোল্ডারটি এমন যেখানে আপনি সম্ভবত তৈরি করতে পারেন, ভাল, শাখাগুলি, যা একটি সংক্ষিপ্ত পোস্টে ব্যাখ্যা করা শক্ত।

  • একটি শাখা আপনার প্রকল্পের একটি সাবসেটের অনুলিপি যা আপনি ট্রাঙ্ক থেকে পৃথকভাবে কাজ করেন। হতে পারে এটি এমন পরীক্ষাগুলির জন্য যা অন্য কোথাও যেতে পারে না, বা এটি সম্ভবত পরবর্তী রিলিজের জন্য, যা আপনি স্থির হয়ে গেলে পরে ট্রাঙ্কে আবার মিশে যাবেন।

  • এবং ট্যাগ ফোল্ডারটি আপনার রিপোজিটরির ট্যাগযুক্ত অনুলিপি তৈরি করার জন্য, সাধারণত প্রকাশের চেকপয়েন্টে।

তবে যেমনটি আমি বলেছিলাম, এসভিএন-তে, একটি ফোল্ডার হ'ল একটি ফোল্ডার। branch, trunkএবং ট্যাগ কেবল একটি সম্মেলন।

আমি 'কপি' শব্দটি উদারভাবে ব্যবহার করছি। এসভিএন আসলে সংগ্রহস্থলের জিনিসগুলির সম্পূর্ণ অনুলিপি তৈরি করে না।


13

ট্রাঙ্ক উন্নয়ন লাইন সর্বশেষ সোর্স কোড এবং বৈশিষ্ট্য ঝুলিতে নেই। এটিতে সর্বশেষ বাগ সংশোধন করার পাশাপাশি প্রকল্পে যুক্ত হওয়া সর্বশেষ বৈশিষ্ট্যগুলিও থাকা উচিত।

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

ট্যাগ একটি নির্দিষ্ট সময়ে সংগ্রহস্থলের স্ন্যাপশট হয়। এগুলির কোনও বিকাশ ঘটে না। এগুলি প্রায়শই ক্লায়েন্টের কাছে কী প্রকাশিত হয়েছিল তার অনুলিপি ব্যবহার করতে ব্যবহৃত হয় যাতে ক্লায়েন্ট কী ব্যবহার করছে তা সহজেই অ্যাক্সেস পেতে পারেন।

সংগ্রহস্থলগুলির খুব ভাল গাইডের লিঙ্কটি এখানে:

উইকিপিডিয়ায় নিবন্ধগুলিও পড়ার মতো।


12

এখন এটি সফ্টওয়্যার বিকাশের বিষয়, কোনও কিছুর বিষয়ে কোনও সামঞ্জস্যপূর্ণ জ্ঞান নেই, প্রত্যেকে মনে হয় এটি নিজস্ব নিজস্ব পদ্ধতিতে রয়েছে তবে এটি কারণ এটি যেহেতু তুলনামূলকভাবে তরুণ শৃঙ্খলা।

এখানে আমার সহজ সরল উপায়,

ট্রাঙ্ক - ট্রাঙ্ক ডিরেক্টরিতে সর্বাধিক বর্তমান, অনুমোদিত এবং একত্রিত কাজের কাজ রয়েছে। অনেকে যা স্বীকার করেছেন তার বিপরীতে, আমার ট্রাঙ্কটি কেবল পরিষ্কার, ঝরঝরে, অনুমোদিত কাজের জন্য, এবং কোনও উন্নয়ন ক্ষেত্র নয়, বরং একটি মুক্তির ক্ষেত্র।

কিছু নির্দিষ্ট সময়ে যখন ট্রাঙ্কটি সমস্ত প্রকাশের জন্য প্রস্তুত মনে হয়, তখন এটি ট্যাগ করে প্রকাশ করা হয়।

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

উদাহরণস্বরূপ: আমার পণ্যটির পঞ্চম রাউন্ডের বিকাশের জন্য একটি পুনরাবৃত্তি -5 শাখা থাকতে পারে , পরীক্ষার নবম রাউন্ডের জন্য একটি প্রোটোটাইপ -9 শাখা, এবং আরও কিছু থাকতে পারে।

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

আমি মনে করি ট্যাগগুলি সহ আমি আগ্রহের সাথে ইঙ্গিত করতে সময়মতো পিছনে ঝাঁপিয়ে পড়তে পারি।


10

আমি এই মহান SVN সংক্রান্ত যখন আমি ওয়েবসাইট আপ খুঁজছেন ছিল টিউটোরিয়াল পাওয়া লেখক এর OpenCV 2 কম্পিউটার ভিশন আবেদন Cookbook প্রোগ্রামিং এবং আমি ভাগ করা উচিত।

কীভাবে এসভিএন ব্যবহার করবেন এবং 'ট্রাঙ্ক', 'ট্যাগ' এবং 'শাখা' বাক্যাংশটি কী বোঝায় তার একটি টিউটোরিয়াল রয়েছে।

সরাসরি তার টিউটোরিয়াল থেকে উদ্ধৃত:

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

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

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


9

ট্রাঙ্ক ডিরেক্টরি হ'ল ডিরেক্টরি যা আপনি সম্ভবত সবচেয়ে বেশি পরিচিত, কারণ এটি সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি ধরে রাখতে ব্যবহৃত হয়। আপনার মূল কোডবেস ট্রাঙ্কে থাকা উচিত।

শাখা ডিরেক্টরি আপনার শাখাগুলি ধরে রাখার জন্য, সে যাই হোক না কেন।

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


9

প্রত্যেকের কিছুটা আলাদা সংজ্ঞা থাকার একটি কারণ হ'ল সাবভার্সন শাখা এবং ট্যাগগুলির জন্য শূন্য সমর্থন প্রয়োগ করে । সাবভারশনটি মূলত বলে: আমরা অন্যান্য সিস্টেমে পূর্ণ বৈশিষ্ট্যযুক্ত শাখা এবং ট্যাগগুলিকে দেখেছি এবং সেগুলি কার্যকর খুঁজে পাই নি, তাই আমরা কোনও কিছুই প্রয়োগ করি নি। পরিবর্তে একটি নাম কনভেনশন সহ একটি নতুন ডিরেক্টরিতে একটি অনুলিপি তৈরি করুন । তাহলে অবশ্যই সকলেই কিছুটা আলাদা কনভেনশন করতে মুক্ত free একটি আসল ট্যাগ এবং নিছক অনুলিপি + নামকরণ কনভেনশনের মধ্যে পার্থক্য বোঝার জন্য উইকিপিডিয়া এন্ট্রি সাবভারসিওন ট্যাগ এবং শাখা দেখুন


8

ট্যাগ = সময়ে একটি সংজ্ঞায়িত টুকরা, সাধারণত প্রকাশের জন্য ব্যবহৃত হয়

আমি মনে করি এটি সাধারণত "ট্যাগ" বলতে বোঝায়। কিন্তু সাবভারশন:

তাদের সত্যিকার অর্থে কোনও আনুষ্ঠানিক অর্থ নেই। ফোল্ডারটি এসভিএন-তে একটি ফোল্ডার।

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

অথবা সম্ভবত আমি সিভিএস অনেক দীর্ঘ ব্যবহার করেছি ।


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

6

আমি মনে করি যে কিছু বিভ্রান্তি একটি ট্যাগের ধারণা এবং এসভিএন বাস্তবায়নের মধ্যে পার্থক্য থেকে আসে। এসভিএন-এর কাছে একটি ট্যাগ হ'ল একটি শাখা যা অনুলিপি করে। ট্যাগগুলিকে সংশোধন করা ভুল বলে বিবেচনা করা হয় এবং বাস্তবে টার্টোইজএসভিএন এর মতো সরঞ্জামগুলি আপনাকে সতর্ক করে দেবে যদি আপনি পথে ../tags/ .. দিয়ে কোনও কিছু পরিবর্তন করার চেষ্টা করেন।


5

আমি 'ট্যাগ' আসলে কী তা নিশ্চিত নই, তবে শাখা মোটামুটি সাধারণ উত্স নিয়ন্ত্রণ ধারণা।

মূলত, একটি শাখা ট্রাঙ্ককে প্রভাবিত না করে কোডে পরিবর্তনগুলি নিয়ে কাজ করার একটি উপায়। বলুন যে আপনি একটি নতুন বৈশিষ্ট্য যুক্ত করতে চান যা মোটামুটি জটিল। আপনি যেমন পরিবর্তনগুলি করেছেন তেমন তা পরীক্ষা করতে সক্ষম হতে চান তবে আপনি বৈশিষ্ট্যটি সম্পন্ন না করা পর্যন্ত ট্রাঙ্কটিকে প্রভাবিত করতে চান না।

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

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

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


4

ট্রাঙ্ক : চটপটে প্রতিটি স্প্রিন্ট শেষ হওয়ার পরে আমরা আংশিকভাবে শিপযোগ্য পণ্যটি নিয়ে বেরিয়ে আসি। এই প্রকাশগুলি ট্রাঙ্কে রাখা হয়।

শাখা : প্রতিটি চলমান স্প্রিন্টের জন্য সমস্ত সমান্তরাল বিকাশ কোডগুলি শাখাগুলিতে রাখা হয়।

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


এটি আপনার নির্দিষ্ট কর্মপ্রবাহ, এটি সাধারণভাবে প্রযোজ্য নয়।
জেসন এস

4

জিআইটির সাথে পরিচিত ব্যক্তিদের জন্য, জিআইটিতে মাস্টার এসভিএন-তে ট্রাঙ্কের সমান।

জিআইটি এবং এসভিএন উভয় ক্ষেত্রে শাখা এবং ট্যাগের একই পরিভাষা রয়েছে।

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