Vimdiff के साथ सभी `git diffs` देखना


209

मैंने एक गाइड के रूप में git diff" Git Diff with Vimdiff " का उपयोग करते हुए vimdiff में लपेटने के लिए सेटअप किया , और जब तक कि बदलावों के साथ कई फाइलें न हों, यह अपेक्षित रूप से काम कर रहा है।

जब परिवर्तन के साथ कई फाइलें होती हैं और मैं चलता हूं git diff, तो यह पहली फाइल को खोलता है और, vimdiff के पहले उदाहरण को छोड़ने के बाद, मुझे निम्न संदेश के साथ प्रस्तुत किया गया है:

external diff died, stopping at filename

यह मेरे द्वारा उपयोग किए जाने की तुलना में एक पूरी तरह से अलग व्यवहार है। मेरे पास एसवीएन के साथ अतीत में एक समान सेटअप था और, कई फाइलों के खिलाफ अलग होने पर, मैं पहली फाइल की समीक्षा करूंगा, फिर लिखना और उपयोग करना छोड़ दूंगा :wqऔर मतभेद वाली अगली फाइल खुल जाएगी।

गित के साथ ऐसा नहीं है। मैंने कोशिश की :n[ext], लेकिन ऐसा करने से बाईं विंडो मूल फ़ाइल के साथ नहीं भरती है ताकि इसे संशोधित संस्करण के खिलाफ अलग किया जा सके।

जवाबों:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

टंकण git dअपेक्षित व्यवहार :wqमें बदलाव करता है, बदलाव में अगली फ़ाइल के लिए विम चक्रों में टाइप करता है।


22
बस मेरे दो सेंट: मैं dfअलियास diffऔर dtअलियास हो गया हूं difftool। इसके अलावा, :qaविम में टाइपिंग अगले बदलाव के बिना कुछ भी बचाने के लिए चक्र होगा।
जेसी यमोकोस्की

2
यह समाधान महान है सिवाय इसके कि जब परिवर्तनों को सहेजना है तो आपको ": w!" इसके बजाय: w
Asenar

2
@jonyamo सेटिंग उपनाम हमेशा इस बात पर आधारित होना चाहिए कि हम कितनी बार कुछ कमांड का उपयोग कर रहे हैं। मैं अक्सर उपयोग कर रहा हूँ git diffकी तुलना में git difftool। इसलिए मैंने d' 'dt' to डिफरेंशियल' और 'स्पेसफुल' को अलियास किया है। प्रयोज्य पैटर्न के साथ उपनाम बनाने की तुलना में मामला है।
हबीब परवाद

कैसे "git diff" बनाने के लिए vimdiff का उपयोग करें?, यह उत्तर मुझे एक उपनाम का उपयोग करता है। अगर मैं "अलग" करने के लिए उर्फ ​​काम नहीं करता।
Rombus

6
@ आंसर "यह समाधान महान है सिवाय इसके कि जब परिवर्तनों को सहेजना है तो आपको :w!इसके बजाय टाइप करना होगा :w"। ऐसा इसलिए है क्योंकि गिट विकल्प के vimdiffसाथ कॉल करता -Rहै। आप इसे ओवरराइड कर सकते हैं git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'। यह लेखन मोड में vimdiff खोलेगा।
समझदार

103

आप कोशिश कर सकते हैं git difftool, यह इस सामान को करने के लिए डिज़ाइन किया गया है।

सबसे पहले, आपको vimdiff के लिए अलग उपकरण को कॉन्फ़िगर करना होगा

git config diff.tool vimdiff

फिर, जब आप अलग करना चाहते हैं, तो git difftoolइसके बजाय का उपयोग करें git diff। यह आपकी अपेक्षा के अनुरूप काम करेगा।


1
लगभग वहाँ पहुँच गया! थोड़ा संशोधित यह वही है जो मैं देख रहा हूँ। +1 हालांकि!
चुग

1
Vimdiff mergetool को हाल ही में अपडेट किया गया है: git.kernel.org/?p=git/… (और कुछ अन्य कमिट करता है, लेकिन यह सबसे बड़ा है)। सुनिश्चित नहीं है कि अगली रखरखाव रिलीज़ कब होगी, लेकिन अगर आप git.git से निर्माण करने के इच्छुक हैं, तो अपग्रेड आपका होगा!
कास्कैबेल

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
आप मेरिजटूल के लिए जवाब देते हैं, न कि मल्टिफुलटूल के लिए। लेकिन यह अभी भी एक उपयोगी उत्तर है। +1।
dotancohen

@dotancohen सच में धन्यवाद मैंने कभी नोटिस नहीं किया कि मूर्खतापूर्ण गलती पर अब मैं अपना जवाब संपादित कर सकता हूं।
नन्हे कुमार

1
@NanheKumar, @dotancohen, की जगह mergeके साथ diffऊपर जवाब में चाल, क्या करेंगे यानी git config --global diff.tool vimdiff
विल 14

2

उन लोगों के लिए जो एक अन्य भिन्न टूल का उपयोग करना चाहते हैं, जो git में सूचीबद्ध नहीं है, के साथ कहते हैं nvim। यहाँ मैं का उपयोग कर समाप्त हो गया है:

git config --global alias.d difftool -x <tool name>

मेरे मामले में, मैं के साथ अंतर कमांड <tool name>को सेट करता हूं nvim -dऔर आह्वान करता हूं

git d <file>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.