सवाल प्रतिबद्धता में सभी फाइलों को कैसे सूचीबद्ध करें?


मैं एक साधारण खोज रहा हूँ git कमांड जो किसी भी बाहरी जानकारी के साथ हैश (SHA1) द्वारा दी गई प्रतिबद्धता का हिस्सा थे, सभी फ़ाइलों की अच्छी तरह से स्वरूपित सूची प्रदान करता है।

मैं प्रयास कर चुका हूं:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

हालांकि यह फाइलों को सूचीबद्ध करता है, इसमें प्रत्येक के लिए अवांछित diff जानकारी भी शामिल है।

क्या कोई और है git आदेश जो केवल मेरी इच्छित सूची प्रदान करेगा, ताकि मैं इसे से पार्सिंग से बच सकूं git show उत्पादन?


2179
2018-01-08 12:26


मूल


मैं यहां कुछ अलग दिख रहा था। मैं काम करने के सेट के लिए संशोधित सभी फाइलों को देखना चाहता हूं और घायल हो रहा हूं git log --until 2013-05-21 --pretty="short" --name-only एक अच्छा प्रभाव के साथ। - Limited Atonement
पिछले से सभी परिवर्तन प्राप्त करने के लिए इस कमांड का उपयोग करें n तक काम करता है master: git diff-tree --name-status -r @{3} master - ako


जवाब:


पसंदीदा तरीका (क्योंकि यह एक है पाइपलाइन आदेश; प्रोग्रामेटिक होना था):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

दूसरा रास्ता (स्क्रिप्ट के लिए कम पसंदीदा, क्योंकि यह एक है चीनी मिटटी आदेश; उपयोगकर्ता का सामना करने के लिए मतलब था)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id प्रतिबद्ध आईडी आउटपुट दबाता है।
  • --pretty तर्क शुरुआत में क्रूर से बचने के लिए एक खाली प्रारूप स्ट्रिंग निर्दिष्ट करता है।
  • --name-only तर्क केवल उन फाइल नामों को दिखाता है जो प्रभावित थे (धन्यवाद हैंक)।
  • -r तर्क उप-पेड़ में भर्ती करना है

2866
2018-01-08 13:02



चीनी मिट्टी के बरतन आदेशों का प्रयोग एक स्क्रिप्ट (गिट सहायता) में नहीं किया जाना चाहिए। इस्तेमाल करें git diff-tree --no-commit-id --name-only -r <commit> बजाय - drizzt
इस बात पर ध्यान दिया जाना चाहिए कि diff-tree रूट प्रतिबद्धता को देखते समय काम नहीं करेगा। - jbranchaud
बदलना --name-only के साथ विकल्प --name-status अधिक स्पष्ट सारांश देगा। - Kurt Zhong
यदि आप रूट प्रतिबद्धता पर काम करना चाहते हैं, तो --root ध्वज का उपयोग करें। मैन पेज से: "जब --root निर्दिष्ट किया जाता है प्रारंभिक प्रतिबद्धता एक बड़ी सृजन घटना के रूप में दिखाया जाएगा। यह नल के पेड़ के खिलाफ एक अंतर के बराबर है।" - Chris
git log --name-only -n 1 <hash> अंतिम प्रतिबद्धता होगी: git log --name-only -n 1 HEAD~1..HEAD - Kurt


यदि आप बदली गई फाइलों की सूची प्राप्त करना चाहते हैं:

git diff-tree --no-commit-id --name-only -r <commit-ish>

यदि आप किसी प्रतिबद्धता में सभी फ़ाइलों की सूची प्राप्त करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं

git ls-tree --name-only -r <commit-ish>

189
2018-01-14 19:22



Ls-tree के साथ -नाम-केवल 1.6.4.4 या 1.6.3.3 पर काम नहीं कर रहा है। क्या आपको लगता है कि यह एक बग है? - krosenvold
यह पता चला है कि पैरामीटर का क्रम यहां महत्वपूर्ण है। आपकी पोस्ट में से एक काम नहीं करता है, जबकि आपकी प्रतिक्रिया में से एक कर देता है काम - कम से कम जब तक आप अपनी पोस्ट अपडेट नहीं करते;) - krosenvold
उत्तीर्ण करना --no-commit-id एसएचए 1 प्रिंट करने से बचने के लिए, जैसे: git diff-tree --no-commit-id --name-only -r <commit-ish> - John Mellor
@ कोडेमैनएक्स: आप जोड़ना याद नहीं करते थे -r / -t विकल्प, क्या तुमने किया? क्योंकि diff-tree दोनों संशोधित और जोड़ा फ़ाइलों को संभालती है। यदि आप सभी नई (अतिरिक्त) फ़ाइलों को सूचीबद्ध करना चाहते हैं, तो उपयोग करें git diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish> - Jakub Narębski
क्या यह छोटा नहीं होना चाहिए? - Niklas Rosencrantz


मैं बस यह मान लेगा gitk इसके लिए वांछित नहीं है। उस मामले में, कोशिश करें git show --name-only <sha>


180
2018-01-08 12:34



- ज्यादातर मामलों में नाम केवल इतना है जहां मुझे इसकी आवश्यकता थी; इसलिए, सबसे कम समाधान को उखाड़ फेंक दिया (और केवल एक जिसे मैं 1 कोशिश में याद रखूंगा)। - Erik S
या --name-status। - Neil Traft
gitk ठीक है मैं बाद में था - धन्यवाद। यह सवाल अब पहली बात है जो Google खोज में आता है, इसलिए लोगों को यह जानने लायक है gitk मौजूद! आप में से बाकी अपने कमांड लाइन को फफिंग कर सकते हैं; मैं बस उस अच्छी यूआई स्क्रीन को देखूंगा :) - Mr Spoon
किसी ऐसे व्यक्ति के रूप में जो वास्तव में सीएलआई गिट पसंद करता है, gitk वास्तव में फ़ाइलों की समीक्षा करने और फ़ाइल को प्रदर्शित करने का एक सभ्य तरीका है कि diff चालू है। जैसे कोड एक सहकर्मी से एक राक्षस प्रतिबद्धता की समीक्षा। - Elijah Lynn


मैं व्यक्तिगत रूप से संयोजन का उपयोग करता हूं --stat तथा --एक पंक्ति उसके साथ प्रदर्शन आदेश:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

यदि आप जोड़ना / निकालना आंकड़े पसंद नहीं करना चाहते हैं, तो आप प्रतिस्थापित कर सकते हैं --stat साथ में --name-केवल

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

114
2017-07-11 23:21



यह भी खूब रही! यह मूल रूप से आपको फ़ाइल सारांश देता है कि गिटूब एक प्रतिबद्ध दृश्य के शीर्ष पर दिखाता है। धन्यवाद। - trisweb
बहुत अच्छा। उपनाम परिभाषित करने के लिए: alias gits='git show --stat --oneline', फिर gits स्वयं ही नवीनतम परिवर्तन (HEAD में) दिखाता है, जबकि gits b24f5fb किसी भी संशोधन के परिवर्तन दिखाने के लिए इस्तेमाल किया जा सकता है। - Brent Faust
कोई भी गिट उपनाम बना सकता है ... उदा। शायद git config --global alias.changes 'show --stat --oneline'। फिर आप टाइप कर सकते हैं git changes (वैकल्पिक प्रतिबद्धता के साथ) और ऊपर दिए गए पहले उदाहरणों से आउटपुट प्राप्त करें। - lindes
विंडोज के लिए गिट डबल कोट्स की आवश्यकता है: git config --global alias.changes "show --stat --oneline" - Alchemistmatt
अच्छा लगा। और स्वीकृत उत्तर के विपरीत, git show स्टैश किए गए परिवर्तनों की समीक्षा के लिए भी काम करता है: उदा। git show --stat --oneline stash@{1} - Jeff Ward


हाल ही में मुझे दो बदले में सभी बदली गई फ़ाइलों को सूचीबद्ध करने की आवश्यकता थी। तो मैंने यह (भी * निक्स विशिष्ट) कमांड का इस्तेमाल किया

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

अद्यतन करें: या जैसा कि एथन नीचे बताता है

git diff --name-only START_COMMIT..END_COMMIT

का उपयोग करते हुए --name-status प्रत्येक फ़ाइल के बगल में परिवर्तन (जोड़ा, संशोधित, हटाया गया आदि) भी शामिल होगा

git diff --name-status START_COMMIT..END_COMMIT

58
2018-04-26 12:23



बस कोशिश की: विंडोज़ पर भी गिट बैश में ठीक काम करता है। - OregonGhost
यदि तुम प्रयोग करते हो git diff --name-status START_COMMIT..END_COMMIT तो आपको पीछे की जरूरत नहीं है |sort | uniq। - Ethan
उपर्युक्त टिप्पणी में सुधार: git diff --name-only START_COMMIT..END_COMMIT - Ethan
यह वही है जिसे मैं देख रहा था। मैंने इसका इस्तेमाल कैसे किया: git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'। मैं चाहता था कि कोड की एक सूची केवल एक विशाल पीआर के लिए बदलती है जिसमें हजारों पीएनजी और एक्सएमएल लेआउट जोड़े गए थे। - AutonomousApps


आप भी कर सकते हैं

git log --name-only

और आप विभिन्न प्रतिबद्धताओं, संदेश और बदली गई फ़ाइलों को ब्राउज़ कर सकते हैं।

अपना प्रॉम्प्ट वापस पाने के लिए q टाइप करें।


56
2018-05-27 01:20





सबसे सरल तरीका:

git show --stat (hash)

यह याद रखना आसान है और यह आपको आवश्यक सारी जानकारी देगा।

यदि आप वास्तव में केवल उन फ़ाइलों के नाम चाहते हैं जिन्हें आप जोड़ सकते हैं --name-only विकल्प।

git show --stat --name-only (hash)


48
2017-07-16 00:06



मैं जानना चाहता हूं कि मेरा जवाब सरल और सही क्यों है, मुझे नकारात्मक वोट मिला। - VaTo
अगर मुझे अनुमान लगाना था (और मैं केवल अनुमान लगा रहा हूं, क्योंकि यह नहीं था कि आपने अपना जवाब किसने वोट दिया था), ऐसा इसलिए था क्योंकि मूल पोस्टर ने फाइलों की एक सूची को बिना किसी अन्य जानकारी के अनुरोध किया था। आपके द्वारा प्रदान किया गया आदेश प्रतिबद्धता और फ़ाइल में किए गए परिवर्तनों के प्रकारों के बारे में जानकारी दिखाता है। मैंने आपका जवाब कुछ और के लिए उपयोगी पाया, अगर यह कोई सांत्वना है। - J. Gregory Wright
@ जे। ग्रेगरी सीधे आप सही हो सकते हैं, उस स्थिति में मैं केवल नाम जोड़ूंगा और यही वह है। हालांकि, मैं प्रदान किए गए आदेश का उपयोग करता हूं क्योंकि यह याद रखना आसान है। लेकिन मैं उन दो विकल्पों को सिर्फ मामले में रखूंगा, सुझाव के लिए धन्यवाद! - VaTo
--नाम-केवल अभी भी कुछ शीर्षलेख पंक्तियों को शामिल करेगा जिसमें लेखक, दिनांक और प्रतिबद्ध संदेश जैसी जानकारी होगी। - devoured elysium
आईएमओ का सबसे अच्छा जवाब, दूसरों को यादगार नहीं हैं। - Amalgovinus


मैं उपयोग करता हूं बदला हुआ काफी बार। इसे स्थापित करने के लिए:

git config --global alias.changed 'show --pretty="format:" --name-only'

फिर:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

समान आदेश जो उपयोगी हो सकते हैं:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

45
2018-04-29 13:13



उपनाम के लिए upvote - Clint Eastwood


मानक गिट diff कमांड का उपयोग करना (स्क्रिप्टिंग के लिए भी अच्छा):

git diff --name-only <sha>^ <sha>

यदि आप बदली गई फ़ाइलों की स्थिति भी चाहते हैं:

git diff --name-status <sha>^ <sha>

यह मर्ज काम के साथ अच्छी तरह से काम करता है।


35
2018-04-29 14:53



एकल प्रतिबद्धता के उपयोग के लिए कई प्रकार के कामों से निपटने के दौरान यह अब तक का सबसे सरल जवाब है git show --name-only <sha> - thebugfinder
(मेरी पिछली टिप्पणी को अनदेखा करें) यह काम करने की एक श्रृंखला, या एक प्रतिबद्धता से निपटने के दौरान अब तक का सबसे सरल जवाब है। बहुत बढ़िया! - thebugfinder


$ गिट लॉग 88ee8 ^ .. 88ee8 --name-only --pretty = "format:"

23
2018-01-08 14:11