গিট বা পারদার্থের তুলনায় এসএনএন-এ একীভূত হওয়ার মধ্যে কি পার্থক্য রয়েছে?


12

আমার বোঝা থেকে এসভিএন হ'ল শাখা থেকে সহজ। একত্রিত করা কঠিন '। কেন এমন? তারা কীভাবে একীভূত হয় তাতে কোনও পার্থক্য রয়েছে?

git  svn  mercurial  dvcs 

উত্তর:


21

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

টিডামার্স উত্তর সম্পর্কে, তারপর সেখানে অনেক ভুল বোঝাবুঝি আছে:

  • সাবভারশন, মার্কুরিয়াল এবং গিট প্রকল্পের সমস্ত ট্র্যাক সংগ্রহস্থল-প্রশস্ত স্ন্যাপশট। তাদের সংস্করণ , সংশোধন বা চেঞ্জসেটগুলি কল করা কোনও পার্থক্য করে না। এগুলি সমস্ত ফাইলের একটি সেট যৌক্তিকভাবে পারমাণবিক স্ন্যাপশট।

  • মার্জ করার ক্ষেত্রে আপনার কমিটের আকার কোনও পার্থক্য করে না । সমস্ত তিনটি সিস্টেমে স্ট্যান্ডার্ড থ্রি-ওয়ে মার্জ অ্যালগরিদম এবং সেই অ্যালগরিদমের ইনপুটগুলি একত্রিত করে

    • সর্বশ্রেষ্ঠ সাধারণ পূর্বপুরুষ সংস্করণ
    • এক শাখায় সংস্করণ
    • অন্যান্য শাখায় সংস্করণ

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

তিনি পার্থক্য সম্পর্কে কিছু ভাল পয়েন্ট উত্থাপন:

  • সাবভার্শনের কিছু "ভুডু" রয়েছে যেখানে আপনি মেশান করতে পারেন /trunk, বলুন /branches/foo,। মার্চুরিয়াল এবং গিট এই মডেলটি ব্যবহার করে না - শাখাগুলি পরিবর্তে ইতিহাসে সরাসরি মডেল করা হয়। ইতিহাস তাই লিনিয়ার হওয়ার পরিবর্তে নির্দেশিত অ্যাসাইক্লিক গ্রাফে পরিণত হয় । সাবভারসিওন দ্বারা ব্যবহৃত মডেলের চেয়ে এটি অনেক সহজ মডেল এবং এটি কর্নারের কয়েকটি কেস কেটে দেয়।

  • আপনি সহজেই মার্জ করতে বিলম্ব করতে পারেন বা অন্য কাউকে এটি পরিচালনা করতেও পারেন। যদি hg mergeআপনাকে hg pullপ্রচুর দ্বন্দ্ব দেয়, তবে আপনি আপনার সহকর্মীকে আপনার কাছ থেকে জিজ্ঞাসা করতে পারেন এবং তার ঠিক একই অবস্থা রয়েছে। সুতরাং তিনি পারেন hg mergeএবং আপনার চেয়ে দ্বন্দ্ব সমাধানে তিনি আরও ভাল।

    সাবভার্সনের ক্ষেত্রে এটি খুব কঠিন যেখানে আপনার প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনাকে আপডেট করতে হবে। আপনি কেবল সার্ভারের পরিবর্তনগুলি উপেক্ষা করতে এবং আপনার নিজের বেনামে শাখা প্রতিশ্রুতিবদ্ধ রাখতে পারবেন না। সাধারণভাবে, সাবভার্সন আপনাকে যখন নোংরা ওয়ার্কিং কপি নিয়ে খেলা করতে বাধ্য করে svn update। আপনি নিজের পরিবর্তনগুলি কোথাও সুরক্ষিত না রাখায় এটি এক ধরণের ঝুঁকিপূর্ণ। গিট এবং মার্চুরিয়াল আপনাকে প্রথমে প্রতিশ্রুতিবদ্ধ করতে এবং তারপরে আপডেট এবং প্রয়োজনীয় হিসাবে মার্জ করতে দেয়।

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


4
দুর্দান্ত উত্তর! আমি পারলে দু'বার উপরে উঠতাম। :) আমি এই যে এসভিএন বইটি আপনি এসও উত্তরে উল্লেখ করেছেন তা স্পষ্টভাবে স্বীকার করেছেন যে "সাবভার্সনের মার্জ-ট্র্যাকিং বৈশিষ্ট্যটির একটি অত্যন্ত জটিল অভ্যন্তরীণ বাস্তবায়ন রয়েছে ..." - এটি একাকী খুব ভাল ইঙ্গিত যা বৈশিষ্ট্যটি অবিশ্বস্ত
জনাট

2
... এবং এমনকি যে অত্যন্ত জটিল বাস্তবায়ন সাধারণ পূর্বপুরুষকে সঠিকভাবে কিন্তু কোনও সাধারণ ক্ষেত্রে খুঁজে বের করতে পারে না।
জানু হুডেক

বিলম্বিত সংযুক্তি সম্পর্কে - এটি পাবেন না - এসভিএন এর সাথে আমার সহকর্মী ট্রাঙ্কে / চেকআউটটি আপডেট করতে পারেন এবং তারপরে আমার শাখা থেকে এতে মার্জ করতে পারেন।
গিল বেটস

@ গিলবেটস: আমি এমন পরিস্থিতির কথা বলছি যেখানে আপনি আপনার কাজের জন্য কোনও শাখা শুরু করেন নি - যখন আপনি trunkএসভিএন-এ কাজ করছেন । ডিভিসিএসের সাহায্যে আপনি ভাগ না করেই প্রতিশ্রুতিবদ্ধ করতে পারেন তবে এসভিএন-এ আপনার svn commitসরাসরি একই শাখায় কাজ করা অন্যকে প্রভাবিত করবে। এমনকি যদি আমরা দুজন এসভিএন-তে একটি শাখায় কাজ করি তবে তাত্ক্ষণিকভাবে আপনার কাজের সাথে সংযুক্ত না হয়েও আমি আমার কাজ করতে বাধ্য করতে পারি না। এটি কমিটিকে কিছুটা ভীতিজনক করে তোলে - যা কোনও সংস্করণ নিয়ন্ত্রণ সিস্টেমের জন্য একটি ভীতিজনক সম্পত্তি! :-)
মার্টিন গিসার

6

মূল সমস্যাগুলি এই সিস্টেমগুলি কোনও সংস্করণযুক্ত ডিরেক্টরি কাঠামোর প্রতিনিধিত্ব করে in

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

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

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

এবং তারপরে এমন সুন্দর বিবরণ রয়েছে যা জিনিসগুলিকে আরও সহজ করে তোলে:

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

2
আমাকে কিছু সংশোধন উল্লেখ করতে হবে এবং এর উত্তর যোগ করতে হবে: ১. এসভিএন সংশোধনগুলি বিশ্বব্যাপী প্রতি-সংগ্রহস্থল , কিছু মুহুর্তে পুনর্বিবেশনায় সমস্ত ফাইলকে উপস্থাপন করে २. মার্জ প্রযুক্তি মূলত এসভিএন এবং ডিভিসিএস-এ সাধারণ হয় - যদি মার্জ ফাইলগুলিতে ফাইলটি কেবল পরিবর্তিত হয় একইভাবে , মার্জটি এসভিএন এবং ডিভিসিএসের জন্য একই পরিমাণে দ্বন্দ্ব তৈরি করবে - সমস্ত এসসিএম এখনও স্ট্রিং-লেভেলে কাজ করে, লজিকাল ব্লক নয় S. এসভিএন-তে বড় কমিটগুলি স্থাপত্য দুর্বলতার ফল নয়, তবে ব্যবহারকারীরা প্রায়শই অলস বুদ্ধিমান হন because - তারা মৌলিক নিদর্শন উপেক্ষা করে। শাখা | একত্রীকরণ SVN এ কাজ করে, যদি / dev / brain এবং / dev / হাত কাজ করে
অলস ব্যাজার

2
পার্ট 2: ডিভিসিএসে স্মার্ট মার্জ কারণ বেশিরভাগ ক্ষেত্রে ঘটে কারণ সাবভার্সনের বিপরীতে, তারা চলনগুলি ট্র্যাক করে এবং পরিচালনা করে | ফাইলগুলির নাম এবং এসভিএন মোটেও তা করে না, এইভাবে - যে কোনও অপারেশন, ফাইলটি প্রক্রিয়া করে, একদিকে বদলে যায় এবং নাম পরিবর্তন করে on দ্বিতীয়, ব্যর্থ হবে। শাখাগুলি এবং ক্লোনিংয়ের সাথে শাখা করা একইভাবে বেঁচে থাকার একই অধিকারের সাথে শাখার বিভিন্ন কৌশল, যা "... নির্ভর করে ..."
অলস ব্যাজার

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

@ জানহুদেক - দুঃখিত, এসভিএন হ্যান্ডেলটি সরল না | পারমাণবিক এক ক্রমে পুনরায় নামকরণ করুন (ডিভিসিএস উপায় - "পুনরায় নামকরণ"), তবে "মুছুন + ..." হিসাবে, এভাবে গাছের সংঘাত তৈরি হয়, যেখানে এটি ডিভিসিএসে ঘটে না ( সত্যিকারের নাম পরিবর্তন) )। মার্চুরিয়াল ট্র্যাকের নামগুলি স্পষ্টভাবে ( hg mvবা hg addremove --similarity...) নামকরণ করা হয়েছে , যখন গিট হিউরিস্টিক ব্যবহার করে তবে উভয়ই হ্যান্ডেলের নাম পরিবর্তন করে । মার্জ হওয়া ফাইলগুলিতে 1 স্ট্রিং পার্থক্য সহ আমি গাছের সংঘাত পেতে পারি ! দুঃখিত, আপনাকে কিছু সাবভারশন দিক আবার শিখতে হবে, দুঃখিত।
অলস ব্যাজার

5
এখন আমরা বেশ প্রযুক্তিগত :-) উভয় সাবভারশন এবং মার্কুরিয়াল ট্র্যাক অনুলিপি , নাম পরিবর্তন করে না। উভয় সিস্টেমই ট্র্যাক rename a bকরে copy a b; remove aএবং উভয়ই এটি একটি পারমাণবিক অঙ্গীকারে করে do একত্রিত আচরণের পার্থক্যটি কোণার কেসগুলির বিভিন্ন পরিচালনা এবং সাবভারশন থেকে মার্চুরিয়াল এবং গিটের চেয়ে বেশি সংশ্লেষের অনুমতি দেয়। পরিশেষে, গিট মার্জ এবং লগের সময়গুলিতে নতুন নামগুলি সনাক্ত করে - আমরা মার্চুরিয়ালে এটি যুক্ত করার কথা ভাবছি।
মার্টিন গিজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.