আমার বোঝা থেকে এসভিএন হ'ল শাখা থেকে সহজ। একত্রিত করা কঠিন '। কেন এমন? তারা কীভাবে একীভূত হয় তাতে কোনও পার্থক্য রয়েছে?
আমার বোঝা থেকে এসভিএন হ'ল শাখা থেকে সহজ। একত্রিত করা কঠিন '। কেন এমন? তারা কীভাবে একীভূত হয় তাতে কোনও পার্থক্য রয়েছে?
উত্তর:
খুব দৃur় পরিস্থিতির জন্য দয়া করে আমার স্ট্যাক ওভারফ্লো উত্তরটি দেখুন যেখানে মারকুরিয়াল (এবং গিট) সমস্যা ছাড়াই একীভূত হয় এবং যেখানে সাবভারশন আপনাকে একটি বোগাস সংঘাতের সাথে উপস্থাপন করে। পরিস্থিতি এমন একটি শাখায় করা সাধারণ রিফ্যাক্টরিং যেখানে আপনি কিছু ফাইলের নাম পরিবর্তন করেন।
টিডামার্স উত্তর সম্পর্কে, তারপর সেখানে অনেক ভুল বোঝাবুঝি আছে:
সাবভারশন, মার্কুরিয়াল এবং গিট প্রকল্পের সমস্ত ট্র্যাক সংগ্রহস্থল-প্রশস্ত স্ন্যাপশট। তাদের সংস্করণ , সংশোধন বা চেঞ্জসেটগুলি কল করা কোনও পার্থক্য করে না। এগুলি সমস্ত ফাইলের একটি সেট যৌক্তিকভাবে পারমাণবিক স্ন্যাপশট।
মার্জ করার ক্ষেত্রে আপনার কমিটের আকার কোনও পার্থক্য করে না । সমস্ত তিনটি সিস্টেমে স্ট্যান্ডার্ড থ্রি-ওয়ে মার্জ অ্যালগরিদম এবং সেই অ্যালগরিদমের ইনপুটগুলি একত্রিত করে
এটা তোলে কোন ব্যাপার না কিভাবে দুই শাখা সংস্করণ তৈরি করা হয়েছিল। পূর্বপুরুষ সংস্করণ থেকে আপনি 1000 ছোট কমিট ব্যবহার করতে পারেন বা আপনি 1 টি প্রতিশ্রুতি ব্যবহার করতে পারেন। সমস্ত গুরুত্বপূর্ণ ফাইলগুলির চূড়ান্ত সংস্করণ। (হ্যাঁ, এটি আশ্চর্যজনক! হ্যাঁ, প্রচুর ডিভিসিএস গাইড এটি ভয়াবহভাবে ভুল পেয়েছেন))
তিনি পার্থক্য সম্পর্কে কিছু ভাল পয়েন্ট উত্থাপন:
সাবভার্শনের কিছু "ভুডু" রয়েছে যেখানে আপনি মেশান করতে পারেন /trunk
, বলুন /branches/foo
,। মার্চুরিয়াল এবং গিট এই মডেলটি ব্যবহার করে না - শাখাগুলি পরিবর্তে ইতিহাসে সরাসরি মডেল করা হয়। ইতিহাস তাই লিনিয়ার হওয়ার পরিবর্তে নির্দেশিত অ্যাসাইক্লিক গ্রাফে পরিণত হয় । সাবভারসিওন দ্বারা ব্যবহৃত মডেলের চেয়ে এটি অনেক সহজ মডেল এবং এটি কর্নারের কয়েকটি কেস কেটে দেয়।
আপনি সহজেই মার্জ করতে বিলম্ব করতে পারেন বা অন্য কাউকে এটি পরিচালনা করতেও পারেন। যদি hg merge
আপনাকে hg pull
প্রচুর দ্বন্দ্ব দেয়, তবে আপনি আপনার সহকর্মীকে আপনার কাছ থেকে জিজ্ঞাসা করতে পারেন এবং তার ঠিক একই অবস্থা রয়েছে। সুতরাং তিনি পারেন hg merge
এবং আপনার চেয়ে দ্বন্দ্ব সমাধানে তিনি আরও ভাল।
সাবভার্সনের ক্ষেত্রে এটি খুব কঠিন যেখানে আপনার প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনাকে আপডেট করতে হবে। আপনি কেবল সার্ভারের পরিবর্তনগুলি উপেক্ষা করতে এবং আপনার নিজের বেনামে শাখা প্রতিশ্রুতিবদ্ধ রাখতে পারবেন না। সাধারণভাবে, সাবভার্সন আপনাকে যখন নোংরা ওয়ার্কিং কপি নিয়ে খেলা করতে বাধ্য করে svn update
। আপনি নিজের পরিবর্তনগুলি কোথাও সুরক্ষিত না রাখায় এটি এক ধরণের ঝুঁকিপূর্ণ। গিট এবং মার্চুরিয়াল আপনাকে প্রথমে প্রতিশ্রুতিবদ্ধ করতে এবং তারপরে আপডেট এবং প্রয়োজনীয় হিসাবে মার্জ করতে দেয়।
সাবট্রিশনের চেয়ে গিট এবং মার্কিউরিয়াল একত্রীকরণে আরও ভাল কারণ বাস্তবায়নের বিষয়। পুনরায় নামকরণের দ্বন্দ্ব রয়েছে যা সাবভারশন কেবল হ্যান্ডেল করতে পারে না এমনকি ভেবেছিল এটি সঠিক উত্তরটি কি তা পরিষ্কার। মার্কুরিয়াল এবং গিট এগুলিকে সহজে পরিচালনা করে। তবে সাবভার্সন সেগুলি পরিচালনা করতে পারে না এমন কোনও কারণ নেই - কেন্দ্রীভূত হওয়া অবশ্যই কারণ নয়।
trunk
এসভিএন-এ কাজ করছেন । ডিভিসিএসের সাহায্যে আপনি ভাগ না করেই প্রতিশ্রুতিবদ্ধ করতে পারেন তবে এসভিএন-এ আপনার svn commit
সরাসরি একই শাখায় কাজ করা অন্যকে প্রভাবিত করবে। এমনকি যদি আমরা দুজন এসভিএন-তে একটি শাখায় কাজ করি তবে তাত্ক্ষণিকভাবে আপনার কাজের সাথে সংযুক্ত না হয়েও আমি আমার কাজ করতে বাধ্য করতে পারি না। এটি কমিটিকে কিছুটা ভীতিজনক করে তোলে - যা কোনও সংস্করণ নিয়ন্ত্রণ সিস্টেমের জন্য একটি ভীতিজনক সম্পত্তি! :-)
মূল সমস্যাগুলি এই সিস্টেমগুলি কোনও সংস্করণযুক্ত ডিরেক্টরি কাঠামোর প্রতিনিধিত্ব করে in
সাবভার্সনের মূল ধারণাটি যার চারপাশে পুরো সিস্টেমটি ঘোরে। এটি হ'ল একটি সংস্করণ (বা, এসএনএন লিঙ্গোতে, "রিভিশন"): একটি নির্দিষ্ট বিন্দুতে একটি ফাইলের স্ন্যাপশট। যতক্ষণ ইতিহাস পুরোপুরি রৈখিক, ততক্ষণ ঠিক আছে, তবে আপনার যদি উন্নয়নের দুটি স্বতন্ত্র রেখা থেকে পরিবর্তনগুলি মার্জ করতে হয় তবে এসএনএনকে উভয়ের বর্তমান সংস্করণগুলি তুলনা করতে হবে এবং তারপরে সর্বশেষ ভাগ করা সংস্করণের মধ্যে একটি ত্রি-উপায়ে তুলনা করতে হবে এবং দুটি প্রধান সংস্করণ। যে লাইনগুলি একটির মাথায় পরিবর্তিত হয় তবে অন্যটি নয়, সহজেই সমাধান করা যায়; উভয় মাথাতে ঠিক একইভাবে বিভ্রান্ত হওয়া লাইনগুলি আরও শক্ত, তবে সাধারণত করণীয়যোগ্য; লাইনগুলি বিভিন্ন উপায়ে বিচ্যুত হয় সেগুলিই এসএনএনকে বলে "মানব, আমি এটি বুঝতে পারি না, দয়া করে আমার জন্য এটি সমাধান করুন।"
বিপরীতে, গিট এবং মার্উরিয়াল ট্র্যাক পরিবর্তনের পরিবর্তে সংস্করণগুলি। পুরো সংগ্রহশালাটি হ'ল চেঞ্জসেটের গাছ, প্রতিটি পিতামাতার উপর নির্ভর করে, যেখানে পিতামাতার পরিবর্তনটি যে কোনও সংখ্যক বাচ্চা রাখতে পারে এবং গাছের মূলটি খালি ডিরেক্টরিকে উপস্থাপন করে। অন্য কথায়, গিট / এইচজি বলে "প্রথমে আমার কিছুই ছিল না, তারপরে এই প্যাচটি প্রয়োগ করা হয়েছিল, তারপরে সেই প্যাচ ইত্যাদি"। যখন আপনাকে দুটি লাইনের বিকাশ ঘটাতে হবে, গিট / এইচজি কেবল জানে না প্রতিটি মাথা বর্তমানে কেমন দেখাচ্ছে এবং সর্বশেষ সাধারণ সংস্করণটি কেমন দেখায়, এটি কীভাবে রূপান্তর ঘটেছিল তাও জানে, অনেক বেশি স্মার্ট মার্জ করার অনুমতি দেয়।
ডিভিসিএসে আরও একত্রিত হওয়া আরও সহজ করে তোলে তা হল প্রতিশ্রুতিবদ্ধতা এবং ধাক্কা দেওয়ার ধারণাগুলি পৃথক করার একটি পরোক্ষ পরিণতি, এবং যে কোনও সময়ে একই সংগ্রহস্থলের যে কোনও দুটি ক্লোনগুলির মধ্যে সমস্ত ধরণের ক্রস-সংহতকরণের অনুমতি দেয়। এসএনএন-এর সাহায্যে লোকেরা প্রায়শই অসম্পৃক্ত পরিবর্তনের সাথে বড় আকারের চেঞ্জসেটের প্রতিশ্রুতি দেয়, কারণ একটি প্রতিশ্রুতিবদ্ধ কেন্দ্রীয় ভান্ডার সম্পর্কিত একটি আপডেট যা অন্যান্য দলের সকল সদস্যকে প্রভাবিত করে; যদি আপনি কোনও ভাঙা সংস্করণ করেন তবে প্রত্যেকে আপনার সাথে রাগ করবে। যেহেতু বেশিরভাগ সেটআপগুলি একটি নেটওয়র্ক্ড এসএনএন সার্ভারকে জড়িত করে, তাই কমিট করার মাধ্যমে নেটওয়ার্কের উপর ডেটা পাম্পিংও জড়িত থাকে যার অর্থ প্রতিশ্রুতিবদ্ধ কার্যপ্রবাহে যথেষ্ট বিলম্বের পরিচয় দেয় (বিশেষত যখন আপনার কাজের অনুলিপিটি পুরানো হয় এবং আপনাকে প্রথমে টানতে হয়)। গিট এবং মার্উরিয়াল দিয়ে, প্রতিশ্রুতিবদ্ধভাবে স্থানীয়ভাবে ঘটে এবং উভয় স্থানীয় ফাইল সিস্টেমগুলি পরিচালনা করতে খুব দক্ষ তাই এটি সাধারণত তাত্ক্ষণিকভাবে শেষ হয়। ফলস্বরূপ, লোকেরা (একবার তারা এর সাথে অভ্যস্ত হয়ে যায়) ছোট বর্ধিত পরিবর্তন করে এবং তারপরে এটি কার্যকর হয়, এক ডজন বা একাধিকবার কমিট করে চাপুন। তারপরে যখন মার্জ করার সময়টি ঘনিয়ে আসে তখন এসসিএমের কাছে আরও অনেক বিস্তৃত তথ্য রয়েছে এবং নিরাপদে এবং স্বয়ংক্রিয়ভাবে দ্বন্দ্ব সমাধানের জন্য আরও ভাল কাজ করতে পারে।
এবং তারপরে এমন সুন্দর বিবরণ রয়েছে যা জিনিসগুলিকে আরও সহজ করে তোলে:
hg mv
বা hg addremove --similarity...
) নামকরণ করা হয়েছে , যখন গিট হিউরিস্টিক ব্যবহার করে তবে উভয়ই হ্যান্ডেলের নাম পরিবর্তন করে । মার্জ হওয়া ফাইলগুলিতে 1 স্ট্রিং পার্থক্য সহ আমি গাছের সংঘাত পেতে পারি ! দুঃখিত, আপনাকে কিছু সাবভারশন দিক আবার শিখতে হবে, দুঃখিত।
rename a b
করে copy a b; remove a
এবং উভয়ই এটি একটি পারমাণবিক অঙ্গীকারে করে do একত্রিত আচরণের পার্থক্যটি কোণার কেসগুলির বিভিন্ন পরিচালনা এবং সাবভারশন থেকে মার্চুরিয়াল এবং গিটের চেয়ে বেশি সংশ্লেষের অনুমতি দেয়। পরিশেষে, গিট মার্জ এবং লগের সময়গুলিতে নতুন নামগুলি সনাক্ত করে - আমরা মার্চুরিয়ালে এটি যুক্ত করার কথা ভাবছি।