কীভাবে দুটি ডিরেক্টরি আলাদা এবং মার্জ করবেন?


38

আমি জানি যে ভিমের ডিফ মোড ( vimdiff) আমাদের দুটি (বা আরও) ফাইলের বিষয়বস্তুর তুলনা করতে দেয়।

তবে দুটি ডিরেক্টরি পুনরাবৃত্তভাবে মার্জ করার জন্য (ডিফর্মার্জ এবং অনুরূপ সরঞ্জামগুলির মতো) ডিরেক্টরিতে একাধিক ফাইলের সামগ্রীর তুলনা করা সম্ভব?


আপনার সম্পর্কিত ফোল্ডারগুলির জন্য কি কোনও ধরণের ভিসিএস ব্যবহার করা হচ্ছে? এটি উত্তর এবং প্লাগইনগুলির পুরো পরিসর খুলবে যা ফ্ল্যাট ফোল্ডারগুলির জন্য উপলভ্য নয়।
কালেব

উত্তর:


30

দুটি ডিরেক্টরি পৃথকভাবে একত্রিত করতে এবং একত্রীকরণের জন্য রয়েছে ডিরিডিফ.ভিম প্লাগইন ( গিটহাব )।

এটি দুটি ডিরেক্টরিতে পুনরাবৃত্ত ডিফ সম্পাদন করে এবং একটি ডিফ "উইন্ডো" উত্পন্ন করে। সেই উইন্ডোর উপর ভিত্তি করে আপনি বিভিন্ন ডিফ অপারেশন করতে পারেন যেমন ভিমের ডিফ মোডে দুটি ফাইল খোলার জন্য, ফাইল বা ডিরেক্টরিটি অন্যটিতে পুনরাবৃত্তভাবে অনুলিপি করতে পারেন, বা উত্স ডিরেক্টরি থেকে ডিরেক্টরি ট্রিটি মুছে ফেলতে পারেন।

ব্যবহার:

:DirDiff <dir1> <dir2>

আরও তথ্য / সহায়তার জন্য: :help dirdiff

স্ক্রিনশটটি দেখুন:

Wlee স্ক্রিনশট

আরো দেখুন:


ডেডেম ব্লগের লিঙ্কটি নষ্ট হয়ে গেছে - বরং ব্লগটি সরানো হয়েছে।
ড্রেভিকো

1
@ ড্রেভিকো ধন্যবাদ, আমি সংরক্ষণাগারটির সাথে লিঙ্কটি প্রতিস্থাপন করেছি
কেনরোব

4

আমি pythonফাইলগুলিকে মার্জ করতে একটি মোড়ক স্ক্রিপ্ট ব্যবহার করি (নীচে দেখুন)। আমি আমার ~/.vimডায়ারগুলি এবং এই জাতীয়গুলিকে একত্রীকরণ করতে যা ব্যবহার করি এটির একটি সরল সংস্করণ ।

এটি পাইথন 2 এবং 3 এ কাজ করা উচিত; তবে পাইথনের খুব পুরানো সংস্করণে সেন্টোস এবং কিছু অন্যান্য ডিস্ট্রো দিয়ে পাঠানো হয়নি not

সচেতন হন যে কিছু চেক (যেমন বাইনারি ফাইলগুলির জন্য একটি, বা যদি ফাইলগুলি একই হয়) খুব দ্রুত না হয় (এটি পুরো ফাইলটি পড়ে); আপনি চাইলে এগুলি সরিয়ে ফেলতে পারেন।

এটি যদি কোনও ডিরেক্টরিতে কেবল একটিতে উপস্থিত থাকে তবে তা রিপোর্টও করে না ...

#!/usr/bin/env python
from __future__ import print_function
import hashlib, os, subprocess, sys

if len(sys.argv) < 3:
    print('Usage: {} dir1 dir2'.format(sys.argv[0]))
    sys.exit(1)

dir1 = os.path.realpath(sys.argv[1])
dir2 = os.path.realpath(sys.argv[2])

for root, dirs, files in os.walk(dir1):
    for f in files:
        f1 = '{}/{}'.format(root, f)
        f2 = f1.replace(dir1, dir2, 1)

        # Don't diff files over 1MiB
        if os.stat(f1).st_size > 1048576 or os.stat(f2).st_size > 1048576: continue

        # Check if files are the same; in which case a diff is useless
        h1 = hashlib.sha256(open(f1, 'rb').read()).hexdigest()
        h2 = hashlib.sha256(open(f2, 'rb').read()).hexdigest()
        if h1 == h2: continue

        # Don't diff binary files
        if open(f1, 'rb').read().find(b'\000') >= 0: continue

        subprocess.call(['vimdiff', f1, f2])

3

আমি কিছু সময়ের জন্য একই চাই। আমি খুঁজে পেয়েছি সবচেয়ে ভাল সমাধানটি ছিল vdwrap ব্যবহার করা , যা আশ্চর্যজনকভাবে ভাল কাজ করে। সকল এটা আছে মোড়ানো হয় git difftool --dir-diffজন্য vimdiff। এটি কোনও ভিম ​​প্লাগইন প্রয়োজন হয় না।

আপনাকে যা করতে হবে তা হ'ল git difftoolব্যবহার করতে বলুন vdwrap:

git config --global difftool.vdwrap.cmd '/full/path/vdwrap $LOCAL $REMOTE'
git config --global diff.tool vdwrap

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

একটি সতর্কতাই এটি একটি Zsh স্ক্রিপ্ট। এটিকে ব্যাশ স্ক্রিপ্টে রূপান্তর করা খুব সহজ হওয়া উচিত তবে আমি সেদিকে যাইনি।



2

আপনি যদি অতিরিক্ত কিছু ইনস্টল না করে কেবলমাত্র ভিমডিফ ব্যবহার করতে চান তবে নীচের কমান্ডটি বিপরীতে সমস্ত পৃথকীকরণকারী ফাইল খুলবে যা আপনাকে ভিমডিফের সাথে পরিবর্তনগুলি তাকাতে দেবে:

    for files in $(diff -rq dir1 dir2|grep 'differ$'|sed "s/^Files //g;s/ differ$//g;s/ and /:/g"); do 
        vimdiff ${files%:*} ${files#*:}; 
    done

1

এর জন্য একটি হালকা ওজনের সমাধান রয়েছে:

  1. Vimdiffext প্লাগইন সেট আপ করুন ।
  2. কি diff dir1 dir2 | vim -R -শেল করেন।

এটি পরিবর্তিত ফাইলগুলির জন্য ভাঁজ এবং পাশাপাশি পাশাপাশি তুলনা যুক্ত করবে।

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