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




git-show (18)

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

मैंने कोशिश की है:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

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

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


" git show --stat " (धन्यवाद रयान) और कुछ sed आदेशों का एक संयोजन आपके लिए डेटा को ट्रिम करना चाहिए:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

यह केवल संशोधित फ़ाइलों की सूची का उत्पादन करेगा।


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

git log --name-only

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

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


उपयोग

git log --name-status

यह आपको प्रतिबद्ध आईडी, संदेश, फ़ाइलों को बदल देगा और चाहे इसे संशोधित, बनाया, जोड़ा या हटा दिया गया हो। कुछ हद तक एक कमांड में।


नाम के लिए इस कमांड को आज़माएं और लाइन की संख्या बदलें

git show --stat <commit-hash>

केवल फाइल नाम दिखाएं

git show --stat --name-only  <commit-hash>

आखिरी प्रतिबद्ध हैश प्राप्त करने के लिए इस आदेश को आजमाएं

git log -1 या सभी git log


फ़ाइल लिस्टिंग के रूप में देखने के लिए एक सरल चाल है, बस जोड़ें : हैश के बाद।

git show 9d3a52c474:

फिर आप ड्रिल कर सकते हैं,

git show 9d3a52c474:someDir/someOtherDir

यदि आप एक फ़ाइल हिट करते हैं तो आपको फ़ाइल का कच्चा संस्करण मिल जाएगा; जो कभी-कभी आप चाहते हैं यदि आप केवल एक अच्छा संदर्भ या कोड के महत्वपूर्ण टुकड़े ढूंढ रहे हैं (diffs सब कुछ गड़बड़ कर सकते हैं),

git show 9d3a52c474:someDir/someOtherDir/somefile

इस विधि का केवल दोष यह है कि यह आसानी से फ़ाइलों का पेड़ नहीं दिखाता है।


मुझे उपयोग करना पसंद है

git show --stat <SHA1>^..<SHA2>

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

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

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

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

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

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

मैं बस यह gitk कि इसके लिए gitk वांछित नहीं है। उस स्थिति में, git show --name-only <sha> आज़माएं।


मैंने सोचा कि मैं अपने उपनाम का सारांश साझा करूंगा .. मुझे भी 'zsh' का उपयोग करके यह बहुत अच्छा लगता है कि यह क्रोमो कुंजी सबकुछ अच्छी तरह से बताता है और आपको बताता है कि कमांड प्रॉम्प्ट बदलकर शाखा हमेशा हर समय होती है।

एसवीएन से कवर करने वालों के लिए आपको यह उपयोगी लगेगा: (यह विभिन्न धागे से विचारों का संयोजन है, मैं केवल कॉपी / पेस्ट का उपयोग करने के बारे में जानने का श्रेय लेता हूं)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <[email protected]>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <[email protected]>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m

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

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

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

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

यह काम करना चाहिए:

git status

यह दिखाएगा कि क्या नहीं किया गया है और क्या किया गया है।


सबसे सरल रूप:

git show --stat (hash)

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

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

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


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

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

ठीक है, किसी विशेष प्रतिबद्धता में सभी फ़ाइलों को दिखाने के कुछ तरीके हैं ...

जानकारी को कम करने और केवल फाइलों के नाम दिखाने के लिए, आप बस --name-only या --name-status flag ... जोड़ सकते हैं, ये झंडे आपको केवल फ़ाइल नाम दिखाते हैं जो पिछले कामों से अलग हैं चाहते हैं...

तो आप git diff बाद --name-only साथ कर सकते हैं, <sha0> <sha1> बाद दो प्रतिबद्ध <sha0> <sha1> , नीचे कुछ ऐसा है:

git diff --name-only 5f12f15 kag9f02 

मैं इन परिस्थितियों में जाने के लिए सभी चरणों को दिखाने के लिए नीचे दी गई छवि भी बनाता हूं:


पसंदीदा तरीका (क्योंकि यह एक नलसाजी कमांड है; प्रोग्रामेटिक होने का मतलब है):

$ 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 से बचने के लिए --pretty तर्क एक खाली प्रारूप स्ट्रिंग निर्दिष्ट करता है।
  • --name-only तर्क केवल उन फ़ाइल नामों को दिखाता है जो प्रभावित थे (धन्यवाद हैंक)।
  • -r तर्क उप-पेड़ में भर्ती करना है

$ git log 88ee8^..88ee8 --name-only --pretty="format:"

git show --name-only commitCodeHere







git-show