मैं एक निश्चित निर्देशिका पर 'git diff' कैसे करूँ?


132

git diffवास्तव में सभी स्रोत कोड पर एक अंतर चलाता है। मैं इसे एक निश्चित निर्देशिका पर कैसे करूं, ताकि मैं इसके नीचे की फाइलों पर संशोधन देख सकूं?


2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

जवाबों:


125

एक पथ प्रदान करें (इस मामले में myfolder) और बस चलाएँ:

git diff myfolder/

28
मैं git diff -- myfoldergit के लिए अस्पष्टता को कम करने के लिए उपयोग करना चाहूंगा । गिट डिफरेंस (और कई git कमांड्स) के लिए सामान्य संकेतन वह है git diff [commit-ish] -- [path]जहां HEAD के लिए प्रतिबद्ध-ish डिफॉल्ट (जहां आप अभी हैं) और [path]git रूट डायरेक्टरी के लिए डिफॉल्ट करता है, लेकिन आपकी वर्तमान डायरेक्टरी के सापेक्ष कुछ भी हो सकता है। बिना --जीआईटी अनुमान लगाएगी कि आपका क्या मतलब है, [commit-ish]या [path]। कुछ मामलों में, यह धारणा को 'अस्पष्ट' कहने का कारण बनता है। अगर मुझे ठीक से याद है।
L0LN1NJ4

2
यह कुछ नहीं छापता है जब मैं उत्तर में विधि और टिप्पणी में विधि का प्रयास करता हूं।
रे

@ray जिसका अर्थ है कि आपके पास काम करने वाले पेड़ और नवीनतम प्रतिबद्ध के बीच कोई मतभेद नहीं है
वैलेरिज़ वासिलेंको

3
@Ray और भविष्य के व्यक्तियों को यह देखने के लिए कि आप उन शाखाओं को शामिल कर सकते हैं जिन्हें आप के बीच अंतर करने की कोशिश कर रहे हैं git diff master..develop myfolder/जैसा कि @CrandellWS ने मूल प्रश्न पर टिप्पणी में कहा है। यदि आप देख रहे हैं तो Git स्थिति आपको परिवर्तन दिखाएगी।
पोज़ेलरेटर्ट

2
@ray सुनिश्चित करें कि आप रूट डायरेक्टरी में हैं। पथ आपकी वर्तमान निर्देशिका के सापेक्ष होगा।
निकोफिथ

59

यदि आप विभिन्न शाखाओं की तुलना कर रहे हैं, तो आपको --फ़ाइल सिस्टम पथ से Git संशोधन को अलग करने के लिए उपयोग करने की आवश्यकता है । उदाहरण के लिए, दो स्थानीय शाखाओं के साथ, masterऔर bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

या एक स्थानीय शाखा से रिमोट तक:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/

29
दोनों शाखाओं को सूचीबद्ध करने के बाद केवल एक - खंड की आवश्यकता होती है, जैसे: git diff शाखा 1 शाखा 2 - पथ / / से / dir
एमरी

4

आपको इस तरह से सामान के लिए प्रलेखन देखने की आदत डालनी चाहिए। यह बहुत उपयोगी है और आपके कौशल को बहुत जल्दी सुधार देगा। यहाँ प्रासंगिक है जब आप करते हैंgit help diff

   git diff [options] [--no-index] [--] <path> <path>

दो <path>हैं जो आपको सवाल में निर्देशिकाओं को बदलने की आवश्यकता है।


3

जोड़े तुलना से परे Git में अपने difftool के रूप में और के रूप में diffdir के लिए एक अन्य नाम जोड़ें:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Gitdiff प्राप्त करें:

git diffdir 4bc7ba80edf6  7f566710c7

संदर्भ: संपूर्ण निर्देशिकाओं की तुलना करें wit difftool + परे की तुलना करें


1
समान चिन्ह git 2.17.1 के लिए गलत प्रतीत होता है। git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"इसके बजाय का उपयोग करें
मार्क Schäfer

ध्यान दें कि डायर की तुलना में परे का उपयोग करते समय, आपको सिमिलिंक का पालन करने के लिए इसे कॉन्फ़िगर करने की आवश्यकता है (एक फ़ोल्डर में देखें -> नियम (रेफरी आइकन) -> हैंडलिंग -> सिम्लिंक का पालन करें) या, --no-symlinksविकल्प जोड़ें, ताकि कमांड पढ़ेgit difftool --dir-diff --no-symlinks
आशुतोष जिंदल

1

न केवल आप एक पथ जोड़ सकते हैं, लेकिन आप git diff --relativeउस फ़ोल्डर के सापेक्ष परिणाम प्राप्त करने के लिए जोड़ सकते हैं ।

git -C a/folder diff --relative

और Git 2.28 (Q3 2020) के साथ, " diff" परिवार ने " diff.relative" कॉन्फ़िगरेशन चर का सम्मान करना सीखा ।

लॉरेंट अरनॉड ( ) द्वारा प्रतिबद्ध c28ded8 (22 मई 2020) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध e34df9a , 02 जून 2020)spk
gitster

diff: config विकल्प जोड़ें relative

साइन-ऑफ-बाय: लॉरेंट
अर्नॉड Acked-by: offoàn Trần Công Danh

diff.relativeकरने के लिए बूलियन विकल्प सेट trueशो केवल वर्तमान निर्देशिका / द्वारा निर्दिष्ट मान में आने वाले बदलाव pathका तर्क relativeविकल्प और शो pathnames ऊपर उल्लिखित निर्देशिका के सापेक्ष।

--no-relativeपहले ओवरराइड करना सिखाएं--relative

गिट-प्रारूप-पैच (1) विकल्प प्रलेखन --relativeऔर के लिए जोड़ें--no-relative

प्रलेखन अब भी शामिल है :

diff.relative:

यदि ' true' ' ' पर सेट किया गया है , तो ' git diff' निर्देशिका के बाहर परिवर्तन नहीं दिखाता है और वर्तमान निर्देशिका के सापेक्ष पथनाम दिखाता है।


0

यदि आप उप-निर्देशिकाओं को बाहर करना चाहते हैं, तो आप उपयोग कर सकते हैं

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)

0

निर्देशिका से भिन्न के रूप में तुलना से परे का उपयोग करने के लिए , याद रखें कि सक्षम करें जैसे प्रतीकात्मक लिंक का पालन करें:

एक में फ़ोल्डर की तुलना करें देखेंनियम (रेफर चिह्न):

यहां छवि विवरण दर्ज करें

और फिर, प्रतीकात्मक लिंक का पालन करें और सत्र चूक को अपडेट करें:

यहां छवि विवरण दर्ज करें


या,

इस तरह उपनाम स्थापित करें:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

ध्यान दें कि किसी भी स्थिति में, साइड (बाएं या दाएं) में किए गए कोई भी संपादन जो वर्तमान कार्यशील पेड़ को संदर्भित करता है, संरक्षित हैं।

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