কিভাবে ইমটগুলিতে গিট বিবাদগুলি মার্জ করবেন


84

আমার সাম্প্রতিক গিট একীভূত হওয়ার ফলে প্রচুর সংঘাত হয়েছে। আমার বর্তমান পদ্ধতি হল '<<<' এর পরবর্তী ঘটনাটি অনুসন্ধান করা এবং তারপরে স্ট্যান্ডার্ড পাঠ্য সম্পাদনা করে মার্জটি সম্পাদন করা।

প্রশ্ন : আমার সংস্করণ, তাদের সংস্করণ এবং ফাইলের বেস সংস্করণ সম্পর্কে গিটে তথ্য অবলম্বিত তথ্য ব্যবহার করে ইমাসগুলি কীভাবে মার্জ করতে সহায়তা করতে পারে?


সম্পাদনা: এই প্রশ্নের এই সম্পর্কিত প্রশ্নের চেয়ে আলাদা সুযোগ রয়েছে , যেহেতু এটি এডিফ চাওয়া সীমাবদ্ধ নয়।


7
আপনি যদি ম্যাগিট ব্যবহার করতে চান তবে আপনি স্ট্যাটাস বাফারটি লোড করতে পারেন এবং তারপরে eবিরোধী হিসাবে দেখানো ফাইলগুলিতে চাপতে পারেন । Magit ediffমার্জ করার জন্য আরম্ভ করবে এবং আপনার পরিবর্তনের বিষয়ে নিশ্চিত হওয়ার জন্য আপনাকে অনুরোধ করবে, তারপরে আপনি মার্জ করা ফাইলটি স্টেজ করতে পারবেন।
wvxvw

@ বিগনারার: ​​অন্য 3 জন লোক এটি একটি সদৃশ বলে মনে করেছিল এবং আমি সর্বশেষ ভোট ছিল। কেন: উদ্ধৃত অন্য থ্রেড একই উত্তর দেয় ( smergeএবং vc-resolve-conflictপাশাপাশি একটিও ediff) এবং প্রায় দীর্ঘস্থায়ী হয়েছে। যদিও আমি সম্মত হই যে প্রথম থ্রেড আরও ভাল শিরোনাম ব্যবহার করতে পারে।
ড্যান

@ ড্যান আমি দ্বিমত পোষণ করছি: এটি একটি আলাদা প্রশ্ন এবং উত্তরটি একই রকম হয় যে এটি পরিবর্তন করে না।
শিক্ষানবিস

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

1
এবং এটি মূল্যবান জন্য, আমি মনে করি এটি ভাল উত্তর সহ একটি ভাল প্রশ্ন। এটি কেবলমাত্র আমি এটি একটি সদৃশ বলে মনে করি - তবে অন্যরাও এই মতামতটি ভাগ নাও করতে পারে (অনুলিপিটি সম্পর্কে)।
ড্যান

উত্তর:


86

আপনি smerge-modeকেবল দ্বন্দ্বপূর্ণ ফাইলটি খোলার চেষ্টা করে দেখতে পারেন M-xsmerge-modeRET। এটি সমস্ত বিবাদযুক্ত অঞ্চলকে হাইলাইট করবে। এটি সহজেই দ্বন্দ্বগুলি সমাধান করার জন্য কী-বাইন্ডিংগুলি যুক্ত করে, C-hfsmerge-modeRETসেগুলি জানার জন্য এটির ডকুমেন্টেশনগুলির সাথে পরামর্শ করুন।

ডিফল্ট উপসর্গ

আমি অসুবিধার জন্য ডিফল্ট উপসর্গটি সন্ধান smerge-mode C-c^করি তাই আমি এটিতে পরিবর্তন করেছি C-cv

(setq smerge-command-prefix "\C-cv")

গুরুত্বপূর্ণ কী-বাইন্ডিং

আমার জন্য সবচেয়ে গুরুত্বপূর্ণ বাঁধাই হ'ল:

smerge-nextsmerge-command-prefixnপরবর্তী বিরোধে যেতে বাধ্য ।

smerge-previoussmerge-command-prefixpপূর্ববর্তী সংঘাতের দিকে যেতে বাধ্য bound

smerge-keep-currentআবদ্ধ smerge-command-prefixRETসংস্করণ কার্সার হয় রাখা।

smerge-keep-minesmerge-command-prefixmআপনার পরিবর্তনগুলি রাখতে বাধ্য

smerge-keep-othersmerge-command-prefixoঅন্যান্য পরিবর্তন রাখতে বাধ্য ।

smerge-ediffsmerge-command-prefixEদ্বন্দ্বগুলি মার্জ করার জন্য একটি এডিফ সেশন শুরু করতে বাধ্য । এটি একই মত vc-resolve-conflicts(ধন্যবাদ @ ফিলস এবং @ মালবারবা এটি দেখানোর জন্য)।

স্বয়ংক্রিয়ভাবে নিমজ্জন-মোড সক্ষম করা

আপডেট: নিম্নলিখিতটি কেবল ইমাস সংস্করণে প্রাসঙ্গিক 25.1, নিম্নলিখিত সংস্করণগুলিতে নিম্নলিখিত সমস্যার কারণ হতে পারে, https://github.com/magit/magit/issues/3897 দেখুন

smerge-modeসংঘর্ষ চিহ্নিতকারীদের সাথে ফাইল / বাফার পরিদর্শন করার সময় আপনি স্বয়ংক্রিয়ভাবে সক্রিয় করতে আগ্রহী হতে পারেন আপনি এটি অর্জনের জন্য নীচের মতো কিছু ব্যবহার করতে পারেন

(defun my-enable-smerge-maybe ()
  (when (and buffer-file-name (vc-backend buffer-file-name))
    (save-excursion
      (goto-char (point-min))
      (when (re-search-forward "^<<<<<<< " nil t)
        (smerge-mode +1)))))

(add-hook 'buffer-list-update-hook #'my-enable-smerge-maybe)

মনে রাখবেন যে, আমি ব্যবহার করছি buffer-list-update-hookএবং find-file-hookযেহেতু বার একটি বাফার যা ইতিমধ্যে Emacs খোলা আছে সংঘাত পেতে অধিকাংশ যে ক্ষেত্রে find-file-hookকোন সাহায্য হয়।

এই উত্তরে উল্লিখিত অন্যান্য পদ্ধতিও পরীক্ষা করে দেখুন


1
(1) ভুলবেন না smerge-ediff(২) আপনি কোন ইমাস সংস্করণে আছেন? বর্তমান ইম্যাক্স মাস্টার শাখায়, নিমজ্জন স্বয়ংক্রিয়ভাবে চালু হয়। (3) আপনি buffer-list-update-hookপরিবর্তে ব্যবহার করছেন কেন find-file-hook?
মালবারবা

অতিরিক্ত স্পষ্টতার জন্য, নোট করুন smerge-ediffএবং vc-resolve-conflictsএকই জিনিস।
ফিল্ডস

@ মালবারবা ১) আমি উল্লেখ করেছি যে smerge-modeএর কী-বাইন্ডিংগুলি এর নথিতে নথিভুক্ত রয়েছে। সম্ভবত আমি সম্পূর্ণতার জন্য এখানে ম্যানুয়াল উদ্ধৃতি করতে পারেন। সাহায্য করার জন্য ধন্যবাদ. 2) আমি v24.5 এ আছি, যদিও আমি মাঝে মাঝে মাস্টার শাখা চেষ্টা করে দেখি তবে মনে হয় না যে নিমজ্জন স্বয়ংক্রিয়ভাবে পরিণত হয়েছিল (এটি কি সাম্প্রতিক পরিবর্তন?)। ৩) কারণ এটি বেশিরভাগ সময় আমি ইতিমধ্যে উন্মুক্ত বাফারগুলিতে দ্বন্দ্ব পাই, এই ক্ষেত্রে আমার স্পষ্টভাবে চালু করা দরকারsmerge-mode
ইকবাল আনসারী

@ ইকবালআনসারী smerge-modeসব সময় সক্রিয় না করার কোনও কারণ আছে ? আহ্বান করা পর্যন্ত এটি বেশি কিছু করে না।
পাইথননট

@ পাইথন নট ভাল প্রশ্ন, দুর্ভাগ্যক্রমে আমার কোন উত্তর নেই কারণ আমি কখনই এটি সর্বদা সক্ষম করে রাখার চেষ্টা করি না, যদিও এর চেষ্টা করা সার্থক
ইকবাল আনসারী

32

সম্পাদনা করুন: যেহেতু এই উত্তরটি আমার প্রত্যাশার চেয়ে বেশি উপকার পেয়েছে, তাই আমি এটি কিছুটা প্রসারিত করেছি।

@ ইকবালআনসারি দ্বারা উত্তরটি পরিপূরক করতে আপনি ব্যবহার করতে পারেন vc-resolve-conflicts(অন্যদের দ্বারা উল্লিখিত হিসাবে এটি একটি উপনাম smerge-ediff)। এটি ediffইন্টারফেস শুরু করবে । বামদিকে প্রথম মার্জ পিতামাতার এবং ডানদিকে দ্বিতীয় মার্জ পিতা থাকবে। এগুলি যথাক্রমে MINEএবং মডেলিনে লেবেলযুক্ত OTHER। মার্জ করা বাফারটি নীচে দেখানো হয়েছে (স্ক্রিনশট দেখুন)।

<কোড> এডিফ </ কোড> ইন্টারফেসের একটি স্ক্রিনশট

কী-বাইন্ডিং

  • nএবং এর সাথে দ্বন্দ্বের মাধ্যমে নেভিগেট করুনp
  • aবা সহ সংস্করণ গ্রহণ করুনb
  • সাথে পূর্বপুরুষের দিকে তাকাও/ !
  • সাথে এডিফ সেশনটি প্রস্থান করুন q

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


2
এটি সর্বোত্তম পদ্ধতি আইএমও। আমি এটির সাথে আবদ্ধ C-x v <রয়েছি, যদিও বাস্তবে আমি ম্যাজিট (ডাব্লুভিএক্সভিডাব্লু এর মন্তব্যে) এর সাথে প্রার্থনা করার সম্ভাবনা বেশি।
ফিল্ডস

1
যেহেতু ২০০০ সাল এটির vc-resolve-conflictজন্য একটি নাম smerge-ediff, যা নাম অনুসারে একটি এডিফ অধিবেশন শুরু করে, উত্থাপন অধিবেশন নয়। যাইহোক, লাইব্রেরির শিরোনামের প্রভাবকে প্রভাব ediff.elস্বীকার করে emerge.elএবং তারপরে বলতে থাকে "এডিফের বর্তমান সংস্করণটি উত্থাপিত হয়েছে It এটি একটি উচ্চতর ইউজার ইন্টারফেস সরবরাহ করে এবং উত্থানে পাওয়া যায় না এমন অনেকগুলি বড় বৈশিষ্ট্য রয়েছে particular বিশেষত, এটি প্যাচিং করতে পারে, এবং 2-উপায় এবং 3-উপায়ের ফাইল তুলনা, মার্জিং এবং ডিরেক্টরি অপারেশন ""
তারসিউস

6
এছাড়াও লক্ষ করুন যে magit-ediff-resolve( Emবা eদ্বন্দ্বের সাথে যুক্ত কোনও ফাইল) smerge-ediffঅভ্যন্তরীণভাবে ব্যবহার করে। এটি তবে ediff-quit-hookকিছুটা ভাল অধিবেশন সমাপ্তির অভিজ্ঞতা সরবরাহ করতে ওভাররাইড করে । আপনি "বাফার" (বেশ কয়েকটি বাফার রয়েছে) সংরক্ষণ করতে পারবেন তা বলার পরিবর্তে এটি আপনাকে জিজ্ঞাসা করে যে আপনি বাফারটি সংরক্ষণ করতে চান কিনা (আপনাকে এর নাম দেখানোর সময়)।
তারসিউস

ভিমডিফের মতো 4 টি উইন্ডো (আমাদের, পিতামাতা, তাদের, কর্মক্ষেত্র) দেখানোর কোনও উপায় আছে কি?
ব্যবহারকারী 1133275

9

আপনি যদি স্পেসম্যাকস ব্যবহার করে থাকেন তবে আমি "স্র্যাম-ট্রান্সিয়েন্ট-মোড" সক্রিয় করার পরামর্শ দিচ্ছি, যা সমস্ত সম্ভাব্য নিমজ্জন কমান্ড সহ একটি হাইড্রা মেনু নিয়ে আসে।

এটি করতে, কেবলমাত্র এমএক্সকে কল করুন spacemacs/smerge-transient-state/body, যা নির্ধারিত প্রতি ডিফল্ট SPC-g-r

এখানে একটি স্ক্রিনশট:

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

আপনার ফাইল সম্পাদনা করা স্বজ্ঞাত হওয়া উচিত:

  1. nপরের হুঙ্কে যেতে টিপুন ।
  2. একটি নির্বাচন করুন একত্রীকরণ কর্ম
  3. শেষ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.