2011-01-21 15 views
8

तुम इतनी तरह एक फाइल करने के लिए अपने git log खोज को सीमित कर सकते हैं:गिट के साथ, आप फ़ाइल पथ के बजाय 'गिट लॉग' के साथ फ़ाइल पैटर्न की खोज कैसे करते हैं?

git log [branch] -- foo.c 

लेकिन अगर आप एक फ़ाइल पैटर्न के बजाय एक पूर्ण पथ के लिए खोज कैसे सीमित हो जाएगी?

  • यदि आप किसी अन्य शाखा है, जहां शैल * की विस्तार से काम नहीं चलेगा पर git log चला सकते हैं ताकि आप फ़ाइल पैटर्न मिलान करने के लिए खोल पर निर्भर नहीं रह सकते पर विचार करें।
  • इसके अलावा, आप git ls-files वाली शाखा निर्दिष्ट नहीं कर सकते हैं।
+0

मुझे लगता है कि सोचने के लिए शुरू कर यह सुविधा एक साधारण कमांड लाइन विकल्प के रूप में मौजूद नहीं है ... – Neil

+0

शायद यह गिट के बाद के संस्करण में जोड़ा गया था, लेकिन यह मेरे लिए काम करता है: 'गिट लॉग - "*/foo.c" 'सहित शाखा विनिर्देशन। – michael

उत्तर

9

मैं इस तरह काम करने के लिए करते हैं:

git ls-files [--with-tree=<branch>] [path] | grep '<pattern>' | xargs git log [branch] 
+0

आप कम से कम गिट 1.7.3 के रूप में 'git ls-files' के साथ 'शाखा' निर्दिष्ट नहीं कर सकते हैं, इसलिए आपको प्रत्येक शाखा को चेकआउट करना होगा। – Neil

+0

@Neil: मेरा बुरा; तुम वहाँ जाओ। – Cascabel

+1

पीएस आप 'ls-tree -r -name-only' भी उपयोग कर सकते हैं। – Cascabel

-3

--glob विकल्प का उपयोग करें।

रेफरी: http://git-scm.com/docs/git-log

+1

नहीं, यह रेफरी पर ग्लोबिंग के लिए है, उदा। शाखाओं 'foo-a',' foo-b', और इसी तरह के लिए लॉग दिखाने के लिए 'foo- *'। – Cascabel

8

या सिर्फ प्रमुख . ड्रॉप, अर्थात्: git log -- *foo.c, या यहाँ तक git log -- ./*foo.c

+1

यदि आप अधिक जटिल रेगेक्स मिलान चाहते हैं, तो पर्ल का उपयोग करें और गिट लॉग में आउटपुट पाइप करें - –

+1

यह गलत है। यह केवल उन चीजों को ढूंढता है जो फ़ाइल पैटर्न से मेल खाते हैं तो फाइल पैटर्न से मेल खाते हैं। फ़ाइल मौजूद होने पर * को खोल द्वारा विस्तारित किया जाएगा। तो अगर आप कुछ गिट लॉग करते हैं तो कुछ_other_branch - * foo.c' यह उन सभी चीज़ों को नहीं ढूंढता जो आप खोज रहे हैं। – Neil

+3

मुझे यहां नीचे दिए गए वोटों (या "यह गलत है" टिप्पणियां नहीं समझती हैं।) बस पैटर्न को उद्धृत करें ताकि खोल वाइल्डकार्ड की अपेक्षा न करे (जब तक कि मैं प्रश्न को गलत समझ नहीं पा रहा हूं।) और इसकी कोई आवश्यकता नहीं है (न ही फ़ाइल पैटर्न मिलान के लिए पूर्ण regex का उल्लेख किया गया था)। बस बस उपयोग करें: 'गिट लॉग --नाम-केवल - "*/* foo *" '(या' गिट लॉग {शाखा} ... 'आदि) और यह पैटर्न से मेल खाने वाली सभी फाइलें पायेगा। – michael

संबंधित मुद्दे