2012-05-22 14 views
6

जब मैं git log --stat के साथ एक <path> तर्क का उपयोग करता <path>, Git सूचियों <path> केवल संशोधित फ़ाइल के रूप में संशोधित जब चयनित प्रतिबद्ध प्रदर्शित करने के लिए लॉग सीमित करने के लिए। मैं इसके बजाय सभी संशोधित प्रत्येक चयनित प्रतिबद्धता के लिए सूचीबद्ध पथ देखना चाहूंगा।'गिट लॉग --स्टैट - <path>' शो * सभी * फ़ाइलों को चयनित कामों में कैसे बनाया जाए?

उदाहरण के लिए:

$ echo test > a.txt 
$ echo test > b.txt 
$ git add a.txt b.txt 
$ git commit -m test 
[...] 
2 files changed, 2 insertions(+), 0 deletions(-) 
[...] 
$ git log -n1 --stat 
[...] 

a.txt | 1 + 
b.txt | 1 + 
2 files changed, 2 insertions(+), 0 deletions(-) 
$ git log -n1 --stat -- a.txt 
[...] 

a.txt | 1 + 
1 files changed, 1 insertions(+), 0 deletions(-) 

नोट दूसरा git log, पथ तर्क a.txt साथ, का कहना है कि "1 फ़ाइलों को परिवर्तित", जब वास्तव में "2 फ़ाइलें बदल"। मुझे a.txt और b.txt दोनों ने मुझे यह बताने के लिए गिट को बदलना होगा, भले ही मैं पथ a.txt पर आधारित प्रतिबद्धता का चयन करता हूं।

अद्यतन: @jacknagel ने मेरे प्रश्न का उत्तर दिया, लेकिन यह पता चला कि उसका समाधान मेरे असली उपयोग मामले में काम नहीं करता है। मेरे वास्तविक उपयोग के मामले में, मैं उन सभी कामों की तलाश में हूं जो नामों सहित एक फ़ाइल को संशोधित करते हैं, ऐसे मामले में जहां दो संबंधित परियोजनाएं अलग हो जाती हैं। मुझे यह पता लगाने की ज़रूरत है कि एक परियोजना में कौन से बदलाव अन्य परियोजनाओं में संबंधित बदलावों (मुझे बनाने की ज़रूरत है) दर्शाते हैं। दुर्भाग्य से, git शिकायत करता है जब मैं एक ही समय में --full-diff और --follow का उपयोग करने का प्रयास करता हूं।

तो, मेरा असली स्थिति में, मैं चलाने के लिए कोशिश कर रहा हूँ:

git log --stat --follow -- a.txt 

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

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 
+0

क्या कभी आप से पूछना मेरे लिए बहुत मतलब नहीं है। आप कमांड से अलग तरीके से व्यवहार करने की अपेक्षा कैसे करते हैं? जब आप फ़ाइल नाम देते हैं तो आप अकेले उस फ़ाइल का विवरण प्राप्त करने के लिए गिट बता रहे हैं। यदि आप इसे दोनों सामान दिखाना चाहते हैं तो – positron

+0

@positron कमांड का उपयोग करें: मैं रुचि के कामों की पहचान करने के लिए फ़ाइल नाम का उपयोग कर रहा हूं, लेकिन उन लोगों के लिए मैं पूरी जानकारी चाहता हूं। संक्षेप में, मैं ब्याज के अन्य * अज्ञात * फ़ाइल नामों की पहचान करने के लिए दिए गए फ़ाइल नाम का उपयोग कर रहा हूं। इसलिए, मैं अन्य फाइलों को 'गिट' नहीं बता सकता, क्योंकि मुझे नहीं पता कि वे क्या हैं। – ntc2

+0

उत्तर देने के लिए अपने * प्रश्न * को संपादित करने के बजाय, स्टैक ओवरफ्लो तरीका एक उत्तर जोड़ना है, भले ही यह आपका स्वयं का प्रश्न हो। मैंने सही उत्तर जोड़ने की स्वतंत्रता ली है, लेकिन अगर आप इसे स्वयं पोस्ट करते हैं तो मैं खुशी से इसे हटा दूंगा – djeikyb

उत्तर

9

आप --full-diff विकल्प का उपयोग कर इस व्यवहार प्राप्त कर सकते हैं:

--full-diff 
     Without this flag, "git log -p <path>..." shows commits that touch 
     the specified paths, and diffs about the same specified paths. With 
     this, the full diff is shown for commits that touch the specified 
     paths; this means that "<path>..." limits only commits, and doesn't 
     limit diff for those commits. 

     Note that this affects all diff-based output types, e.g. those 
     produced by --stat etc. 
+0

धन्यवाद! यह मुझसे पूछे गए प्रश्न का उत्तर देता है और इसलिए मैं जवाब स्वीकार कर रहा हूं। हालांकि, यह पता चला कि मेरा प्रश्न पर्याप्त विशिष्ट नहीं था, और '--full-diff' मेरी असली स्थिति में काम नहीं करता है, जहां मैं '--follow' का उपयोग कर रहा हूं। मैं प्रश्न अपडेट कर दूंगा और एक समाधान जोड़ूंगा जो दूसरे जवाब में '--follow' के साथ काम करता है। – ntc2

-1

आप कैसे एक आदेश से व्यवहार करने की उम्मीद करते हैं ऐसा करने के इरादे से अलग तरीके से? जब आप फ़ाइल नाम देते हैं तो आप अकेले उस फ़ाइल का विवरण प्राप्त करने के लिए गिट बता रहे हैं। आप यह दिखाने के लिए दोनों फ़ाइलों को तो आदेश का उपयोग करें चाहते हैं

git log -n1 --stat . 

या

git log -n1 --stat a.txt b.txt 
+3

मुझे लगता है कि विचार गिट को कहना है "मुझे दिखाएं कि केवल स्पर्श करें, लेकिन जब यह दिखाता है, सूची सब कुछ उन्होंने किया "। – jacknagel

+0

@jacknagel: बिल्कुल। – ntc2

0

प्रथम आईडी प्रतिबद्ध लगता है , तो प्रत्येक आईडी को git show पर फ़ीड करने के लिए उन्हें xargs (या gnu parallel) पर पाइप करें।

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 

powershell के साथ खिड़कियां पर, कुछ इस तरह काम करना चाहिए (लेकिन मैं इसे अभी तक परीक्षण नहीं किया ..):

git log --format='%H' --follow -- a.txt | ForEach-Object { git show --stat -C $_ } 
संबंधित मुद्दे