नौकरशाही के कारण, मुझे एक रिपोर्ट के लिए अपनी रिपॉजिटरी में सभी परिवर्तित फ़ाइलों की एक सूची प्राप्त करने की आवश्यकता है (मैंने मौजूदा वेबसाइट कोड के साथ शुरू किया था)।
इस सूची को प्राप्त करने के लिए मुझे क्या चलाना चाहिए?
नौकरशाही के कारण, मुझे एक रिपोर्ट के लिए अपनी रिपॉजिटरी में सभी परिवर्तित फ़ाइलों की एक सूची प्राप्त करने की आवश्यकता है (मैंने मौजूदा वेबसाइट कोड के साथ शुरू किया था)।
इस सूची को प्राप्त करने के लिए मुझे क्या चलाना चाहिए?
जवाबों:
दी गई SHA और आपकी वर्तमान प्रतिबद्धताओं के बीच परिवर्तित फ़ाइलों के लिए:
git diff --name-only <starting SHA> HEAD
या यदि आप परिवर्तित-लेकिन-नहीं-अभी तक प्रतिबद्ध फ़ाइलों को शामिल करना चाहते हैं:
git diff --name-only <starting SHA>
अधिक आम तौर पर, निम्नलिखित सिंटैक्स आपको हमेशा बताएगा कि कौन सी फाइलें दो कमिट (उनके SHAs या अन्य नामों द्वारा निर्दिष्ट) के बीच बदल गई हैं:
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusझंडे का उपयोग करने के बजाय --name-onlyफ़ाइलों की एक सूची प्राप्त करना और उनके संशोधन की स्थिति को देखना आसान है, जैसे कि जोड़ा या संशोधित।
--name-statusदर्शाता है कि उनके साथ क्या हुआ है
सभी अस्थिर ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :
git diff --name-only
सभी चरणबद्ध ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :
git diff --name-only --staged
सभी चरणबद्ध और अस्थिर ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
सभी अनट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए (जिन्हें सूचीबद्ध किया गया है git status, इसलिए किसी भी अनदेखा फ़ाइलों को शामिल नहीं किया गया है):
git ls-files --other --exclude-standard
यदि आप एक खोल स्क्रिप्ट में इस का उपयोग कर रहे हैं, और आप प्रोग्राम जांचने के लिए इन आदेशों कुछ भी लौट आए, तो चाहते हैं, आप में रुचि हो जाएगा git diffके --exit-codeविकल्प।
जब मैंने कई फ़ाइलों को जोड़ा / संशोधित / हटा दिया है (अंतिम प्रतिबद्ध के बाद से), मैं कालानुक्रमिक क्रम में उन संशोधनों को देखना पसंद करता हूं।
उसके लिए मैं उपयोग करता हूं:
सभी गैर-चरणबद्ध फ़ाइलों को सूचीबद्ध करने के लिए:
git ls-files --other --modified --exclude-standard
प्रत्येक फ़ाइल के लिए अंतिम संशोधित तिथि प्राप्त करने के लिए:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
हालांकि रूविम टिप्पणियों में सुझाव देता है :
xargs -0 stat -c '%y %n' --
उन्हें सबसे पुराने से हाल ही में क्रमबद्ध करने के लिए:
sort
एक उपनाम इसका उपयोग करना आसान बनाता है:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
या (कम और अधिक कुशल, ruvim के लिए धन्यवाद )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
उदाहरण के लिए:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
अब मैं अपने संशोधनों की समीक्षा कर सकता हूं, सबसे पुराने से लेकर हाल तक।
xargsऔर एकल कॉल क्यों नहीं करते stat? पूर्ण एक-लाइनर:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
मुझे उन फ़ाइलों की एक सूची की आवश्यकता है जो दो कमिट (केवल जोड़े या संशोधित) के बीच सामग्री को बदल दिया था, इसलिए मैंने उपयोग किया:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
गिट डिफ डॉक्यूमेंटेशन से अलग-अलग फ़िल्टर विकल्प :
diff फिल्टर = [(A | C | D | एम | R | T | यू | x | बी) ... [*]]
केवल उन्हीं फ़ाइलों का चयन करें जिन्हें जोड़ा गया है (A), कोपीड (C), हटाए गए (D), संशोधित (M), नामांकित (R), उनके प्रकार (जैसे कि नियमित फ़ाइल, सिमलिंक, सबमॉड्यूल,…) बदले हुए (T) अनमरजेड (U) हैं, अज्ञात (X) हैं, या उनकी जोड़ी टूटी हुई है (B)। फ़िल्टर वर्णों के किसी भी संयोजन (कोई नहीं सहित) का उपयोग किया जा सकता है। जब संयोजन में * ((या-और-कोई नहीं) जोड़ा जाता है, तो सभी रास्तों का चयन किया जाता है यदि कोई फ़ाइल है जो तुलना में अन्य मानदंडों से मेल खाती है; यदि कोई ऐसी फ़ाइल नहीं है जो अन्य मानदंडों से मेल खाती है, तो कुछ भी चयनित नहीं है।
इसके अलावा, इन ऊपरी-केस पत्रों को बाहर करने के लिए नीचे किया जा सकता है। जैसे --diff- फिल्टर = विज्ञापन जोड़े गए और हटाए गए रास्तों को शामिल नहीं करता है।
यदि आप स्थिति को भी सूचीबद्ध करना चाहते हैं (जैसे ए / एम), तो बदल --name-onlyदें --name-status।
अनस्ट्रेड संशोधित की सूची का उपयोग करके प्राप्त किया जा सकता है git statusऔर grepनीचे की तरह कमांड। कुछ इस तरह git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
git showआप के साथ एक समान परिणाम प्राप्त कर सकते हैं। git logउपयोग में शामिल फ़ाइलों की सूची के साथ कमिट देखने के लिए (जैसे यह देखने पर दिखता है ):
git show --name-only [commit-id_A]^..[commit-id_B]
[commit-id_A]प्रारंभिक प्रतिबद्धता कहां है और [commit-id_B]आप दिखाना चाहते हैं कि अंतिम प्रतिबद्धता क्या है।
^प्रतीक के साथ विशेष ध्यान । यदि आप ऐसा नहीं करते हैं, तो प्रतिबद्ध-आईडी_ए जानकारी तैनात नहीं होगी।
यदि आप बदली हुई फ़ाइलों की जाँच करना चाहते हैं, तो आपको कई छोटी-छोटी बातों का ध्यान रखना होगा, जैसे कि उपयोग करना सबसे अच्छा होगा, जैसे यदि आप जाँचना चाहते हैं कि कौन-सी फाइलें बदल गईं हैं
git स्टेटस - यह फाइलों को बदलाव के साथ दिखाएगा
फिर यदि आप जानना चाहते हैं कि क्या परिवर्तन किए जाने हैं, तो इसे तरीकों से जांचा जा सकता है,
git diff - सभी फाइलों में सभी परिवर्तन दिखाएगा
यह केवल तभी अच्छा होता है जब केवल एक फ़ाइल को संशोधित किया जाता है
और यदि आप किसी विशेष फ़ाइल को जांचना चाहते हैं तो उपयोग करें
git का अंतर