ऊपर मेरे पिछले "diff.external" कॉन्फिग उत्तर को पूरा करने के लिए :
जैसा कि जैकब ने उल्लेख किया है , Git1.6.3 ने गिट स्पेसफूल को पेश किया, जिसे मूल रूप से सितंबर 2008 में प्रस्तावित किया गया था:
उपयोग = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
( --extcmdइस उत्तर के अंतिम भाग में देखें )
$LOCALआरंभिक संशोधन से फ़ाइल $REMOTEकी सामग्री समाहित है और इसमें अंतिम संशोधन में फ़ाइल की सामग्री शामिल है।
$BASEफ़ाइल में सामग्री की चिंता है
यह मूल git-mergetoolरूप से गिट इंडेक्स / वर्कट्री पर संचालित करने के लिए संशोधित है।
इस स्क्रिप्ट के लिए हमेशा की तरह उपयोग के मामले जब आप या तो मंचन या unstaged परिवर्तन और आप (उदाहरण के लिए एक साइड-बाई-साइड diff व्यूअर में परिवर्तन देखना चाहते हैं है xxdiff, tkdiff, आदि)।
git difftool [<filename>*]
एक अन्य उपयोग मामला तब है जब आप एक ही जानकारी देखना चाहते हैं, लेकिन मनमाने तरीके से तुलना कर रहे हैं (यह वह हिस्सा है, जहां रिवर्ज पार्सिंग बेहतर हो सकती है)
git difftool --start=HEAD^ --end=HEAD [-- <filename>*]
अंतिम उपयोग मामला तब है जब आप अपने वर्तमान कार्यस्थल की तुलना HEAD के अलावा किसी अन्य चीज़ से करना चाहते हैं (जैसे एक टैग)
git difftool --commit=v1.0.0 [-- <filename>*]
नोट: Git 2.5 के बाद से, git config diff.tool winmergeपर्याप्त है!
" गिट मेरिजेट विनमर " देखें
और Git 1.7.11 के बाद से , आपके पास विकल्प होता है --dir-diff, बाहरी अंतर टूल को स्पॉन करने के लिए, जो दो अस्थायी निर्देशिकाओं को पॉप्युलेट करने के बाद एक समय में दो डायरेक्टरी पदानुक्रमों की तुलना कर सकता है, बजाय एक फाइल पेयर के प्रति बाहरी टूल के इंस्टेंस को चलाने के।
Git 2.5 से पहले:
difftoolअपने कस्टम भिन्न टूल से कॉन्फ़िगर करने का व्यावहारिक मामला :
C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false
Winmerge.sh के साथ आपके PATH के एक निर्देशिका भाग में संग्रहीत:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"
यदि आपके पास एक और टूल है (kdiff3, P4Diff, ...), तो एक और शेल स्क्रिप्ट और उपयुक्त difftool.myDiffTool.cmdकॉन्फिग डायरेक्टिव बनाएं ।
फिर आप आसानी से diff.toolकॉन्फ़िगर के साथ टूल स्विच कर सकते हैं ।
अन्य विवरण जोड़ने के लिए आपके पास डेव द्वारा यह ब्लॉग प्रविष्टि भी है ।
(या विकल्पों के लिए यह सवालwinmergeu )
इस सेटिंग के साथ रुचि winmerge.shस्क्रिप्ट है : आप इसे विशेष मामलों को ध्यान में रखते हुए अनुकूलित कर सकते हैं।
उदाहरण के लिए देखें डेविड मार्बल का जवाब एक उदाहरण के लिए नीचे दिया गया है , जो इससे संबंधित है:
- मूल या गंतव्य में नई फाइलें
- मूल या गंतव्य में फ़ाइलों को हटा दिया
जैसा कि केम मेसन अपने जवाब में उल्लेख करते हैं , आप विकल्प का उपयोग करके किसी भी आवरण से बच--extcmd सकते हैं :
--extcmd=<command>
अलग-अलग देखने के लिए एक कस्टम कमांड निर्दिष्ट करें। git-difftoolकॉन्फ़िगर किए गए डिफॉल्ट को अनदेखा करता है और $command $LOCAL $REMOTEजब यह विकल्प निर्दिष्ट किया जाता है तो चलता है।
उदाहरण के लिए, यह gitkकिसी भी diffउपकरण को चलाने / उपयोग करने में सक्षम है ।