का उपयोग केवल bash
, diff
, tput
, और less
, हम निकट के उत्पादन का अनुमान लगा सकता git diff
। कुछ उल्लेखनीय अंतर होंगे, हालांकि, diff
प्रोग्रामर की अदूरदर्शिता के कारण ।
निम्नलिखित बैश फ़ंक्शन परिभाषा को कुछ फ़ाइल में रखें जो आपके उपयोगकर्ता खाते द्वारा स्वचालित रूप से खट्टी हो जाती है, और आप कमांड से फ़ंक्शन को एक्सेस करने में सक्षम होंगे:
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
}
यह फ़ंक्शन निम्नानुसार काम करता है:
- अंततः,
diff
यह निर्दिष्ट करने के लिए विभिन्न स्वरूपण विकल्पों के साथ लागू किया जाता है कि फाइलों के भीतर कैसे परिवर्तन प्रदर्शित किए जाएंगे।
tput
उन फॉर्मेटिंग विकल्पों में ANSI रंग कोड डालने के लिए उपयोग किया जाता है। ध्यान दें कि गैर-एएनएसआई टर्मिनलों का उपयोग करते समय, आपको प्रतिस्थापित tput setaf
करना पड़ सकता हैtput setf
।
- के आउटपुट में
diff
पाइप किया जाता है less
। -R
ANSI रंगों को संरक्षित करने की अनुमति देता है। बाहर निकलने पर स्क्रीन को साफ़ करने से -X
रोकता less
है। -F
रोकता हैless
यदि आउटपुट एक स्क्रीन के भीतर फिट बैठता है, तो पेजर के रूप में काम करने से है।
- यदि पहला पैरामीटर है
@full
, तो फ़ंक्शन जोड़े और हटाए गए लाइनों के अलावा सभी अपरिवर्तित लाइनों को प्रदर्शित करेगा।
इस दृष्टिकोण और निम्नलिखित के बीच अंतर पर ध्यान दें git diff
:
git diff
प्रत्येक परिवर्तन के आसपास संदर्भ की तीन पंक्तियों की रिपोर्ट करता है। दुर्भाग्य से, diff
यदि आप एक साथ स्वरूपण विकल्पों को निर्दिष्ट करते हुए संदर्भ लाइनों की संख्या निर्दिष्ट करना चाहते हैं, तो शिकायत करना और बाहर निकलना प्रतीत होता है। (कम से कम यह मैक ओएस एक्स योसेमाइट में करता है)। धन्यवाद diff
प्रोग्रामर। इसलिए, आप या तो प्रत्येक परिवर्तन के आसपास के संदर्भ की कोई रेखा नहीं मांग सकते हैं, जो कि डिफ़ॉल्ट व्यवहार है, या आप अनुरोध कर सकते हैं कि फ़ाइल के भीतर सभी अपरिवर्तित लाइनें भी @full
पहले पैरामीटर के रूप में निर्दिष्ट करके रिपोर्ट की गई हैं ।
- चूँकि संदर्भ की रेखाएँ भिन्न हैं
git diff
, इसलिए इस फ़ंक्शन द्वारा बताई गई पंक्ति संख्याएँ उनके द्वारा रिपोर्ट की गई से भिन्न भी होंगी git diff
।
- आपको रिपोर्ट की गई एकल-पंक्ति परिवर्तनों की उपस्थिति दिखाई दे सकती है, जो कि सही व्यवहार है, लेकिन जब आपकी परिवर्तित फ़ाइल में एकल रिक्त लाइनों का सम्मिलन होता है तो कष्टप्रद होता है। मुझे लगता है कि
git diff
इसके संदर्भ में, बेहतर तरीके से काम करता है। diff
यदि आप चाहें तो व्हॉट्सएप के साथ बेहतर व्यवहार करने के लिए आप विभिन्न विकल्पों को पारित करने का प्रयास कर सकते हैं।
newtext
में/etc/colordiff
। मुझे लगता है कि गिट हरे का उपयोग करता है?