মার্জ করা: এইচজি / গিট বনাম এসভিএন


144

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

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

সুতরাং আমি এখনও এসভিএন থেকে এইচজি / গিটের সুবিধাগুলি সন্ধান করার চেষ্টা করছি। আমি কিছুটা অভিজ্ঞতা অর্জন করতে চাই, তবে এমন কোনও বড় প্রকল্প নেই যা আমরা এখনও এইচজি / গিতে যেতে পারি, তাই আমি ছোট্ট কৃত্রিম প্রকল্পের সাথে খেলতে আটকে আছি যেখানে কেবল কয়েকটি তৈরি ফাইল রয়েছে। এবং আমি কয়েকটি ক্ষেত্রে সন্ধান করছি যেখানে আপনি Hg / Git এর চিত্তাকর্ষক শক্তি অনুভব করতে পারেন, যেহেতু এখন পর্যন্ত আমি প্রায়শই সেগুলি সম্পর্কে পড়েছি তবে সেগুলি আমি নিজে খুঁজে পাইনি।


2
আমার মনে হয় আপনার সঠিক ডুপ্লিকেটগুলিতে মনোযোগ দেওয়া উচিত: স্ট্যাকওভারফ্লো / প্রশ্ন / 43৩৯৯৫/২
পি মার্ভ

11
আমি ইতিমধ্যে প্রথমটি পড়েছি, অন্যটি নতুন ছিল। তবে তারা ইতিমধ্যে 1-2 বছর বয়সী এবং বেশিরভাগ প্রাক-এসএনএন -২.৫ সম্পর্কিত সমস্যা সম্পর্কে মনে হয় (যেখানে এসএনএন এখনও মার্জ ট্র্যাকিং করেনি)।
stmax

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

5
@ ওয়েড: আপনি কি "কর্পোরেট" শাখাগুলি কর্পোরেট পরিবেশে সুবিধা হিসাবে দেখছেন? আমি ব্যাকআপ নিয়ে উদ্বিগ্ন। আমার প্রায়শই ফিচার শাখাগুলি থাকে যা পুনরায়
একীকরণের

9
@stmax: একটি বৈধ উদ্বেগ যাইহোক, আপনি বিপর্যয়ের সাথে প্রচুর কর্পোরেট পরিবেশে যা খুঁজে পান তা হ'ল লোকেরা তাদের কোডটি নিখুঁত হওয়া অবধি চেক ইন করা বন্ধ রাখে এবং সেখানে আপনার একইরকম এক্সপোজার থাকে।
wadesworld

উত্তর:


91

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

  • ট্রাঙ্কে শাখায় মার্জ করার জন্য ট্রাঙ্কে মার্জ হওয়া থেকে আলাদা: কোনও কারণে ট্রাঙ্ককে শাখায় মার্জ করার --reintegrateবিকল্পের প্রয়োজন হয় svn merge

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

  • আপনাকে নতুন -g( --use-merge-history) বিকল্পটি সরবরাহ করতে হবেsvn log এবং svn blameঅ্যাকাউন্টে একত্রীকরণ ট্র্যাকিং নিতে।

    ইতিহাস (লগ) এবং দোষ প্রদর্শন করার সময় গিট এবং মার্কুরিয়াল মার্জ ট্র্যাকিং স্বয়ংক্রিয়ভাবে বিবেচনায় নেওয়া হয়। গিটে আপনি প্রথম পিতামাতার সাথে কেবল --first-parentম্যাকুয়ারিয়ালের অনুরূপ বিকল্পটি উপস্থিত থাকতে অনুরোধ করতে পারেন (মার্জুরিয়ালের ক্ষেত্রেও একই বিকল্প রয়েছে) মার্জ ট্র্যাকিংয়ের তথ্য "বাতিল" করতে git log

  • svn:mergeinfoসংঘাতগুলি সম্পর্কে প্রতি-পাথের তথ্যের জন্য আমি সম্পত্তি সঞ্চয়গুলি কী বুঝতে পারি তা থেকে (সাবভারশনটি চেঞ্জসেট-ভিত্তিক), যখন গিট এবং মারকুরিয়ালে এটি কেবল একাধিক পিতা-মাতার থাকতে পারে এমন বস্তুর প্রতিশ্রুতি দেয়।

  • সাবভার্শনে মার্জ ট্র্যাকিংয়ের জন্য "জ্ঞাত সমস্যাগুলি" উপবিধানটি পরামর্শ দেয় যে পুনরাবৃত্ত / চক্র / প্রতিফলিত মার্জ সঠিকভাবে কাজ করতে পারে না। এর অর্থ হল যে নিম্নলিখিত ইতিহাসের সাথে দ্বিতীয় সংশ্লেষ সঠিক জিনিসটি না করতে পারে ('এ' ট্রাঙ্ক বা শাখা হতে পারে এবং 'বি' যথাক্রমে শাখা বা ট্রাঙ্ক হতে পারে):

    * --- * --- x --- * --- y --- * --- * * * এম 2 <- এ
             \ \ /
              - * ---- এম 1 --- * --- * --- / <- বি
    

    ক্ষেত্রে উপরের ASCII- শিল্পটি নষ্ট হয়ে যায়: শাখা 'B' শাখা 'এ' থেকে সংশোধন 'x' থেকে তৈরি করা হয়েছে (কাঁটাচামচ), পরে শাখা 'এ' পুনর্বিবেচনায় 'y' শাখাকে 'বি' হিসাবে মিশ্রিত করা হবে 'এম 1' মার্জ করুন এবং শেষ পর্যন্ত শাখা 'বি' মার্চ 'এম 2' হিসাবে শাখা 'এ' তে মিশ্রিত হবে।

    * --- * --- x --- * ----- এম 1 - * --- * --- এম 2 <- এ
             \ / / 
              \ - * --- y --- * --- * --- / <- বি
    

    উপরের ASCII- শিল্পটি নষ্ট হয়ে যায়: শাখা 'B' শাখা 'এ' থেকে সংশোধন 'x' থেকে তৈরি হয়েছে (কাঁটাচামচ), এটি 'y' তে 'এম 1' হিসাবে এবং পরে আবার 'এ 2' শাখায় 'এম 2' হিসাবে যুক্ত হয়ে গেল।

  • সাবভার্সন ক্রস-ক্রস সংযুক্তির উন্নত ক্ষেত্রে সমর্থন করবে না ।

    * --- খ ----- খ 1 - এম 1 - * --- M3
         \ \ / /
          \ এক্স /
           \ / \ /
            \ - B2 তে -, M2 - *
    

    গিট "পুনরাবৃত্ত" মার্জ কৌশল ব্যবহার করে অনুশীলনে ঠিক এই পরিস্থিতি পরিচালনা করে। আমি মার্চুরিয়াল সম্পর্কে নিশ্চিত নই।

  • ইন "জ্ঞাত সমস্যা" যে একত্রীকরণ ট্র্যাকিং migh ফাইল renames, যেমন সঙ্গে কাজ করে না সাবধান যখন এক দিকে (পুরাতন নাম অধীনে) পুনঃনামকরনের ছাড়া ফাইল (এবং সম্ভবত এটি পরিবর্তন), এবং দ্বিতীয় পার্শ্ব মডিফাই ফাইল renames করা হয়।

    গিট এবং মার্কিউরিয়াল উভয়ই এই জাতীয় ব্যবহারকে বাস্তবে ঠিকঠাকভাবে পরিচালনা করে: নাম পরিবর্তন সনাক্তকরণ ব্যবহার করে গিট ব্যবহার Mercurial পুনঃনামকরণ ট্র্যাকিং

আছে HTH


একরকম (মার্কডাউন পার্সারে ত্রুটি?) <pre>...</pre>ব্লকের পরে অংশটি যেমন হওয়া উচিত তেমন ইন্টেন্ট করা হয় না ...
জাকুব নরবস্কি

1
বহু বিস্তারিত উদাহরণের জন্য +1। আমি এখনও বুঝতে পারি না কেন প্রথম অ্যাসি-আর্টের উদাহরণটি সমস্যার কারণ হতে পারে। এটি বৈশিষ্ট্যযুক্ত শাখাগুলির চিকিত্সার মানক পদ্ধতির মতো দেখাচ্ছে: ধরে নিন এ ট্রাঙ্ক, বি একটি বৈশিষ্ট্য শাখা। আপনি সাপ্তাহিক এ থেকে বিতে মার্জ করেন এবং বৈশিষ্ট্যটি সম্পন্ন করার পরে আপনি বি থেকে ক এ সবকিছুকে মার্জ করে এবং তারপরে বি মুছুন যা সর্বদা আমার পক্ষে কাজ করে। আমি চিত্রটি ভুল বুঝেছি?
stmax

1
নোট করুন যে আমি জানি না (আমি পরীক্ষা করে দেখিনি) যে উপরে বর্ণিত উদাহরণগুলি সাবভারশনটিতে সত্যই সমস্যা দেয় । পুনরায় নাম এবং সংকট ক্রস একত্রিত করা এসভিএন-এ আসল সমস্যা I
জাকুব নারেবস্কি

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

--reintegrateঅবচয় করা হয়।
ননট 101

120

আমিও একটি মামলার সন্ধান করছি যেখানে বলি, সাবভার্সন কোনও শাখা মার্জ করে ফেলতে ব্যর্থ হয় এবং মার্চুরিয়াল (এবং গিট, বাজার, ...) সঠিক কাজ করে।

এসভিএন বুক বর্ণনা করেছে যে নাম পরিবর্তন করা ফাইলগুলি কীভাবে ভুলভাবে মার্জ করা হয়েছে । এটি সাবভার্সন 1.5 , 1.6 , 1.7 এবং 1.8 এ প্রযোজ্য ! আমি নীচে পরিস্থিতি পুনরায় তৈরি করার চেষ্টা করেছি:

সিডি / টিএমপি
আরএম - আরএফ এসএনএন - রেপো এসএনএন - চেকআউট
svnadmin তৈরি করুন svn - রেপো
এসএনএন চেকআউট ফাইল : /// tmp / svn - রেপো এসএনএন - চেকআউট
সিডি এসএনএন - চেকআউট
mkdir ট্রাঙ্ক শাখা
প্রতিবেদন 'বিদায়, বিশ্ব!' > ট্রাঙ্ক / হ্যালো পাঠ্য 
এসএনএন ট্রাঙ্ক শাখা যুক্ত করুন
এসএনএন কমিট - এম 'প্রাথমিক আমদানি' 
এসএনএন অনুলিপি '^ / ট্রাঙ্ক' 'branches / শাখা / পুনঃনামকরণ' - এম 'শাখা তৈরি করুন।' 
এসএনএন সুইচ '^ / ট্রাঙ্ক' 
প্রতিধ্বনি 'হ্যালো, ওয়ার্ল্ড!' > হ্যালো পাঠ্য    
এসএনএন কমিট - এম 'ট্রাঙ্কের উপর আপডেট।' 
এসএনএন সুইচ ' branches / শাখা / পুনর্নামকরণ' 
এসএনএন নামকরণ হ্যালো txt হ্যালো en পাঠ্য 
এসএনএন কমিট - এম 'শাখায় নাম পরিবর্তন করুন।' 
এসএনএন সুইচ '^ / ট্রাঙ্ক' 
এসএনএন মার্জ - পুনরায় সংহত ' branches / শাখা / পুনর্নবীকরণ' 

বই অনুসারে, মার্জটি পরিষ্কারভাবে শেষ করা উচিত, তবে আপডেটটি trunkভুলে যাওয়ায় নাম পরিবর্তন করা ফাইলটিতে ভুল ডেটা রয়েছে । পরিবর্তে আমি গাছের সংঘাত পেয়েছি (এটি সাবভারশন ১. 1..১7 এর সাথে, লেখার সময় দেবিয়ানের নতুন সংস্করণ):

--- সংগ্রহস্থল URL গুলির মধ্যে পার্থক্য একত্রিত করা '।':
একটি হ্যালো.ইন টেক্সট
   সি হ্যালো.টেক্সট
সংঘাতের সংক্ষিপ্তসার:
  গাছের সংঘাত: ১

কোনও দ্বন্দ্ব হওয়া উচিত নয় - আপডেটটি ফাইলের নতুন নামে মিশ্রিত করা উচিত। সাবভারশন ব্যর্থ হওয়ার পরে, মার্চুরিয়াল এটি সঠিকভাবে পরিচালনা করে:

rm -rf /tmp/hg-repo
hg init /tmp/hg-repo
cd /tmp/hg-repo
echo 'Goodbye, World!' > hello.txt
hg add hello.txt
hg commit -m 'Initial import.'
echo 'Hello, World!' > hello.txt
hg commit -m 'Update.'
hg update 0
hg rename hello.txt hello.en.txt
hg commit -m 'Rename.'
hg merge

সংশ্লেষের আগে, সংগ্রহস্থলটি দেখতে (যেমন থেকে hg glog) দেখাচ্ছে:

@ চেঞ্জসেট: 2: 6502899164cc
| ট্যাগ: টিপ
| অভিভাবক: 0: d08bcebadd9e
| ব্যবহারকারী: মার্টিন গিজলার
| তারিখ: আপনি এপ্রিল 01 12:29:19 2010 +0200
| সংক্ষিপ্তসার: নতুন নামকরণ।
|
| ও চেঞ্জসেট: 1: 9d06fa155634
| / ব্যবহারকারী: মার্টিন গিজলার 
| তারিখ: আপনি এপ্রিল 01 12:29:18 2010 +0200
| সংক্ষিপ্তসার: আপডেট।
|
ও চেঞ্জসেট: 0: d08bcebadd9e
   ব্যবহারকারী: মার্টিন গিজলার 
   তারিখ: আপনি এপ্রিল 01 12:29:18 2010 +0200
   সংক্ষিপ্তসার: প্রাথমিক আমদানি।

মার্জ আউটপুট হয়:

হেলো.ইন টেক্সট এবং হ্যালো.টেক্সটকে হ্যালোইন টেক্সটে মার্জ করা হচ্ছে
0 টি ফাইল আপডেট হয়েছে, 1 টি ফাইল মার্জ হয়েছে, 0 টি ফাইল সরানো হয়েছে, 0 টি ফাইল অমীমাংসিত
(শাখা সংহত, প্রতিশ্রুতি দিতে ভুলবেন না)

অন্য কথায়: মার্চুরিয়াল সংশোধন 1 থেকে পরিবর্তন নিয়েছে এবং এটিকে পুনর্বিবেচনা 2 ( hello.en.txt) থেকে নতুন ফাইলের নামের সাথে একীভূত করেছে । রিফ্যাক্টরিং এবং রিফ্যাক্টরিং সমর্থন করার জন্য এই কেসটি পরিচালনা করা অবশ্যই প্রয়োজনীয়, আপনি কোনও শাখায় ঠিক কী ধরনের কাজ করতে চাইবেন তা।


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

4
@ ড্যারেনডাব্লু: আমি সংশ্লিষ্ট মারকুরিয়াল কমান্ড যুক্ত করেছি, আমি আশা করি এটি বিষয়গুলি আরও পরিষ্কার করে দেবে!
মার্টিন গিসলার

17

স্বাভাবিক সুবিধার কথা না বলে (অফলাইন কমিট, প্রকাশনা প্রক্রিয়া , ...) এখানে একটি "মার্জ" উদাহরণটি আমার পছন্দ:

আমি যে মুখ্য দৃশ্যটি দেখছি তা হ'ল একটি শাখা যার উপর ... দুটি অপ্রাসঙ্গিক কাজগুলি আসলে বিকাশ করা হয়েছে
(এটি একটি বৈশিষ্ট্য থেকে শুরু হয়েছিল, তবে এটি এই অন্যান্য বৈশিষ্ট্যটির বিকাশের দিকে পরিচালিত করে
Or বা এটি কোনও প্যাচ থেকে শুরু হয়েছিল, তবে এটি নেতৃত্ব দেয়) অন্য বৈশিষ্ট্যের বিকাশ)।

আপনি প্রধান শাখায় দুটি বৈশিষ্ট্যের মধ্যে কেবল একটিকে কীভাবে মার্জ করবেন?
বা কীভাবে আপনি দুটি নিজস্ব বৈশিষ্ট্যগুলি তাদের শাখাগুলিতে পৃথক করবেন?

আপনি কিছু ধরণের প্যাচ উত্পন্ন করার চেষ্টা করতে পারেন, তার সাথে সমস্যা হ'ল আপনি যে কার্যকরী নির্ভরতাগুলির মধ্যে বিদ্যমান থাকতে পারেন সে সম্পর্কে আর নিশ্চিত নন :

  • আপনার প্যাচগুলিতে ব্যবহৃত কমিট (বা এসভিএন এর জন্য পুনর্বিবেচনা)
  • অন্যটি প্যাচটির অংশ না বলে প্রতিশ্রুতিবদ্ধ

গিট (এবং মার্চুরিয়ালও আমি মনে করি) একটি শাখার অংশ পুনরায় (শাখার মূল পুনরায় সেট করতে) পুনর্বাসনের --onto বিকল্পটি প্রস্তাব করি:

থেকে Jefromi এর পোস্ট

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

আপনি v2 এর জন্য প্যাচগুলি পাশাপাশি একটি নতুন ডাব্লুএসইএস বৈশিষ্ট্যটিতে এই অবস্থাটি আঁকতে পারেন:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

, আপনাকে অনুমতি দেয়:

  • প্রতিটি শাখা বিচ্ছিন্নভাবে পরীক্ষা করে দেখুন যেভাবে প্রতিটি কাজ করা / উদ্দেশ্য হিসাবে ঠিক করা হয়েছে তা পরীক্ষা করে দেখুন
  • আপনি যা মুখ্য করতে চান তা কেবল মার্জ করুন।

আমার পছন্দ মতো অন্যান্য বৈশিষ্ট্য (যা মার্জগুলিকে প্রভাবিত করে) হ'ল স্কোয়াশ করার ক্ষমতা (একটি শাখায় এখনও অন্য রেপোতে ঠেলা যায় না) উপস্থাপনের জন্য:

  • একটি ক্লিনার ইতিহাস
  • কমিটস যা আরও সুসংগত (ফাংশন 1 এর জন্য কমিট 1 এর পরিবর্তে, ফাংশন 2 এর জন্য কমিট 2, ফাংশন 1 এর জন্য আবার কমিট 3 ...)

এটি কম বিবাদগুলির সাথে মার্জগুলি নিশ্চিত করে যা অনেক সহজ।


এসএনএন-এর অফলাইন কমিট নেই? rofl? এমনকি যদি কেউ এটির ব্যবহার করে তা দূর থেকেও বিবেচনা করতে পারে?
o0 '

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

@ ম্যাক্সনানসি একটি খুব খারাপ ধরণের জড়তা ... তবুও, এখনই এটি নির্বাচন করা বোকামি হবে।
o0 '

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

1
@ লোহরিস আমি মনে করি আপনি ডিবি, ফায়ারওয়াল ইত্যাদির বিষয়ে আমার বক্তব্য ভুল বুঝেছেন: আমি যদি প্রথমে এই কোডটি চালাতে না পারি তবে আমার ঘরের মেশিনে প্রতিশ্রুতিবদ্ধ হতে পারার সামান্য বিষয় আছে । আমি অন্ধ হয়ে কাজ করতে পারি , তবে আমি কোথাও জিনিস প্রতিপন্ন করতে পারি না তা আমাকে বাদ দেওয়া মূল বিষয় নয়।
আইএমএসওপি

8

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

যদিও আমি আপনাকে বলতে পারি যে, জিআইটি হ'ল এসভিএন এর চেয়ে মার্জ করাতে অনেক ভাল । এটি স্পষ্টতই কৌতুকপূর্ণ, তবে অনুসরণ করার জন্য একটি টেবিল রয়েছে।

এখানে আমরা কিছু জিনিস খুঁজে পেয়েছি:

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

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

জিআইটি বনাম এসভিএন মার্জ মূল্যায়ন


5

অন্যরা এর আরও তাত্ত্বিক দিকগুলি আবৃত করেছেন। সম্ভবত আমি আরও ব্যবহারিক দৃষ্টিকোণ ধার দিতে পারি।

আমি বর্তমানে এমন একটি সংস্থার জন্য কাজ করছি যা "ফিচার ব্রাঞ্চ" ডেভেলপমেন্ট মডেলে এসভিএন ব্যবহার করে। এটাই:

  • ট্রাঙ্কে কোনও কাজ করা যায় না
  • প্রতিটি বিকাশকারী তাদের নিজস্ব শাখা তৈরি করতে পারে
  • শাখাগুলি কার্য সম্পাদনের সময়কালের জন্য স্থায়ী হওয়া উচিত
  • প্রতিটি কাজের নিজস্ব শাখা থাকা উচিত have
  • ট্রাঙ্কে ফিরে মার্জ করার অনুমতি দেওয়া দরকার (সাধারণত বাগজিলার মাধ্যমে)
  • এমন সময়ে যখন উচ্চ স্তরের নিয়ন্ত্রণের প্রয়োজন হয়, গেটকিপার দ্বারা মার্জগুলি করা যেতে পারে

সাধারণভাবে, এটি কাজ করে। এসভিএন এই জাতীয় প্রবাহের জন্য ব্যবহার করা যেতে পারে তবে এটি নিখুঁত নয়। এসভিএন এর কিছু দিক রয়েছে যা মানুষের আচরণের পথে আসে। এটি এটিকে কিছু নেতিবাচক দিক দেয়।

  • লোকেরা এর চেয়ে কম পয়েন্ট থেকে শাখা প্রশাখা নিয়ে আমাদের বেশ কয়েকটি সমস্যা হয়েছে ^/trunk। এই লিটারগুলি পুরো গাছ জুড়ে তথ্যের রেকর্ডগুলিকে একত্রিত করে এবং শেষ পর্যন্ত মার্জ ট্র্যাকিংটি ভেঙে দেয়। মিথ্যা দ্বন্দ্ব উপস্থিত হতে শুরু করে এবং বিভ্রান্তির রাজত্ব ঘটে।
  • ট্রাঙ্ক থেকে একটি শাখায় পরিবর্তনগুলি তুলনা তুলনামূলকভাবে সোজা এগিয়ে। svn mergeআপনি যা চান তা করে আপনার পরিবর্তনগুলি আবার মার্জ --reintegrateকরার জন্য মার্জ কমান্ডটিতে (আমাদের বলা হয়েছে) দরকার । আমি এই সুইচটি সত্যই বুঝতে পারি নি, তবে এর অর্থ এই যে শাখাটি আবার ট্রাঙ্কে মিশে যায় না। এর অর্থ এটি একটি মৃত শাখা এবং কাজ চালিয়ে যাওয়ার জন্য আপনাকে একটি নতুন তৈরি করতে হবে। (নোট দেখা)
  • ইউআরএলগুলির মাধ্যমে সার্ভারে অপারেশন করার পুরো ব্যবসাটি যখন শাখা তৈরি করে এবং মুছে ফেলা হয় তখন লোকেদের সত্যিই বিভ্রান্ত করে এবং ভয় দেখায়। সুতরাং তারা এড়াতে।
  • শাখাগুলির মধ্যে স্যুইচ করা ভুল হওয়া সহজ, একটি গাছের শাখা এ এর ​​দিকে তাকিয়ে রেখে অন্য অংশটি শাখা বিয়ের দিকে তাকাতে থাকায় লোকেরা তাদের সমস্ত কাজ একটি শাখায় করতে পছন্দ করে।

যেটি ঘটতে পারে তা হ'ল একজন ইঞ্জিনিয়ার প্রথম দিন একটি শাখা তৈরি করে He সে তার কাজ শুরু করে এবং সে সম্পর্কে ভুলে যায়। কিছু সময় পরে একজন বস এসে জিজ্ঞাসা করলেন যে তিনি তার কাজটি ট্রাঙ্কে ছেড়ে দিতে পারেন কিনা। ইঞ্জিনিয়ার এই দিনটিকে ভয়ঙ্কর করে চলেছে কারণ পুনর্নির্মাণের অর্থ:

  • তাঁর দীর্ঘকালীন শাখাটি আবার ট্রাঙ্কে মিশ্রিত করা এবং সমস্ত দ্বন্দ্ব সমাধান করা এবং অপ্রস্তুত কোড প্রকাশ করা যা একটি পৃথক শাখায় থাকা উচিত ছিল, কিন্তু তা ছিল না।
  • তার শাখা মুছে ফেলা হচ্ছে
  • একটি নতুন শাখা তৈরি করা হচ্ছে
  • তার কার্যকরী অনুলিপিটি নতুন শাখায় স্যুইচ করা

... এবং ইঞ্জিনিয়ার এটি যতটা পারে সামান্য এটি করার কারণে তারা প্রতিটি পদক্ষেপটি করার জন্য "ম্যাজিক ইনটেন্টেশন" মনে করতে পারে না। ভুল স্যুইচ এবং ইউআরএল ঘটে এবং হঠাৎ তারা একটি জগাখিচুড়ি হয় এবং তারা "বিশেষজ্ঞ" পেতে যায়।

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

  • ট্রাঙ্কে কোনও কাজ হয় না
  • প্রতিটি বিকাশকারী একটি বড় শাখা আছে
  • কাজ প্রকাশ হওয়ার দরকার না হওয়া পর্যন্ত শাখা স্থায়ী হয়
  • টিকিটযুক্ত বাগ ফিক্সগুলি তাদের নিজস্ব শাখা পেতে ঝোঁক
  • ট্রাঙ্কে ফিরে মার্জ করার অনুমতি দেওয়া হয়

... কিন্তু ...

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

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


মতে এই এখন একটি ব্যাপার --record-onlyসুইচ যে সমাধান করতে ব্যবহার করা যেতে পারে --reintegrateসমস্যা ও দৃশ্যত v1.8 চয়ন করে একটি আত্মীকরণের স্বয়ংক্রিয়ভাবে করতে, এবং এটি হতে পারে না শাখা পরে মৃত মনে


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

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

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

3

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

ভনসির দ্বারা বর্ণিত কেসটি দেখুন:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - A - x (v2-only)
           \
             x - B - x (wss)

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

এটি আমার নিজের অভিজ্ঞতার একটি উদাহরণ, যেখানে কোডের ভলিউমের কারণে বি থেকে এ এ মার্জ করতে বেশ কয়েক ঘন্টা সময় লেগেছিল: এটি আবার পেরিয়ে যাওয়ার জন্য সত্যিকারের ব্যথা হত, যা প্রাক-1.5-এর বিপরীতে ঘটেছিল।

আরেকটি, সম্ভবত Hginit থেকে মার্জ আচরণে আরও প্রাসঙ্গিক পার্থক্য : সাবভারশন পুনরায় শিক্ষা :

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

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

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

সংক্ষেপে, পার্থক্য বিশ্লেষণের মার্চুরিয়ালের পদ্ধতিটি (ছিল?) সাবস্ট্রেশনের চেয়ে উন্নত।


5
আমি হিগনিট পড়েছি। খুব খারাপ এটি এইচএনভি তুলনায় যেখানে এইচজি আরও ভাল করছে এর আরও ব্যবহারিক উদাহরণ দেখায় না .. মূলত এটি আপনাকে "বিশ্বাস জোল" বলতে বলে যে এইচজি আরও ভাল। তিনি যে সাধারণ উদাহরণগুলি দেখিয়েছেন তা সম্ভবত এসএনএন দিয়েও করা যেতে পারে .. আসলে এই কারণেই আমি এই প্রশ্নটি খুলেছি।
stmax

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

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

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