이전

git 기여도

git ls-tree -r HEAD | sed -Ee 's/^.{53}//' | \
while read filename; do file "$filename"; done | \
grep -E ': .*text' | sed -E -e 's/: .*//' | \
while read filename; do git blame --line-porcelain "$filename"; done | \
sed -n 's/^author //p' | \
sort | uniq -c | sort -rn
# 1. 현재 브랜치의 모든 파일 목록을 재귀적으로 나열합니다.
git ls-tree -r HEAD | 

# 2. 각 파일 목록에서 앞의 53자를 제거합니다.
sed -Ee 's/^.{53}//' | 

# 3. 각 파일의 이름을 읽어서 file 명령어를 사용하여 파일 유형을 식별합니다.
while read filename; do file "$filename"; done | 

# 4. 텍스트 파일인 경우만 필터링합니다.
grep -E ': .*text' | 

# 5. 파일 이름만 남기고 나머지 정보를 제거합니다.
sed -E -e 's/: .*//' | 

# 6. 각 텍스트 파일에 대해 git blame을 실행하여 각 라인의 변경 기록을 가져옵니다.
while read filename; do git blame --line-porcelain "$filename"; done | 

# 7. git blame의 출력에서 저자 이름만 추출합니다.
sed -n 's/^author //p' | 

# 8. 저자 이름을 정렬합니다.
sort | 

# 9. 각 저자 이름의 출현 빈도를 셉니다.
uniq -c | 

# 10. 저자별로 기여한 라인의 수를 내림차순으로 정렬합니다.
sort -rn