সাবভারশনের চেয়ে মার্চুরিয়ালে শাখা করা এবং মার্জ করা কেন সহজ?


92

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

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

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

এটি যেভাবে কাজ করে তাতে একটি মৌলিক পার্থক্য থাকতে হবে।

উত্তর:


115

সাবভারশন (এবং সিভিএস) এ, সংগ্রহস্থলটি প্রথম এবং সর্বাগ্রে থাকে। গিট এবং পার্কে সত্যিকার অর্থে কোনও সংগ্রহস্থলের ধারণা নেই; এখানে পরিবর্তনগুলি কেন্দ্রীয় থিম।

+1

সিভিএস / এসভিএন-এর ঝামেলা এ থেকে আসে যে এই সিস্টেমগুলি পরিবর্তনের পিতৃত্বকে স্মরণ করে না । গিট এবং মার্চুরিয়ালে, প্রতিশ্রুতিবদ্ধর দ্বারা একাধিক সন্তান থাকতে পারে না, এর একাধিক বাবা-মাও থাকতে পারে!

এটি গ্রাফিকাল সরঞ্জামগুলির একটি gitkবা সহজেই ব্যবহার করে পর্যবেক্ষণ করতে পারে hg view। নিম্নলিখিত উদাহরণে, শাখা # 2 কমিট এ-তে # 1 থেকে কাঁটাচামচ করা হয়েছিল এবং এর পরে একবারে মার্জ হয়ে গেছে (এম এ, কমিট বি এর সাথে সংযুক্ত):

o---A---o---B---o---C         (branch #1)
     \       \
      o---o---M---X---?       (branch #2)

নোট কিভাবে A এবং B, দুটি সন্তান আছে যেহেতু এম দুই বাবা । এই সম্পর্কগুলি ভান্ডারে রেকর্ড করা হয়। ধরা যাক যে শাখা # 2 এর রক্ষণাবেক্ষণকারী এখন শাখা # 1 থেকে সর্বশেষ পরিবর্তনগুলি মার্জ করতে চায়, তারা একটি আদেশ জারি করতে পারে যেমন:

$ git merge branch-1

এবং সরঞ্জামটি স্বয়ংক্রিয়ভাবে জানতে পারবে যে বেসটি বি - কারণ এটি # 2 এর টিপসের পূর্বপুরুষ, কমিট এম তে রেকর্ড করা হয়েছিল - এবং এটি বি এবং সি এর মধ্যে যা ঘটেছিল তা মার্জ করে রাখতে হবে সিভিএস এই তথ্য রেকর্ড করে না , বা সংস্করণ 1.5 এর আগে এসভিএন হয়নি। এই সিস্টেমে গ্রাফটি দেখতে পাবেন:

o---A---o---B---o---C         (branch #1)
     \    
      o---o---M---X---?       (branch #2)

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

এক জিনিসটা কি একত্রীকরণ বেস প্রথম একত্রীকরণ সময়ে করেছে (এবং এক: খারাপ এখনো, একটি দ্বিতীয় একত্রীকরণ করণ একটি দুঃস্বপ্ন হয়ে গেছে করার জানেন তারপর বর্তমান যে সেখানে প্রথম স্থানে মার্জ হয়েছে!), সরঞ্জামটির তথ্য যাতে এটি এম এর উপরে A..B পুনরায় চালিত করার চেষ্টা না করে তবে ঘনিষ্ঠ সহযোগিতায় কাজ করার সময় এগুলি সবই যথেষ্ট কঠিন, তবে বিতরণ পরিবেশে কেবল অসম্ভব।

ক (সম্পর্কিত) সমস্যাটি হ'ল প্রশ্নের উত্তর দেওয়ার কোনও উপায় নেই: "এক্সে কি বি থাকে?" যেখানে বি একটি সম্ভাব্য গুরুত্বপূর্ণ বাগ ফিক্স। সুতরাং, কেন কেবল সেই তথ্যটি কমিটের মধ্যে রেকর্ড করা হবে না, যেহেতু এটি মার্জ করার সময় জানা যায়!

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


6
এসভিএন 1.5+ প্রকৃতপক্ষে মার্জ কমিট এম এর তালিকাতে মার্জ কমিটের তালিকাতে একটি এসভিএন সম্পত্তি রাখবে, অন্য কথায় এটি এবি। সুতরাং আপনার একই তথ্য আছে।
সাইমন ডি

ধরনের। প্রযুক্তিগতভাবে, এসভিএন-এর মার্জ ট্র্যাকিং গিটকে "চেরি-বাছাই" এর অনুরূপ, যা অতিরিক্ত যাদুতে ব্যবহারকারীর পক্ষে আরও সহজ করে তোলে; এটি মার্জ করার সময় গিট, এইচজি এবং বিজিআর যা করেন তা থেকে শব্দার্থগতভাবে আলাদা। আমি অনুমান করি যতক্ষণ না আপনি ডিএজি ( eagain.net/articles/git-for- কম্পিউটার কম্পিউটার-বিজ্ঞানীদের ) সম্পর্কে যত্নবান না হন ততক্ষণ এটি অনুশীলনে খুব বেশি পার্থক্য তৈরি করে না ।
ড্যামিয়েন ডিয়েডেরেন

4
ধিক যে +100 বোতাম নেই। ধন্যবাদ
চার্লি ফুল

আমি ধরে নিলাম যে এসভিএন 1.5 বৈশিষ্ট্যটি আপনি যে বিষয়ে কথা বলছেন তা কি svn:mergeinfoসম্পত্তিটির ব্যবহার ?
ম্যাট্রিক্সফ্রোগ

@ ম্যাট্রিক্সফ্রোগ: হ্যাঁ, এটি ঠিক তাই svn:mergeinfoকরে।
sleske

12

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


7

ইতিমধ্যে সরবরাহিত যে কোনও উত্তরের দ্বারা নিঃসৃত , এইচজি উচ্চতর সংশ্লেষের ক্ষমতা সরবরাহ করেছে কারণ পরিবর্তনগুলি মার্জ করার সময় এটি আরও তথ্য ব্যবহার করে ( hginit.com ):

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

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

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


4

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


3

সাবভারশন (এবং সিভিএস) এ, সংগ্রহস্থলটি প্রথম এবং সর্বাগ্রে থাকে। গিট এবং পার্কে সত্যিকার অর্থে কোনও সংগ্রহস্থলের ধারণা নেই; এখানে পরিবর্তনগুলি কেন্দ্রীয় থিম।

আপনি কীভাবে বাস্তবায়ন করবেন সে সম্পর্কে আমি খুব বেশি চিন্তা করিনি তবে আমার ধারণা (তিক্ত অভিজ্ঞতা এবং প্রচুর পড়ার উপর ভিত্তি করে) হ'ল এই পার্থক্যটি হ'ল অ-সংগ্রহস্থল ভিত্তিক সিস্টেমে একত্রিত হওয়া এবং ব্রাঞ্চ করা এত সহজ easier


1

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

মার্চুরিয়াল যদি মার্জটির কনফিগারেশনটিকে আরও সহজ করে তুলতে পারে তবে আমি বলতে পারি যে এটি 100% একত্রীকরণকে আরও সহজ করে তুলবে সাবসারশন।

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