গিট-ডিফের মতো ডিফারিং কিভাবে করবেন?


148

আমি আউটপুট বিন্যাস পছন্দ করি git diff। রঙ এবং +/ -লাইনের মধ্যে পরিবর্তনের প্রতিনিধিত্ব গনুহ পরিবর্তন চেয়ে পড়তে সহজ।

আমি গিট রেপোর বাইরে পতাকা git diffব্যবহার করে চালাতে পারি --no-indexএবং এটি দুর্দান্ত কাজ করে। তবে, এটি --excludeপুনরাবৃত্তি থেকে ফাইল বা উপ-ডিরেক্টরিগুলি বাদ দেওয়ার বিকল্পটি অনুপস্থিত বলে মনে হচ্ছে diff

উভয় বিশ্বের সেরা পাওয়ার উপায় আছে? (রঙ অপশন এবং +/ -ফর্ম্যাট git diffএবং --excludeGNU ডিফের বিকল্প)।

আমি পরীক্ষা করেছি colordiff, তবে আমি এর আউটপুট ফর্ম্যাটটি পছন্দ করিgit diff


1
সবুজ সংযোজন, পরিবর্তন জন্য নীল করতে newtextমধ্যে /etc/colordiff। আমি মনে করি গিট সবুজ ব্যবহার করে?
রুডি

1
আমি এখন অবধি কোনও - সূচকের পতাকাটি শুনিনি। আমি এটিকে কেবল গিট শো থেকে আউটপুট দুটি ফাইলের সাথে তুলনা করতে ব্যবহার করেছি - এর জন্য ধন্যবাদ!
এজেএম-রিইনস্টেট-মনিকা

উত্তর:


175

আমি কীভাবে রঙ করতে হয় তা জানি না তবে এটি এর +/-পরিবর্তে <এবং করবে >

diff -u file1 file2

6
দুর্দান্ত, কলর্ডিফের সাথে মিলিত এটি আমাকে যা চাইবে তার যথেষ্ট কাছে পেয়ে যায়। অনুমান করুন আমাকে পরের বারে ম্যান পৃষ্ঠাটি আরও নীচে স্ক্রোল করা দরকার ... ধন্যবাদ!
Mzzzzzz

13
ডিফফ-ইউ দিয়ে রঙিনকরণের একটি সহজ উপায় হ'ল কমান্ডলাইন গিট রেপো ভিউয়ার: টাইগ করার জন্য আউটপুটটি পাইপ করা diff -u file1 file2 | tig
স্যামুয়েল লাম্পা

3
colordiffআপনার অ্যাপটি / ইয়াম / প্যাকম্যান রিপোজিটরি থেকে ইনস্টল করুন এবং এটি ব্যবহার করুন।
আইবুগ

অ্যামাজন লিনাক্সে এন্টারপ্রাইজ লিনাক্স (ইপিল) এর জন্য অতিরিক্ত প্যাকেজগুলি সক্ষম করার দরকার colordiff: ডকস.এওএস.মাজোন.com
প্যাট মাইরন

1
এছাড়াও colordiff, আপনি vimসংজ্ঞা দিয়ে রঙ পেতে পারেন cdiff() { diff -u $@ | vim -R -; }
Syrtis মেজর

94

আপনি git diff --no-index -- A B( ম্যানপেজের মাধ্যমে ) ও ব্যবহার করতে পারেন ।


1
+1, তবে দুর্ভাগ্যক্রমে ফাইলগুলির মধ্যে একটি যদি সিমলিংক হয় তবে এটি কাজ করে না।
এমিল লুন্ডবার্গ

2
+1 এটি খুব দরকারী কারণ এটি দেখায় যে কীভাবে গিট রিপোর্ট তৈরি করা যায় যেখানে দুটি ট্র্যাক করা ফাইল Aএবং একে অপরেরB সাথে তুলনা করতে আলাদা যেখানে প্রতিটি ফাইল তাদের শেষ স্বতন্ত্র পুনর্বিবেচনার তুলনায় পরিবর্তিত হয়েছে।
জে। কাটজউইনেল

@ এমিললুন্ডবার্গ: লিনাক্সের ১.৯.১ গিটে সিমলিংক নিয়ে আমার জন্য কাজ করে। আগের সংস্করণগুলি নষ্ট হয়েছে কিনা তা আমি জানি না।
এম

3
git diff --no-indexদুর্দান্ত, তবে যেমনটি ওপি ইঙ্গিত করেছে, এতে --excludeপতাকাটির অভাব রয়েছে , তাই এটি প্রায়শই খুব সীমিত উপযোগী হয়।
কেন উইলিয়ামস

25
  1. কলর্ডিফ ইনস্টল করুন ।

  2. আপনার ~ / .colordiffrc আপডেট করুন (প্রয়োজনে প্রথমে অনুলিপি / ইত্যাদি / কলর্ডিফসিআর):

    # be more git-like:
    plain=off
    newtext=darkgreen
    oldtext=darkred
    diffstuff=darkcyan
    
  3. colordiff -u file1 file2দুটি ফাইলের colordiff -ruN path1 path2জন্য বা পুনরাবৃত্তভাবে পাথের তুলনা করার জন্য ব্যবহার করুন ।

এটি ঠিক একই নয়, তবে এটি খুব কাছে।


18

এটিই আমি পরামর্শ দিচ্ছি এবং এটি খুব কাছে

diff -u FILE1 FILE2 | colordiff | less -R
  • colordiff: আপনাকে এটি ইনস্টল করতে হবে
  • -R: এটি কাঁচা কোডগুলির পরিবর্তে রঙ দেখানো কম বলে।

আমি শেষ পর্যন্ত ব্যবহার করেছি -wকারণ আমি সাদা স্পেসের ভিন্নতা দেখতে চাইনি।

diff -w -u FILE1 FILE2 | colordiff | less -R

সম্পাদনা: মন্তব্যে @ সিপরিয়ান টোমাইগা পরামর্শ অনুসারে আপনি এটিকে একটি ফাংশন করতে পারেন এবং এটি আপনার ~/.bashrcফাইলেও রাখতে পারেন ।

function gdiff () { diff -u $@ | colordiff | less -R; }

4
এটির জন্য একটি একক বাশ ফাংশন রাখতে .bashrc এ যুক্ত করুন:function gdiff () { diff -u $@ | colordiff | less -R; }
সিপ্রিয়ান টোমাইগ

4

গনুহ diffটি --colorঅনুযায়ী প্রয়াত 2016 সালে সংস্করণ 3.4 থেকে বিকল্প এই উত্তর ইউনিক্স দঃপূঃ উপর। এর পাশাপাশি -uআউটপুট অনুকরণ করার জন্য যথেষ্ট হওয়া উচিত git diff:

diff -u --color=always file1 file2 | less -r

--coloralwaysপাইপে ব্যবহার করার সময় অবশ্যই autoপাইপগুলিতে রঙ বন্ধ হয়ে যাবে।

উইন্ডোজে গিত বাশের সাহায্যে আমি কেবল এটি চেষ্টা করেছি, যেখানে less -Rকেবল একটি পাখির প্রথম লাইনের রঙ হবে। less -rএই ক্ষেত্রে এটি আমার জন্য স্থির করুন।


3

ব্যবহার করে শুধুমাত্র bash, diff, tput, এবং less, আমরা ঘনিষ্ঠভাবে আউটপুট অনুমান করতে পারে git diffdiffপ্রোগ্রামারদের স্বল্পদৃষ্টির কারণে কিছু উল্লেখযোগ্য পার্থক্য থাকবে ।

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

function gdiff()
{
    local REG=`tput op`
    local GRP=`tput setaf 6`
    local ADD=`tput setaf 2`
    local REM=`tput setaf 1`

    local NL=$'\n'
    local GRP_LABEL="${GRP}@@ %df,%dn +%dF,%dN @@${REG}"

    local UNCH_GRP_FMT=''

    [[ "${1}" == '@full' ]] && {

        UNCH_GRP_FMT="${GRP_LABEL}${NL}%="
        shift
    }

    diff \
        --new-line-format="${ADD}+%L${REG}" \
        --old-line-format="${REM}-%L${REG}" \
        --unchanged-line-format=" %L${REG}" \
        --new-group-format="${GRP_LABEL}${NL}%>" \
        --old-group-format="${GRP_LABEL}${NL}%<" \
        --changed-group-format="${GRP_LABEL}${NL}%<%>" \
        --unchanged-group-format="${UNCH_GRP_FMT}" \
            "${@}" | less -FXR
}

এই ফাংশনটি নিম্নলিখিত হিসাবে কাজ করে:

  1. শেষ পর্যন্ত, diffফাইলগুলির মধ্যে কীভাবে পরিবর্তনগুলি প্রদর্শিত হবে তা নির্দিষ্ট করতে বিভিন্ন ফর্ম্যাটিং বিকল্পের সাথে আহ্বান জানানো হয়।
  2. tputএই ফর্ম্যাটিং বিকল্পগুলিতে এএনএসআই রঙ কোড সন্নিবেশ করানোর জন্য ব্যবহৃত হয়। নোট যখন অ ANSI টার্মিনাল ব্যবহার করার মাধ্যমে আপনি প্রতিস্থাপন করতে থাকতে পারে tput setafসঙ্গে tput setf
  3. এর আউটপুট diffপাইপ করা হয় less-Rএএনএসআই রঙগুলি সংরক্ষণ করার অনুমতি দেয়। -Xবাইরে বেরোনোর lessপরে পর্দা সাফ করা থেকে বাধা দেয় । যদি পর্দার মধ্যে আউটপুট ফিট করে তবে পেজার হিসাবে অপারেটিং করা থেকে -Fবাধা দেয় less
  4. যদি প্রথম প্যারামিটার হয় @fullতবে ফাংশনটি যুক্ত এবং সরানো রেখাগুলির পাশাপাশি সমস্ত অপরিবর্তিত রেখাগুলি প্রদর্শন করবে।

এই পদ্ধতির এবং এর মধ্যে নিম্নলিখিত পার্থক্যগুলি নোট করুন git diff:

  1. git diffপ্রতিটি পরিবর্তনের চারপাশে তিন লাইন প্রসঙ্গে রিপোর্ট করে। দুর্ভাগ্যক্রমে, diffআপনি একই সাথে বিন্যাসের বিকল্পগুলি নির্দিষ্ট করার সাথে সাথে প্রসঙ্গের রেখার সংখ্যা উল্লেখ করতে চাইলে অভিযোগ এবং প্রস্থান করার বিষয়টি মনে হচ্ছে। (কমপক্ষে এটি ম্যাক ওএস এক্স জোসেমাইটে করে)। ধন্যবাদ diffপ্রোগ্রামাররা। অতএব, আপনি হয় প্রতিটি পরিবর্তনকে ঘিরে কোনও প্রসঙ্গের রেখাকে অনুরোধ করতে পারবেন না এটিই ডিফল্ট আচরণ, অথবা আপনি @fullপ্রথম প্যারামিটার হিসাবে উল্লেখ করে ফাইলের মধ্যে থাকা সমস্ত অপরিবর্তিত রেখাগুলিরও প্রতিবেদন করার জন্য অনুরোধ করতে পারেন ।
  2. প্রসঙ্গের রেখাগুলি পৃথক হওয়ার কারণে git diff, এই ফাংশনটির দ্বারা প্রতিবেদন করা লাইন নম্বরগুলিও রিপোর্ট করা থেকে পৃথক হবে git diff
  3. আপনি রিপোর্ট করা একক-লাইন পরিবর্তনের উপস্থিতি দেখতে পাবেন যা সঠিক আচরণ, তবে বিরক্তিকর যখন আপনার পরিবর্তিত ফাইলে একক খালি লাইনের সন্নিবেশ থাকে। আমি মনে করি git diffএর প্রসঙ্গের লাইনের মাধ্যমে এটি আরও ভালভাবে ডিল করে। আপনি diffযদি পছন্দ করেন তবে হোয়াইটস্পেসের সাথে আরও ভাল ব্যবহার করার জন্য আপনি বিভিন্ন বিকল্পগুলি পার করার চেষ্টা করতে পারেন।


2

এটি আপনার .bashrcবা এটিতে রাখুন .zshrc:

diff() { git diff --no-index "$1" "$2" | colordiff; }

প্রয়োজনীয়তা: gitএবং colordiffহাত আগে ইনস্টল করা উচিত।

ব্যবহার: diff file1 file2

উদাহরণ: $ এর জন্য $diff .tmux.conf .zshrc.pre-oh-my-zsh

পার্থক্য ফাংশন উদাহরণ


0

অন্য বিকল্পটি হ'ল এটি সংগ্রহস্থলের বাইরে থেকে করা তাই গিট ফাইলগুলির মধ্যে পার্থক্য জানতে পারে। যেমন। শেল ফাংশন যেমন:

gdiff() {
    (
        dir=`pwd`
        cd ./$(git rev-parse --show-cdup)/..
        git diff  $dir/$1 $dir/$2
    )
}

0

কলর্ডিফ ব্যবহার করুন :

স্থাপন:

sudo apt-get install colordiff

ব্যবহার:

colordiff -u file_one file_two

দেখানো ঠিক একই পার্থক্য দেয় git diff


0

আপনার না থাকলে colordiffবা git diff, আপনি রঙ পেতে পারেন vim

cdiff() { diff -u $@ | vim -R -; }

বা সহজভাবে

cdiff() { diff -u $@ | view -; }

0

ব্যাট যেহেতু সুন্দর রঙিন, তাই আমি পরীক্ষা করেছি যে এটি যদি diffখুব বেশি কাজ করে এবং আশ্চর্যরকমভাবে এটি বাক্সের বাইরে খুব ভালভাবে কাজ করে।

$ diff file1 file2 | bat অথবা $ diff -u file1 file2 | bat

সুতরাং আমি মনে করি আপনি আরও দক্ষ হতে নীচের মত একটি ফাংশন করতে পারেন:

function bdiff () { diff -u $@ | bat;}


-2

আমি কনফিগার সেটিংস মনে করি:

[color]
     ui = true

"diff" কমান্ডের --relative=<path>বিকল্পের সাথে মিলিত আপনি যা চান তা করতে পারে। তুমি কি চেষ্টা করেছিলে ?


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