2012-05-04 7 views
15

मैं msysgit (1.7.9) का उपयोग कर रहा हूं, और मैं वर्तमान स्तर पर केवल (ट्रैक की गई) फ़ाइलों और निर्देशिकाओं को दिखाने के लिए git ls-files कमांड का सही आमंत्रण ढूंढ रहा हूं, या तो इंडेक्स से या वर्तमान काम निर्देशिका अगर यह आसान है।केवल एक निर्देशिका स्तर के लिए 'git ls-files` कैसे करें।

अनिवार्य रूप से यह एक निर्देशिका सूची सूचीबद्ध करेगा जो आप गिथब पर देखेंगे। विंडोज से आ रहा है, मैं globbing (?) करने के सही तरीके से बहुत परिचित नहीं हूँ।

उत्तर

14

मुझे लगता है कि आप git ls-tree HEAD स्वाद के लिए sed'd चाहते हैं। ls-वृक्ष उत्पादन का दूसरा शब्द निर्देशिकाओं के लिए tree, blob फ़ाइलों के लिए, commit submodulesm के लिए किया जाएगा, फ़ाइल नाम सब कुछ ascii टैब के बाद

+1

'git ls-files | awk -F/'{प्रिंट $ 1}' | यूनिक | xargs ls -dl --color = auto' – iegik

+0

@iegik यह बहुत बेहतर है। मैं 'sed', /। *, 'अजीब के बजाय, बस' क्योंकि यह छोटा है। इसे एक उत्तर दें, कृपया? मैं इसे उधार दूंगा। – jthill

+0

मैकोज़ पर काम नहीं करता - 'ls: अवैध विकल्प - -'। मुझे लगता है कि आप कम से कम मैकोज़ पर चाहते हैं, '... | xargs 'ls' -Gdl' - कोई और जांच सकता है कि क्या यह लिनक्स पर भी काम करता है? – ELLIOTTCABLE

12

मेरा मानना ​​है कि git ls-tree --name-only [branch] जो आप खोज रहे हैं वह करेंगे।

+1

धन्यवाद, यह 9 5% तरीका है। आपका 'गिट एलएस-पेड़ - नाम-केवल [शाखा]' एक ही सूची में निर्देशिकाओं और फ़ाइलों दोनों को सूचीबद्ध करता है (यानी निर्देशिकाओं के लिए कोई पीछे नहीं है '/ ')। मैंने पाया कि 'git ls-tree -d -name-only [branch]' केवल निर्देशिकाओं को सूचीबद्ध करेगा। 'समस्या' का हिस्सा सबमिशन निर्देशिकाओं को स्पॉट करना है। –

+0

यह शायद स्वीकार्य उत्तर होना चाहिए! वह, या यह एक की ओर एक बहुत अच्छी शुरुआत है। : डी – ELLIOTTCABLE

+0

@ फिलिप ओकले मैं 'गिट एलएस-पेड़' के बजाय 'गिट एलएस-फाइल' को छोड़कर, एक समान काम करने की कोशिश कर रहा था। 'Git ls-files' के साथ, ऐसा लगता है कि समकक्ष विकल्प' --directory' है (उस कमांड में, '-d' '--deleted' के लिए छोटा है)। –

3

सिर्फ वर्तमान कार्यशील निर्देशिका कि Git द्वारा पता लगाया जाता है में फ़ाइलों को सूचीबद्ध करने के लिए है, मैंने पाया है कि इसके बाद के कई गुना तेजी से git ls-tree... का उपयोग करने से है:

ls | grep -f <(git ls-files) 

यह थोड़ा चारों ओर खिलवाड़ sed साथ ले यदि आप भी निर्देशिका, की तर्ज पर कुछ शामिल करना चाहता होगा:

ls | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq) 

मानते हुए कि आपके पास आपकी फ़ाइलों के नाम पर कोई '/' वर्ण नहीं है। साथ ही ...

ls -a | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)

क्रम में भी सूचीबद्ध करने के लिए "अदृश्य" (अभी तक ट्रैक) फ़ाइलें।

+0

यह अच्छा है ... मुझे आश्चर्य है कि मैं इसे '[उर्फ]' के रूप में क्यों नहीं जोड़ सकता ?? 'ls-tracked ="! f() {ls | grep -f <(git ls-files | sed's /\/.*// g 'sort | uniq);}; f "' -> घातक: खराब कॉन्फ़िगरेशन फ़ाइल ' –

4

git ls-tree <tree-ish> अच्छा और सभी है, लेकिन मैं सूचकांक<tree-ish> के रूप में निर्दिष्ट करने का तरीका को समझ नहीं सकता। (हालांकि मुझे यकीन है कि वहाँ कुछ सभी टोपियां सिर्फ इतना है कि ऐसा करने के लिए संदर्भ होने के लिए बाध्य कर रहा है।)

किसी भी तरह, ls-files परोक्ष सूचकांक पर काम करता है तो मैं रूप में अच्छी तरह है कि उपयोग कर सकते हैं:

$ git ls-files | cut -d/ -f1 | uniq 

इस शो केवल वर्तमान निर्देशिका में फ़ाइलें और निर्देशिका।

cut-f गहराई को नियंत्रित करने के लिए तर्क बदलें। आप, ls-files को <path> तर्क निर्दिष्ट -f बढ़ाने के लिए प्रमुख निर्देशिका समायोजित करने के लिए सुनिश्चित करें

$ git ls-files | cut -d/ -f-2 | uniq 

: उदाहरण के लिए, -f-2 फ़ाइलों और निर्देशिकाओं गहरी दो स्तर तक चलता है (जो पानी का छींटा दो है)

$ git ls-files foo/bar | cut -d/ -f-3 | uniq 
+0

आप इंडेक्स के लिए ['git write-tree'] (https://git-scm.com/docs/git-write-tree) के साथ एक पेड़ प्राप्त कर सकते हैं। – jthill

0

मुझे आश्चर्य है कि यह इतना कठिन है ... लेकिन मुझे गिट के बारे में मेरी पकड़ पर शुरू नहीं करना है।

जेथिल के उत्तर पर एक संस्करण अपरिहार्य प्रतीत होता है (हे, मैं भाषाई हूं, मेरे पास नए शब्द बनाने का लाइसेंस है)।संस्करण

ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"` 

है इस का उपयोग करता है 'ls' उत्पादन फ़ॉर्मेट करने के लिए है, तो आप रंग कोडिंग मिल (यदि आप का उपयोग करने वाले), आदि यह भी उपनाम के रूप में काम करता है:

alias gitls='ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`' 

Fwiw, आप रिकर्सिव कमांड को भी उपनाम कर सकते हैं, ताकि आपने 'ls' स्वरूपण का उपयोग किया हो (उदाहरण के लिए यदि आपका पथ + फ़ाइल नाम बहुत लंबा नहीं है, तो आपको दो कॉलम आउटपुट, एक्जिक्यूटिव के रंग कोडिंग आदि मिलेंगे)

alias gitls-r='ls `git ls-files`' 
संबंधित मुद्दे