git difftool, सभी अलग-अलग फाइलों को तुरंत खोलें, धारावाहिक में नहीं


240

डिफ़ॉल्ट गिट भिन्न व्यवहार धारावाहिक में प्रत्येक भिन्न फ़ाइल को खोलने के लिए है (अगली फ़ाइल खोलने से पहले पिछली फ़ाइल के बंद होने की प्रतीक्षा करें)।

मैं एक ही बार में सभी फ़ाइलों को खोलने का एक तरीका खोज रहा हूं - उदाहरण के लिए BeyondCompare में यह सभी फाइलें एक ही बीसी विंडो के भीतर टैब में खुलेंगी।

इससे परिवर्तनों के जटिल सेट की समीक्षा करना आसान हो जाएगा; अलग-अलग फ़ाइलों के बीच आगे और पीछे फ़्लिक करें और महत्वहीन फ़ाइलों को अनदेखा करें।


"git diff" या "git difftool"? आप अनुरोध पर पोस्ट करना चाहते हैं (सभी के लिए खुला है, और वैरियस वेब इंटरफेस के साथ) git मेलिंग सूची: git@vger.kernel.org
जैकब नारबस्की

मैं बाहरी अंतर अनुप्रयोग को ट्रिगर करने के लिए "गिट डिफ़फ़टूल" का उपयोग कर रहा हूं। मेलिंग सूची विचार के लिए धन्यवाद।
सेबा इलिंगवर्थ

प्लेटफॉर्म को जानना मददगार होगा। यूनिक्स-आधारित प्लेटफॉर्म पर, मैं उस स्क्रिप्ट को लिखने के लिए एक स्क्रिप्ट लिखूंगा और उस स्क्रिप्ट का उपयोग करने का निर्देश दूंगा। स्क्रिप्ट में, मैं बस बैकग्राउंड में अंतर चलाऊंगा और स्क्रिप्ट को मरने दूंगा।
क्रिस क्लेलैंड

विंडोज प्लेटफॉर्म, लेकिन विचारों के लिए धन्यवाद क्रिस।
सेबा इलिंगवर्थ

जवाबों:


214

gitV1.7.11 से शुरू करके, आप git difftool --dir-diffएक डायरेक्टरी डिफरेंस को परफॉर्म करने के लिए उपयोग कर सकते हैं ।

यह सुविधा उदाहरण के लिए Meld 3.14.2 के साथ अच्छी तरह से काम करती है, और आपको सभी संशोधित फ़ाइलों को ब्राउज़ करने देती है:

git difftool --dir-diff --tool=meld HEAD~ HEAD

यह एक आसान बैश फ़ंक्शन है:

git-diff-meld() (
  git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)

जवाब है कि gitv1.7.11 से पुराने प्रतिष्ठानों पर लागू होता है ।


यही सवाल git mail लिस्ट पर पूछा गया था

मैंने उस ईमेल थ्रेड के आधार पर एक शेल स्क्रिप्ट को एक साथ रखा, जो एक निर्देशिका करता है जो मनमाने ढंग से कमिट्स के बीच भिन्न होता है।

Git v1.7.10 के साथ शुरू, git-diffallस्क्रिप्ट में शामिल हैcontrib मानक git स्थापना में शामिल है।

V1.7.10 से पहले के संस्करणों के लिए, आप GitHubgit-diffall पर प्रोजेक्ट से इंस्टॉल कर सकते हैं

यहाँ परियोजना विवरण है:

Git-diffall script, git के लिए डायरेक्टरी आधारित अलग मैकेनिज्म प्रदान करती है। स्क्रिप्ट diff.tool कॉन्फ़िगरेशन विकल्प पर निर्भर करती है यह निर्धारित करने के लिए कि किस दर्शक का उपयोग किया जाता है।

यह स्क्रिप्ट उन सभी रूपों के साथ संगत है, जिनका उपयोग विभिन्न प्रकार के संशोधनों को निर्दिष्ट करने के लिए किया जाता है:

1) git diffall: शो वर्किंग ट्री और स्टेज्ड चेंजेस के बीच अंतर होता है
2) git diffall --cached [<commit>]: शो स्टॉजेड चेंजेस और HEAD (या अन्य कमिटेड कमिटमेंट
3) के git diffall <commit>बीच अंतर दिखाता है: वर्किंग ट्री और नेम कमिटमेंट
4 के git diffall <commit> <commit>बीच के शो में अंतर होता है: शो दो डिमांड कमिट्स
5 के बीच अंतर होता है git diffall <commit>..<commit>: वही
6 से ऊपर ) git diffall <commit>...<commit>: दोनों के एक सामान्य पूर्वज से शुरू होने वाली शाखा पर, दूसरे तक और ऊपर के परिवर्तनों को दिखाएं<commit>

नोट: सभी फॉर्म एक वैकल्पिक पथ सीमक लेते हैं [--] [<path>]

यह स्क्रिप्ट थॉमस रैस्ट द्वारा जीट सूची में दिए गए एक उदाहरण पर आधारित है ।


Git-diffall और github.com/wmanley/git-meld के बीच क्या अंतर है ? मैंने दोनों की कोशिश की और वे पहली नज़र में समान कार्यक्षमता प्रदान करते हैं।
कियान

5
मैं आपकी स्क्रिप्ट की बहुत सराहना करता हूं। सच कहूं, तो मैं इस बात पर ध्यान नहीं दे सकता कि जीआईटी इस संबंध में सही व्यवहार क्यों नहीं करता (मर्क्यूरियल करता है, और ऐसा वर्षों तक किया है), और न ही मैं गिट समुदाय से ब्याज की कमी को थाह सकता हूं।
डगलस

6
अपडेट (के बारे में git difftool --dir-diffऔर तुलना से परे): मैंने स्कूटर सॉफ्टवेयर (परे तुलना के लेखक) से संपर्क किया और वे कहते हैं कि bcompare.exeएक समर्थित समाधान नहीं है और एक समय में एक से अधिक खुला होने पर समस्या हो सकती है। वे bcomp.exeभविष्य के संस्करण में फ़ोल्डर के लिए समर्थन जोड़ने की योजना बनाते हैं (इस बीच, मैं bcompare.exeएक असमर्थित वर्कअराउंड के रूप में उपयोग करना जारी रखूंगा)।
पीटर रस्ट

4
@coin मैं सिर्फ ४ से तुलना के साथ परीक्षण किया है और --dir-diff समर्थित bcomp.exe के साथ काम करने के लिए प्रकट होता है।
पीटर रस्ट

5
सिर्फ यह कहने के लिए टिप्पणी करना कि --dir-diffपूरी तरह से मेल्ड के साथ काम करता है। वहां से, यह आपको अलग-अलग फ़ाइलों के लिए चयन करने और देखने में भिन्नता देगा।
mkasberg 18

61

यहाँ मैं क्या पर बसे है ...

निम्नलिखित कोड को एक फ़ाइल में कॉपी करें जिसे git-diffall(कोई एक्सटेंशन नहीं) कहा जाता है :

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

फ़ाइल cmdको अपने git स्थापित dir के फ़ोल्डर में रखें (जैसे C:\Program Files (x86)\Git\cmd)

और आप की तरह उपयोग करेंगे git diff:

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

नोट: इसकी कुंजी & param है जो बाहरी भिन्न कमांड को एक बैकग्राउंड टास्क में चलने के लिए कहती है ताकि फाइलों को तुरंत प्रोसेस किया जा सके। BeyondCompare के मामले में, यह प्रत्येक टैब में प्रत्येक फ़ाइल के साथ एक स्क्रीन खोलता है।


पोस्ट करने का शुक्रिया। Unfortunatley, यह WinMerge के -s विकल्प के साथ काम नहीं करता है। WinMerge से पहले डिलीट हो जाने के अलावा पहले की सभी टेंप फाइल्स उन्हें देखने को मिलती हैं।
कार्लोस रेंडन

कार्लोस: मैं Git के साथ WinMerge का उपयोग करता हूं। मेरा दृष्टिकोण WinMerge लॉन्च करने के बाद एक 'स्लीप 1' जोड़ना था (जो कि मेरे मामले में "पहले से ही पृष्ठभूमि में लॉन्च करने के लिए लगता है" - और उसकी कोई आवश्यकता नहीं है)। इस तरह अस्थायी फ़ाइल WinMerge के लिए इसे एक बार (अजीब मामलों को छोड़कर) एक बार लेने के लिए पर्याप्त समय तक रहती है। इसका मतलब यह भी है कि उन सभी को खोलने के लिए प्रति सेकंड 1 सेकंड लगता है। यह एक बुरा हैक है (मैं इसे "उत्तर" के रूप में कभी नहीं पेश करूंगा!), लेकिन एक आसान, काफी प्रभावी।
वुडी ज़ेनफेल III 16

2
लिनक्स पर उपयोग के लिए, Git 2.x के साथ, मुझे थोड़ा संशोधन करना पड़ा: परिवर्तन "$filename"करना "../$filename"। इसके बाद यह बियॉन्ड तुलना के साथ पूरी तरह से काम करता है
डेव सी

1
@ मूल थ्रेड में यह कहता है कि "फ़ाइल को अपने git इंस्टॉल के cmd फ़ोल्डर में स्टोर करें" और विंडोज़ पर एक उदाहरण के साथ आगे बढ़ता है। आपने लिनक्स में "git-diffall" फ़ाइल कहाँ संग्रहीत की थी?
m4l490n

2
क्या हमें git-diffallफ़ाइल को C:\Program Files\Git\cmdफ़ोल्डर में जोड़ने के बाद खिड़कियों को पुनः आरंभ करने की आवश्यकता है ? जैसा मैंने निर्देश दिया था, वैसा ही किया $ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
nesdis

19

meld इसमें एक साफ-सुथरी विशेषता है कि यदि आप इसे स्रोत नियंत्रण (Git, Mercurial, Subversion, Bazaar और शायद अन्य) के तहत एक निर्देशिका देते हैं तो यह स्वचालित रूप से सभी परिवर्तित फ़ाइलों को सूचीबद्ध करेगा और आप व्यक्तिगत अंतरों को देखने के लिए डबल-क्लिक कर सकते हैं।

IMO टाइप करना बहुत आसान है meld .और इसे लॉन्च करने के लिए VCS को कॉन्फ़िगर करने की तुलना में VCS का पता लगाना है meld। इसके अलावा आप उसी कमांड का उपयोग कर सकते हैं, भले ही वीसीएस आपकी परियोजना का उपयोग कर रहा हो, जो बहुत अच्छा है यदि आप उनके बीच बहुत अधिक स्विच करते हैं।

केवल नकारात्मक पक्ष यह है कि परिवर्तन के लिए स्कैन करने के लिए मेल्ट के लिए यह धीमा है, परिवर्तन / hg / svn से परिवर्तन पारित किया जाना है, हालांकि क्या यह काफी धीमा है एक समस्या यह निर्भर करता है कि आप इसका उपयोग कैसे कर रहे हैं, मैं निश्चित हूं।


4
मेरे लिए मुख्य नकारात्मक पक्ष यह है कि मेल्ड (जो भी कारण के लिए) एक नए टैब के बजाय एक नई विंडो में फ़र्क को खोलता है और फ़र्क को बंद करने के बाद, वर्किंग डायरेक्टरी में फ़ाइल पहले एक कष्टप्रद पॉपअप संदेश के साथ एक नए टैब में खुलती है।
कीन

अच्छा टूल लेकिन भयानक विंडोज इंस्टॉल (2012 की शुरुआत में)।
वर्नट

@kynan यह एक अलग VCS अज्ञेय रास्ते के लिए एकदम सही समाधान की तरह लगता है अगर उस कष्टप्रद दोहरी खिड़की पॉपअप बात के लिए नहीं। यह शर्मनाक है। :(
PKKid

मेल्ड की एक बड़ी विशेषता इसके अलग-अलग फिल्टर हैं: टिप्पणियों में उदाहरणों की उपेक्षा करें या रिक्त लाइनों को जोड़ने / हटाने की git diffपेशकश करें , जो प्रस्ताव नहीं करता है।
कीन

1
मैंने इस दृष्टिकोण का उपयोग एक वर्ष के लिए किया है; यह छोटी परियोजनाओं के लिए ठीक काम करता है, लेकिन एक बार आपके पास एक बड़ी परियोजना (यानी बहुत सारी फाइलें) होने के बावजूद यह मैन्युअल रूप से धीमी गति से होता है क्योंकि यह गिट भिन्नता के लिए "स्कैन" मैन्युअल रूप से होता है (यह सुनिश्चित नहीं है कि यह इस दृष्टिकोण को क्यों लेता है जब गिट स्पष्ट रूप से इसे सूची के साथ प्रदान कर सकता है फ़ाइलें सीधे ...)
namuol

3

मुझे यह तरीका (GitDiff.bat और GitDiff.rb) मिला, जो फ़ाइलों को पुरानी / नई अस्थायी डीआईआर में कॉपी करता है और फिर उन पर एक फ़ोल्डर की तुलना करता है।

लेकिन मैं काम करने वाली फाइलों को सीधे (काम करने वाले डायर से) देखता हूं, क्योंकि BeyondCompare में फ़ाइल को अलग विंडो में से संपादित करने में सक्षम होने की आसान सुविधा है, जो त्वरित क्लीनअप के लिए बहुत अच्छा है।

संपादित करें: गिट मेलिंग सूची पर मेरे प्रश्न के जवाब में एक समान विधि


3

git meld=> https://github.com/wmanley/git-meld एक भयानक स्क्रिप्ट है जो एक सिंगल विंडो में सभी फाइलों का एक साफ-सुथरा अंतर खोलेगी।


बहुत अच्छा काम करता है! एक अतिरिक्त बोनस के रूप में यह बिल्कुल एचजी मेल्ड की तरह काम करता है। धन्यवाद!
PKKid

2

यहाँ ध्यान दिया गया है कि अराक्सिस मर्ज के पास एक '-क्वेट' कमांड विकल्प है:

अनजाने-से रोकता है कि तुलना बंद होने की प्रतीक्षा करने से रोकता है

शायद यह तत्काल निकास कोड लौटाता है और काम करेगा, किसी को भी यह अनुभव हुआ है? BeyondCompare के लिए समान विकल्प नहीं मिल रहा ...


2

डिफ्यूज़ में वीसीएस इंटीग्रेशन भी है। यह SVN, Mercurial, Bazaar, ... Git सहित अन्य VCS के ढेरों के साथ इंटरऑपरेट करता है, यहां तक ​​कि अगर कुछ बदलावों का मंचन नहीं किया जाता है तो यह तीन पैन दिखाएगा। संघर्षों के मामले में, यहां तक ​​कि चार पैन भी होंगे।

मंचन और अस्थिर संपादन के साथ प्रसार का स्क्रीनशॉट

इसके साथ आह्वान करें

diffuse -m

आपकी Git वर्किंग कॉपी में।

यदि आप मुझसे पूछें, एक दशक के लिए मैंने जो सबसे अच्छा दृश्य देखा है, वह अलग है। (और मैंने पिघला हुआ भी कोशिश की है।)


क्या आप बता सकते हैं कि आपको कौन सा विसरित हिस्सा पसंद आया, विशेष रूप से पिघला हुआ?

@ मुसिफिल: मुझे इसकी सादगी पसंद है - ऐसा लगता है कि कार्य को हल करने के लिए आवश्यक सुविधाओं का सटीक सेट है, अधिक नहीं, लेकिन यह भी कम नहीं है। (अंतर और टैब आकार की चौड़ाई के पुनर्मिलन की तरह।) मुझे याद नहीं है कि मैंने मेल्ड से स्विच क्यों किया, और मैंने तब से मेल्ड का उपयोग नहीं किया है, इसलिए मैं वास्तव में अब उनकी तुलना नहीं कर सकता।
krlmlr

1
डिफ्यूज़ ने बिना किसी कॉन्फ़िगरेशन के गिट के साथ काम किया। डिफ्यूज़ -म सिंगल विंडो को खोलता है जिसमें विभिन्न टैब में गिट भिन्न होते हैं; जबकि अन्य अन्य उपकरणों को शुरू करने के लिए बहुत अधिक कॉन्फ़िगरेशन की आवश्यकता होती है।
मॉश

1

यदि आप सभी करना चाहते हैं तो वर्तमान में संशोधित की गई सभी फ़ाइलों को खोलें, कुछ इस तरह की कोशिश करें:

vi $ (git स्टेटस | sed -n '/.*modified: * / s /// p')

यदि आप "परिवर्तन के जटिल सेट" के बारे में कर रहे हैं, तो आप अपने वर्कफ़्लो पर पुनर्विचार करना चाह सकते हैं। गिट की बहुत अच्छी विशेषताओं में से एक यह है कि यह डेवलपर के लिए जटिल परिवर्तन सेटों को सरल पैच की एक श्रृंखला में कम करना आसान बनाता है। वर्तमान में संशोधित की गई सभी फ़ाइलों को संपादित करने की कोशिश करने के बजाय, आप देखना चाह सकते हैं

git add --patch
जो आपको चुनिंदा स्टेज हंक की अनुमति देगा।


1

मैंने एक पॉवरशेल स्क्रिप्ट लिखी है जो दो काम करने वाले पेड़ों की नक़ल करेगी और डिफमार्गर से तुलना करेगी। तो आप कर सकते हैं:

GitNdiff master~3 .

उदाहरण के लिए, वर्तमान शाखा के पेड़ के साथ तीन शाखाएं मास्टर शाखा की तुलना करने के लिए।

इसकी चमकदार और नई और शायद कीड़ों से भरी। एक दोष यह है कि आपके काम करने वाले पेड़ की फाइलें जो अभी तक नहीं जोड़ी गई हैं, दोनों काम करने वाले पेड़ों की नकल की जाती है। यह धीमा भी हो सकता है।

http://github.com/fschwiet/GitNdiff


1

अरेक्सिस के साथ मैक ओएस एक्स पर गिट-स्पेसफुल का उपयोग करने में रुचि रखने वालों के लिए, मैंने जीथब पर गिट-स्पेसफॉल प्रोजेक्ट को फोर्क किया और इसमें एक ऐप्पलस्क्रिप्ट जोड़ा जो कि आरैक्सिस मर्ज कमांड को लपेटता है। नोट: यह araxisgitdiffफ़ाइल का थोड़ा संशोधित क्लोन है जो मैक ओएस एक्स के लिए आरैक्सिस मर्ज के साथ जहाज है।

https://github.com/sorens/git-diffall


1

निम्नलिखित मेल्ड और kdiff3 के साथ काम करता है

git difftool --dir-diff origin/branch1..origin/branch2

एक विंडो में सभी फ़ाइलों को खोलता है जिसे आप आसानी से ब्राउज़ कर सकते हैं। मूल / शाखा-नाम के स्थान पर बदलाव के साथ उपयोग किया जा सकता है

उदाहरण के लिए: git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1


-2

आप gitk का उपयोग कर सकते हैं और एक ही समय में सभी अंतर देख सकते हैं


3
हाँ, मुझे gitk उपयोगी लगता है, लेकिन जब यह ई.पू.-आईएनजी में अंतर करने की बात आती है, तो मैं :) देखना चाहता हूँ
Seba Illingworth
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.