আমি জানি যে ভিমের ডিফ মোড ( vimdiff
) আমাদের দুটি (বা আরও) ফাইলের বিষয়বস্তুর তুলনা করতে দেয়।
তবে দুটি ডিরেক্টরি পুনরাবৃত্তভাবে মার্জ করার জন্য (ডিফর্মার্জ এবং অনুরূপ সরঞ্জামগুলির মতো) ডিরেক্টরিতে একাধিক ফাইলের সামগ্রীর তুলনা করা সম্ভব?
আমি জানি যে ভিমের ডিফ মোড ( vimdiff
) আমাদের দুটি (বা আরও) ফাইলের বিষয়বস্তুর তুলনা করতে দেয়।
তবে দুটি ডিরেক্টরি পুনরাবৃত্তভাবে মার্জ করার জন্য (ডিফর্মার্জ এবং অনুরূপ সরঞ্জামগুলির মতো) ডিরেক্টরিতে একাধিক ফাইলের সামগ্রীর তুলনা করা সম্ভব?
উত্তর:
দুটি ডিরেক্টরি পৃথকভাবে একত্রিত করতে এবং একত্রীকরণের জন্য রয়েছে ডিরিডিফ.ভিম প্লাগইন ( গিটহাব )।
এটি দুটি ডিরেক্টরিতে পুনরাবৃত্ত ডিফ সম্পাদন করে এবং একটি ডিফ "উইন্ডো" উত্পন্ন করে। সেই উইন্ডোর উপর ভিত্তি করে আপনি বিভিন্ন ডিফ অপারেশন করতে পারেন যেমন ভিমের ডিফ মোডে দুটি ফাইল খোলার জন্য, ফাইল বা ডিরেক্টরিটি অন্যটিতে পুনরাবৃত্তভাবে অনুলিপি করতে পারেন, বা উত্স ডিরেক্টরি থেকে ডিরেক্টরি ট্রিটি মুছে ফেলতে পারেন।
ব্যবহার:
:DirDiff <dir1> <dir2>
আরও তথ্য / সহায়তার জন্য: :help dirdiff
স্ক্রিনশটটি দেখুন:
আরো দেখুন:
পুনরাবৃত্তির সাথে তুলনা এবং ডিরেক্টরিগুলি একত্রিত করবেন? ডেডেম ব্লগে
আমি 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])
আমি কিছু সময়ের জন্য একই চাই। আমি খুঁজে পেয়েছি সবচেয়ে ভাল সমাধানটি ছিল 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 স্ক্রিপ্ট। এটিকে ব্যাশ স্ক্রিপ্টে রূপান্তর করা খুব সহজ হওয়া উচিত তবে আমি সেদিকে যাইনি।
আপনি যদি অতিরিক্ত কিছু ইনস্টল না করে কেবলমাত্র ভিমডিফ ব্যবহার করতে চান তবে নীচের কমান্ডটি বিপরীতে সমস্ত পৃথকীকরণকারী ফাইল খুলবে যা আপনাকে ভিমডিফের সাথে পরিবর্তনগুলি তাকাতে দেবে:
for files in $(diff -rq dir1 dir2|grep 'differ$'|sed "s/^Files //g;s/ differ$//g;s/ and /:/g"); do
vimdiff ${files%:*} ${files#*:};
done
এর জন্য একটি হালকা ওজনের সমাধান রয়েছে:
diff dir1 dir2 | vim -R -
শেল করেন।এটি পরিবর্তিত ফাইলগুলির জন্য ভাঁজ এবং পাশাপাশি পাশাপাশি তুলনা যুক্ত করবে।