2013-01-08 12 views
66

क्या यह फ़ाइल का नाम केवल git log के साथ परिवर्तित करने में सक्षम है?केवल गिट लॉग के साथ परिवर्तित फ़ाइल नाम कैसे दिखाएं?

+0

कुछ हद तक संबंधित: [सभी गिट काम करने के लिए बैश फ़ंक्शन जिसमें एक फ़ाइल (जिसका नाम रेगेक्स से मेल खाता है) * बदल गया है *] (http://stackoverflow.com/questions/28119379/bash-function-to-find -all-git-commits-in-which-a-file-जिसका नाम-मिलान-ए-रीज/28120305) – aliteralmind

उत्तर

106

अपने जवाब के लिए धन्यवाद , @ एमवीपी, @ एक्सरो, मुझे लगता है कि मैं आपके दोनों उत्तरों पर आधार चाहता हूं।

git log --name-only 

या

git log --name-only --oneline 

छोटे के लिए।

20

यह लगभग देता है कि तुम क्या जरूरत है:

git log --stat --oneline 

आईडी + कम एक पंक्ति अभी भी बना हुआ प्रतिबद्ध है कि प्रतिबद्ध द्वारा बदली हुई फ़ाइलों की सूची के बाद।

28

मुझे लगता है कि आप --name-only ध्वज का उपयोग कर सकते हैं। कुछ की तरह:

git log 73167b96 --pretty="format:" --name-only

मैं व्यक्तिगत रूप से फ़ाइलें देखने के लिए git show का उपयोग में बदल एक प्रतिबद्ध

git show --pretty="format:" --name-only 73167b96

(73167b96 किसी भी प्रतिबद्ध/टैग नाम हो सकता है)

+3

यह समाधान केवल लेखक, दिनांक या संदेश जानकारी के बिना फ़ाइलों की सूची के लिए बहुत अच्छा है – Labynocle

5

आप की तरह सिर्फ फ़ाइल नाम की जरूरत है:

dir/subdir/file1.txt 
dir/subdir2/file2.sql 
dir2/subdir3/file6.php 

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

ऐसा करने में मैं आदेश के बाद का उपयोग करें:

git log --name-only --oneline | grep -v '.{7} '

grep कमांड शामिल नहीं (-v परम) हर पंक्ति जो सात प्रतीकों के साथ शुरू होता है (जो git log आदेश के लिए मेरे Git हैश की लंबाई है) अंतरिक्ष के बाद। तो यह हर गिट hash message लाइन को फ़िल्टर करता है और फ़ाइल नामों के साथ केवल लाइनों को छोड़ देता है।

git log --name-only --oneline | grep -v '.{7} ' | uniq

+2

इन ओएसएक्स बैश खोल, ब्रैकेट से पहले बैकस्लैश डालना आवश्यक है। मैंने लाइन स्टार्ट मिलान और स्पेस मैचर भी जोड़ा। "गिट शो - नाम-केवल - ऑनलाइन | grep -v '^। \ {7 \} \ s'" – Geuis

16

मैं यहाँ एक ऐसी ही उत्तर के लिए "Git लॉग" प्रतिबंध के बिना तलाश में ठोकर खाई:

एक उपयोगी सुधार संलग्न करने के लिए uniq तो यह इस प्रकार दिखता होगा डुप्लिकेट लाइनों को हटाने के लिए है। यहाँ जवाब मुझे नहीं दिया कि मैं क्या जरूरत है, लेकिन यह तो मैं मामले दूसरों में यह जोड़ देंगे किया इसे उपयोगी पाते:

git diff --name-only 

तुम भी मानक के साथ जोड़ी इस संकेत के लिए प्रतिबद्ध देखने के लिए क्या एक के बाद से बदल गया है सकते हैं विशेष रूप से प्रतिबद्ध:

git diff --name-only HEAD~3 
git diff --name-only develop 
git diff --name-only 5890e37..ebbf4c0 

यह संक्षेप फ़ाइल नाम प्रदान करता है केवल जो पटकथा के लिए अच्छा है।उदाहरण के लिए:

git diff --name-only develop | while read changed_file; do echo "This changed from the develop version: $changed_file"; done 

#OR 

git diff --name-only develop | xargs tar cvf changes.tar 
6

अब मैं बदल फ़ाइलें मेरे वर्तमान शाखा की सूची प्राप्त करने के बाद, यह गुरु (तुलना करने के लिए शाखा को आसानी से बदला जाता है) की तुलना का उपयोग करें:

git log --oneline --pretty="format:" --name-only master.. | awk 'NF' | sort -u 

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort -k 2,2 -u 

जो और केवल फ़ाइलों की एक सूची अपने राज्य (जोड़ा, संशोधित आउटपुट, हटाएँ:

से पहले, मैं इस पर भरोसा करने के लिए प्रयोग किया जाता घ):

A foo/bar/xyz/foo.txt 
M foo/bor/bar.txt 
... 

प्रकार के लिए -k2,2 विकल्प, बनाता है यह प्रकार (परिवर्तन के प्रकार ए, एम, डी,) के बजाय फ़ाइल पथ द्वारा।

+1

यह सचमुच एकमात्र उत्तर है जो वास्तव में "फ़ाइल नाम केवल" के प्रश्न का उत्तर प्रदान करता है। – DrStrangepork

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