जवाबों:
हां, यदि आप यह सुनिश्चित करते हैं कि git आपके शेल के बजाय एक ग्लोब का विस्तार करता है तो यह किसी भी स्तर पर मेल खाएगा इसलिए ऐसा कुछ (उद्धरण महत्वपूर्ण है) ठीक काम करना चाहिए।
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
उपयोगी भी हैgit diff master HEAD --name-only
''
) भी महत्वपूर्ण हैं! git diff -- src/*.js
होना चाहिएgit diff -- 'src/*.js'
फ़ाइलों को पुनरावर्ती रूप से शामिल करने के लिए (वर्तमान dir सहित) इसने मेरे लिए काम किया:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
या तो अपने शेल के ग्लोबस्टार का उपयोग करें (जो एक पुनरावर्ती खोज करता है) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
या उपयोग खोजें:
find -name '*.py' -print0 | xargs -0 git diff --
ये दोनों विशेष नाम और व्हाट्सएप प्रमाण हैं। यद्यपि आप .py एक्सटेंशन वाली निर्देशिकाओं के लिए फ़िल्टर करना चाहते हैं :)
1 मुझे git diff -- {.,**}/*.py
आमतौर पर करना पसंद है
2 जब ग्लोबस्टार सक्षम होता है, तो git diff -- **/*.py
पहले से ही शामिल होता है ./*.py
। बैश के मैनपेज में: 'यदि a / द्वारा अनुसरण किया जाता है, तो दो समीपवर्ती * s केवल निर्देशिकाओं और उपनिर्देशिकाओं से मेल खाएंगे।'
विस्तार के लिए कमांड लाइन तर्क।
git diff *.py
वैकल्पिक रूप से, आप कर सकते हैं पाइप find
में git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
चिल्लाने वाली शीर्षकों के और बिना
जैसा कि git संस्करण 2.18.0 पर परीक्षण किया गया है, फ़ाइल एक्सटेंशन को दोहरे उद्धरण चिह्नों के साथ उद्धृत किया जाना चाहिए। यदि आप अपने स्थानीय भंडार और दूरस्थ एक के बीच के अंतिम अंतरों को खोजना चाहते हैं, तो खींचने के बाद, आप उपयोग कर सकते हैं:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
उदाहरण के लिए:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
ऊपर दिए गए उत्तरों में से कोई भी मेरे लिए काम नहीं करता है git bash
विंडोज पर । मुझे यकीन नहीं है कि यह एक संस्करण चीज है (मैं 1.8.4 का उपयोग कर रहा हूं) या विंडोज / बैश चीज; इसके अलावा, मेरे मामले में, मैं दो शाखाओं को अलग करना चाहता था, जहां प्रत्येक शाखा में दूसरी शाखा में मौजूद अतिरिक्त फाइलें नहीं थीं (इस प्रकार 'खोजें' आधारित हैं)।
वैसे भी यह मेरे लिए काम करता है (मेरे उदाहरण में, अजगर फ़ाइलों के बीच एक अंतर की तलाश में):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
केवल अस्थिर फ़ाइलों में अंतर दिखाएगा।
मुझे यह प्रश्न इसलिए मिला क्योंकि मैं .info
फ़ाइलों को बाहर करना चाहता था git diff
। मैंने इसे स्टैज करके हासिल किया git add *.info
, जिससे बची हुई फाइलें कम हो गईं।
मैं इससे घायल हो गया:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
यह शो केवल निर्दिष्ट कमिट के लिए भिन्न होता है यदि फ़ाइलनाम में 'टेस्ट' (केस असंवेदनशील) शब्द होता है और .sql
आपके केस के लिए आवश्यक रूप से पाइपलाइन को संशोधित नहीं करता है ।