ভিমকে মার্জ করার সরঞ্জাম হিসাবে ব্যবহার করার সময় "উভয় গ্রহণ" করার কোনও উপায় আছে কি?


11

আমি ভিটকে গিটের সাথে খুব ত্রি-ত্রি মার্জ হিসাবে ব্যবহার করছি এবং কখনও কখনও স্থানীয় এবং দূরবর্তী উভয় শাখা থেকে পরিবর্তন নেওয়া প্রয়োজন। kdiff3বেশ কয়েকটি কী চাপ দিয়ে এটি করতে পারেন, ভিমে এটি করার কোনও উপায় আছে কি?

উত্তর:


6

আপনি যা চেয়েছিলেন ঠিক তেমন নয়, তবে এটি দরকারীটি খুঁজে পেতে পারে: স্প্লাইস প্লাগইন: ত্রি-মুখী সংযোজনের সময় বিরোধগুলি সমাধানের জন্য একটি ভিম প্লাগইন । এটি ভিমেওতে একটি দুর্দান্ত ডেমো স্ক্রিনকাস্ট রয়েছে

আপনি যদি ডিফল্ট ভিমডিফের সাথে আটকে থাকেন তবে আপনি সুরন্ডিং উইন্ডোগুলির জন্য বাফার নম্বরটি পুনরুদ্ধার করতে একটি ফাংশন তৈরি করতে পারেন এবং তাদের :diffgetদু'বার কল করতে ব্যবহার করতে পারেন :

                            *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
        Modify the current buffer to undo difference with another
        buffer.  If [bufspec] is given, that buffer is used.  If
        [bufspec] refers to the current buffer then nothing happens.
        Otherwise this only works if there is one other buffer in diff

(...)

The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name.  Examples:

    :diffget        Use the other buffer which is in diff mode
    :diffget 3      Use buffer 3
    :diffget v2     Use the buffer which matches "v2" and is in
                diff mode (e.g., "file.c.v2")

আপনি যে কীগুলিতে ব্যবহৃত হয়েছিল সেগুলিতে এই ফাংশনে একটি কল বরাদ্দ করতে আপনি তাদের ম্যাপিং ব্যবহার করতে পারেন kdiff3

আপনি এই vimcast আরও তথ্য পেতে পারেন ।


3

yANK এবং pহিসাবে, যে কোনও প্লাগ-ইন বা অতিরিক্ত ফাংশন ছাড়া কাজ যদিও এটা সম্ভবত হয় করতে একটু কম সুবিধাজনক dgবাdp

অভিভাবক বাফারগুলি থেকে প্রয়োজনীয় বিটগুলি কেবল অনুলিপি করুন এবং মার্জ করা বাফারগুলিতে সঠিক স্থানে আটকে দিন। আপনি যদি পুরো জিনিসটি না দিয়ে কেবল একটি ডিফ ব্লকের অংশ চান তবে এটিও কার্যকর।

আপনার, কখনও কখনও, ভিমকে জোর করে ডিফারেন্সটি পৃথক করে আপডেট করতে বাধ্য করতে হবে :diffupdate


1

উভয় লক্ষ্য থেকে পরিবর্তনগুলি একত্রিত করতে এবং একক আদেশে শাখাগুলি একত্রিত করতে:

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

<<<<<<<
=======
>>>>>>>

পদ্ধতি 1: ম্যানুয়ালি একটি কমান্ড প্রবেশ করা এবং সম্পাদন করা

:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d

পদ্ধতি 2: ব্যবহারকারীর সংজ্ঞায়িত কমান্ড প্রয়োগ করা

"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
  echom a:firstline.'-'.a:lastline
  execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()

ভিম ডিফেজেট এবং ডিফুপুট কেবল একটি শাখা বা অন্যটি চয়ন করবে। সুতরাং উপরে বর্ণিত বিষয় ব্যতীত কেবলমাত্র আসল সমাধান হ'ল ম্যানুয়ালি ইয়াঙ্ক করা এবং উভয় ফাইল থেকে ওয়ার্কিং কপিটিতে আটকানো।


আপনি ডাউনটাতে যেতে চাইলে একটি কারণ দিন।
user3751385

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