जीआईटी में सबसे अधिक बदली गई फाइलें ढूंढना


105

मैं जीआईटी में फाइलें कैसे दिखा सकता हूं जो सबसे अधिक बार बदलती हैं?

जवाबों:


45

आप git effort( git-extrasपैकेज से) कमांड का उपयोग कर सकते हैं, जो आंकड़ों के बारे में दिखाता है कि प्रति फ़ाइल कितने कमिट करता है (कमिट और सक्रिय दिनों के द्वारा)।

EDIT: git का प्रयास सिर्फ एक बैश स्क्रिप्ट है जिसे आप यहां पा सकते हैं और अपनी आवश्यकताओं के अनुकूल बना सकते हैं यदि आपको कुछ और विशेष चाहिए।


आउटपुट 2-पार्ट किया जाएगा, पहले आपको अनसर्टेड परिणाम मिलते हैं, फिर सॉर्ट किए गए (और रंगीन) परिणाम। सही?
एंडी

@ और यह लगता है (और git help effortइसके बारे में कोई जानकारी नहीं है: /)। मुझे लगता है कि परिणाम का पहला सेट फाइलनाम द्वारा आदेश दिया गया है, और दूसरा प्रति फ़ाइल की संख्या के अनुसार। मैन पेज में मुद्दों की रिपोर्ट करने के लिए github.com/tj/git-extras/issues का भी उल्लेख किया गया है
Asenar

क्या यह इसी के समान है? blog.riff.org/…

155

आप निम्नलिखित की तरह कुछ कर सकते हैं:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

लॉग बस उन फ़ाइलों के नाम को आउटपुट करता है जिन्हें प्रत्येक कमिट में बदल दिया गया है, जबकि इसके बाकी हिस्से केवल छांटते हैं और शीर्ष 10 सबसे अधिक बार दिखाई देने वाले फ़ाइलनामों को आउटपुट करते हैं।


क्या आप मुझे बता सकते हैं कि क्या यह वर्तमान शाखा से बाहर है या यदि यह पूरे भंडार के लिए है? क्या शाखाओं के बारे में अभी तक विलय नहीं हुआ है?
कार्तिक एस

@ कर्कटीक्स: यह केवल वर्तमान शाखा के कमिट के लिए है - यदि आप अपनी किसी स्थानीय शाखा में कमिट को शामिल करना चाहते हैं तो आप --branchesइसमें जोड़ सकते हैं git log
मार्क लॉन्गेयर

1
अच्छा लगा। इसके अलावा, मैंने पाया कि यह रिपोर्ट फ़ाइल भी है जो बहुत पहले हटा दी गई थी। क्विक फिक्स समय सीमित करने के लिए था, जैसे: - since = "पिछले साल"
फ्रैक्टलस्पेस

2
उपयोगी भी --since "1 month ago"समय खिड़की को कम करने के लिए या अन्य विकल्पों का उपयोग कर रहा है

3
मेरे उत्तर का हिस्सा मिला:git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
AdamMc331

13

मैंने देखा कि मार्क और सेह के उत्तर दोनों --followही फाइल नहीं हैं , यह कहना है कि फ़ाइल का नाम बदलने के बाद वे रुक जाते हैं। यह स्क्रिप्ट बहुत धीमी होगी, लेकिन उस उद्देश्य के लिए काम करेगी।

git ls-files |
while read aa
do
  printf . >&2
  set $(git log --follow --oneline "$aa" | wc)
  printf '%s\t%s\n' $1 "$aa"
done > bb
echo
sort -nr bb
rm bb

git-most.sh


1
इस पर विस्तार करने के लिए मैंने gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350 बनाया, यह फ़ोल्डर द्वारा विशेष रूप से बदलता है, विशेष रूप से rolesमेरे मामले के लिए निर्देशिका में प्रत्येक फ़ोल्डर द्वारा लेकिन आपके उपयोग के मामले को फिट करने के लिए आसानी से संशोधित किया गया है।
१०:२६ बजे एलमेनन २२'१

3

Powerhellhell के लिए, यह मानते हुए कि आपने git bash इंस्टॉल किया है

git log --pretty=format: --name-only | sort | uniq -c | sort -Descending | select -First 10

3

यह एक विंडोज़ संस्करण है

git log --pretty=format: --name-only  > allfiles.csv

फिर एक्सेल में खोलें

A1: FileName
A2: isVisibleFilename  >> =IFERROR(IF(C2>0,TRUE,FALSE),FALSE)
A3: DotLocation >> =FIND("@",SUBSTITUTE(A2,".","@",(LEN(A2)-LEN(SUBSTITUTE(A2,".","")))/LEN(".")))
A4: HasExt       >> =C2>1
A5: TYPE        >> =IF(D2=TRUE,MID(A2,C2+1,18),"")

धुरी तालिका बनाएँ

values: Type
  Filter: isFilename = true
  Rows : Type
  Sub : FileName

click [Count Of TYPE] -> Sort -> Sort Largest To Smallest

क्योंकि मैं एक्सेल के बारे में बहुत कुछ नहीं जानता, मैं इन निर्देशों को नहीं समझता।
बिगिनर

2
git whatchanged --all | \grep "\.\.\." | cut -d' ' -f5- | cut -f2- | sort | uniq -c | sort

आप केवल देखना चाहते हैं तो आपकी फ़ाइलों को जोड़ने --authorके लिए git whatchanged --author=name --all


1

पुराना सवाल है, लेकिन मुझे लगता है कि अभी भी एक बहुत ही उपयोगी सवाल है। यहाँ सीधे कार्यक्षेत्र में एक उदाहरण है। यह आपके रेपो में आपके द्वारा दी गई शाखा के संबंध में शीर्ष 10 सबसे अधिक बदली हुई फ़ाइलों को प्राप्त करेगा।

git log --pretty=format: --name-only | Where-Object { ![string]::IsNullOrEmpty($_) } | Sort-Object | Group-Object  | Sort-Object -Property Count -Descending | Select-Object -Property Count, Name -First 10

0

हम उदाहरण के लिए, दो कमिट या शाखाओं के बीच परिवर्तित फ़ाइलों का भी पता लगा सकते हैं

git log  --pretty=format: --name-only <source_branch>...<target_branch> | sort | uniq -c | sort -rg | head -50 

0

यह शायद स्पष्ट है, लेकिन, प्रदान की गई क्वेरीज़ सभी फ़ाइलों को दिखाएगी, लेकिन, शायद आपको यह जानने में कोई दिलचस्पी नहीं है कि आपका कॉन्फ़िगरेशन या प्रोजेक्ट फ़ाइलें सबसे अपडेट हैं। एक साधारण grep आपके कोड फ़ाइलों को अलग कर देगा, उदाहरण के लिए:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.