개발하다 보면 이런 순간이 자주 찾아옵니다.
"이 파일 누가 주로 만들었지?"
"이 서비스 모듈 담당자가 누군가요?"
"레거시 코드 좀 봐야 하는데, 누가 제일 많이 건드렸는지 궁금하네..."
보통은 git blame
이나 git log
, git shortlog
같은 Git의 공식 명령어를 사용하죠.
그런데 이 명령어들은 정보를 잘게 쪼개서 주기 때문에 '딱 이 파일에 누가 가장 기여했는지 한눈에 보기 어렵습니다.
이럴 때!
오늘 소개할 git-who
가 큰 도움이 됩니다.
바로, 파일에 대한 주요 기여자를 퍼센트로 보여주는 작은 CLI 툴입니다.
git blame
vs git-who
차이점git blame
은 파일의 각 줄마다 누가 작성했는지를 확인할 수 있는 Git의 공식 명령어입니다.
주로 문제가 발생한 코드에서 "이 줄은 누가 썼을까?"를 확인할 때 사용합니다.
반면, git-who
는 파일 전체에서 누가 몇 퍼센트나 기여했는지를 비율로 보여주는 도구입니다.
쉽게 말해 git blame
이 라인 단위로 세세하게 추적하는 것이라면, git-who
는 파일 전체의 기여도를 요약해서 보여주는 도구입니다.
git blame
은 라인별로 작성자를 하나하나 확인할 때 사용하고,
git-who
는 파일 또는 디렉토리 단위로 주요 기여자와 그 비율을 한눈에 파악할 때 유용합니다.
팀에서는 git-who
를 활용해 담당자 파악, 코드 리뷰어 추천, 레거시 코드의 책임자 확인 등 다양한 상황에서 쉽게 사용할 수 있습니다.
예를 들어 git blame user_service.py
를 하면 이렇게 나옵니다.
e5f6a8d1 (Alice 2024-03-19 15:22:10 +0900 1) def get_user():
f67a1bc9 (Bob 2024-03-19 15:23:01 +0900 2) return self.user_id
라인별 작성자는 잘 보이지만,
"그럼 Alice가 이 파일에 몇 퍼센트나 기여했을까?"
를 바로 확인할 수는 없습니다. 직접 손으로 카운트해야 하죠.
git-who
git-who
는 Python으로 작성된 오픈소스 CLI 도구로, git blame
을 내부적으로 실행한 뒤 작성자별로 라인 수를 집계해서 퍼센트로 보여줍니다.
git who user_service.py
70% Alice
30% Bob
와우! 파일의 주요 기여자 비율을 한 번에 확인할 수 있네요.
git-who
실제 활용 꿀팁 5가지git who
를 통해 가장 많은 기여를 한 사람을 코드 리뷰어로 지정하면 자연스럽게 "내가 많이 짠 코드"를 리뷰하게 되어 품질도 올라갑니다.
특정 파일에 누군가 90% 이상 기여했다면? 이 사람만 아는 코드일 가능성이 큽니다.
빠르게 지식 공유를 해야 할 타이밍!
신규 팀원이 "이 모듈 누가 담당했나요?" 물어볼 때, git who
결과를 보여주며 담당자를 객관적으로 소개할 수 있습니다.
리팩토링 대상 파일에서 상위 기여자 리스트를 뽑아, 사전 협의 및 기술 부채(Tech Debt) 공유를 효율적으로 할 수 있습니다.
"누가 이 파일의 지배자인가?"
팀 내에서 파일별로 기여도가 가장 높은 사람을 뽑아 개발자 시상식 같은 재미 요소로도 활용 가능!
git-who
한계와 커스터마이징 팁기본 git-who
는 John Doe
이름에서 John
만 가져오는 이슈가 있습니다.
이유는 단순 split 로직 때문입니다.
import re
for line in blame_output.split("\n"):
match = re.search(r'\((.*?)\s+\d{4}-', line)
if match:
author = match.group(1)
authors.append(author)
John Doe
→ John Doe
로 제대로 파싱됩니다.
팀에서 PR이 올라올 때마다 자동으로 주요 기여자를 분석하고 Slack으로 알림까지 할 수 있습니다.
name: Git Who Check
on:
pull_request:
types: [opened, synchronize]
jobs:
git-who-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install git-who dependencies
run: pip install -r requirements.txt
- name: Run git-who on changed files
run: |
for file in $(git diff --name-only origin/main); do
echo "Analyzing $file"
git who "$file" >> who_report.txt || true
done
- name: Notify to Slack
uses: slackapi/[email protected]
with:
payload: |
{
"text": "🔍 *Git-Who Report for PR #${{ github.event.pull_request.number }}*\n```$(cat who_report.txt)```"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
🔍 Git-Who Report for PR #42
services/payment.py
55% Alice
45% Bob
models/order.py
80% Charlie
20% Alice
danger.js
로 PR 코멘트 자동 등록
git who
결과를 기반으로 리뷰어 자동 태그 봇 제작
팀 내 "이달의 마스터 파일" 선정 이벤트
git-who
는 작지만 강력한 도구입니다!git blame
의 아쉬운 부분을 채워주는 git-who
.
리뷰 문화, 코드 관리, 협업을 더 효율적이고 재밌게 만들어줄 수 있습니다.
이제 더 이상 "누가 짰지?"를 고민하지 마세요!