뎁스노트 / 프로젝트 관리 / Git

프로젝트 관리

픽셀노마드픽셀노마드· 2년전

"이 파일 누가 짰지?" git-who로 팀 협업을 더 재밌고 스마트하게!

개발하다 보면 이런 순간이 자주 찾아옵니다."이 파일 누가 주로 만들었지?""이 서비스 모듈 담당자가 누군가요?""레거시 코드 좀 봐야 하는데, 누가 제일 많이 건드렸는지 궁금하네..."보통은 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은 이런 한계가 있어요예를 들어 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-whogit-who는 Python으로 작성된 오픈소스 CLI 도구로, git blame을 내부적으로 실행한 뒤 작성자별로 라인 수를 집계해서 퍼센트로 보여줍니다.사용법은 매우 간단합니다git who user_service.py출력 결과70% Alice 30% Bob와우! 파일의 주요 기여자 비율을 한 번에 확인할 수 있네요.🧩 git-who 실제 활용 꿀팁 5가지1. 코드 리뷰 담당자 추천git who를 통해 가장 많은 기여를 한 사람을 코드 리뷰어로 지정하면 자연스럽게 "내가 많이 짠 코드"를 리뷰하게 되어 품질도 올라갑니다.2. 레거시 코드 관리 지표특정 파일에 누군가 90% 이상 기여했다면? 이 사람만 아는 코드일 가능성이 큽니다.빠르게 지식 공유를 해야 할 타이밍!3. 온보딩 가이드신규 팀원이 "이 모듈 누가 담당했나요?" 물어볼 때, git who 결과를 보여주며 담당자를 객관적으로 소개할 수 있습니다.4. 리팩토링 협의리팩토링 대상 파일에서 상위 기여자 리스트를 뽑아, 사전 협의 및 기술 부채(Tech Debt) 공유를 효율적으로 할 수 있습니다.5. 팀 이벤트에도 활용 가능"누가 이 파일의 지배자인가?"팀 내에서 파일별로 기여도가 가장 높은 사람을 뽑아 개발자 시상식 같은 재미 요소로도 활용 가능!💡 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로 제대로 파싱됩니다.⚙️ CI/CD에 자동화로 붙이기 (GitHub Actions + Slack)팀에서 PR이 올라올 때마다 자동으로 주요 기여자를 분석하고 Slack으로 알림까지 할 수 있습니다.예시 Workflowname: 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/slack-github-action@v1.24.0 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 }}Slack 결과 예시:🔍 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.리뷰 문화, 코드 관리, 협업을 더 효율적이고 재밌게 만들어줄 수 있습니다.이제 더 이상 "누가 짰지?"를 고민하지 마세요!
1.5K
1
0

질문gitlab restore 이슈

gitlab에 문제가 있어 삭제 후 같은 버젼으로 새로 설치 한 뒤 백업파일로 복원을 시도하는 중 특정 repository 에서 fail과 동시에 복구프로세스가 종료됩니다..  백업용량사이즈크기를 보면 코드가 다 들어있는것같은데 말이죠..  왜이럴까요.. 아니면 백업파일(tar) 를 압축풀면  repository/프로젝트이름.bundle 파일들이 있는데 이걸로 복구 가능한가요..?
1.8K
1
1
0
닥터핸
닥터핸·2023-04-27
해당 에러 메시지는 GitLab에서 복원 프로세스를 수행하던 중 일부 파일을 찾지 못해서 발생한 것 같습니다. 이 문제가 어디에서 발생하는지 정확히 파악하기 위해서는 로그 파일을 살펴봐야 할 것 같습니다.   참고로 백업 파일의 용량이 크다고 해서 코드가 모두 들어있다는 것은 아닙니다. 백업 파일에는 저장소에 포함된 커밋, 브...
JadeLeeJadeLee· 4년전

GIT을 웹상으로 테스트 하며 연습해볼수 있는 사이트 입니다.

Learn Git Branching An interactive Git visualization tool to educate and challenge! learngitbranching.js.org 기본 적인 커밋 부터 시작해서 브랜치 생성 및 리베이스 까지 웹상으로 설명과 함께 명령어를 연습해볼 수 있는 사이트 입니다.  
2.3K
3
0
yj23124yj23124· 5년전

질문초보 Git 사용법 질문드립니다ㅠㅠ

git 사용법 질문드립니다. 아래 사진과 같이 "feat: Success ~" 을 커밋-푸시 했다가 전의 커밋인 "Making main activity ..." 로 다시 checkout 해서 되돌아간 뒤 새로 "feat: Tidy up item_post" 를 커밋하였습니다.   여기서 github으로 푸시하고 싶은데 git Everything up-to-date 라고 뜨고 github에는 연동이 되질 않습니다.. 혹시 어떻게 해야 할까요? revert, reset 모두 아닌 것 같은데 했다가 데이터 날라갈까봐 두려워서 제대로 시도도 못하겠습니다ㅠㅠㅠ  
1.7K
2
1
0
Dam2
Dam2·2022-03-31
편하게사용하실거면 소스트리 쓰시고   커밋 되돌리려면 reset 이나 revert  커밋취소  하셔야합니다..   https://codevang.tistory.com/227
닥터핸닥터핸· 5년전

맥에서 Bitbucket에 push할 때 You are using an account password for Git over HTTPS 메시지 보일 때

Always seenig a mesage 'Using an account password for Git over HTTPS' After every push I see this message in my terminal on Mac: " You are using an account password for Git over HTTPS. Beginning March 1, 2022, users are required to use app passwords remote: for Git over HTTPS. To avoid any disruptions, change the password used in your Git client remote: to an app pass... community.atlassian.com I have MacOS, I connect to BitBucket over HTTPS. I did not have GCM. This is how I solved the problem: 1. Install GCM: brew tap microsoft/git brew install --cask git-credential-manager-core See details:  https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git 2. Create BitBucket app password.  See steps: https://bitbucket.org/blog/deprecating-atlassian-account-password-for-bitbucket-api-and-git-activity 3.  When I push first time, GCM asked my password. And I did not see the remote message anymore   위 설정 후 git push 하면 Atlassian 로그인 창이 뜸. 이 때 패스워드 부분에 위에서 생성한 App Password를 입력하여 로그인하면 됨.
2.0K
1
0
라이너라이너· 6년전

Kallithea - 자체적으로 GitHub같은 서비스를 운영하고자 할 때 사용하는 오픈소스

Kallithea Kallithea, a free software source code management system supporting two leading version control systems, Mercurial and Git. kallithea-scm.org Kallithea는 자체적으로 GitHub 같은 Git 저장소 서비스를 만들 수 있는 오픈 소스입니다. 사용하기 쉽도록 Git에 대한 웹 인터페이스를 제공하네요. 데모는 여기서 => https://kallithea-scm.org/repos/
1.9K
0
피토니피토니· 6년전

GitHub 작업때마다 자동으로 트윗 날리게 만들기

How to Send Tweets With a JavaScript GitHub Action Learn how to create a GitHub action which sends a tweet whenever a pull request is merged. hibbard.eu 트윗을 날리는 간단한 자바스크립트 모듈을 만든 다음 GitHub의 workflow 기능을 이용하여 GitHub에서 pull, request 등의 액션을 취할 때마다 자동으로 트윗을 날리도록 만드는 방법이네요.  
1.8K
1
0
tturyttury· 6년전

질문git switch FETCH_HEAD

다른 브랜치로 전환할 때는 그냥 switch를 사용하도 되던데 왜 fetch 후에 FETCH_HEAD로 switch를 사용하면 안되는지 모르겠어요 fatal: a branch is expected, got 'FETCH_HEAD' 라고 뜨네요.. checkout은 되던데 왜 switch는 안되는지 궁금합니다!!
2.1K
2
0
kimho
kimho·2020-09-18
원하시는 작업을 swtich로 사용하시려면 -d 옵션과 함께 쓰실 수 있습니다. $ git switch -d FETCH_HEAD  
강구강구· 7년전

질문기초적인... git 사용법 질문(by 소스트리)

예를 들어 원격브랜치와 로컬브랜치가 B1, B2, B3, B4, B5 이렇게 존재하고 A군은 B1을 수정하고 C군은 B2를 수정한다고 가정했을 때,   C군이 B1의 수정된 내용을 B2에 적용하려고 합니다. (나머지 B3, B4, B5는 적용x) 단 B1, B2 브랜치를 병합하여 하나의 브랜치로 만드는게 아닌 B1, B2브랜치 가지는 그대로 두 되, B1의 내용은 건들지않고 B1에서 변경된 내용을 B2에만 적용하고자 할때 어떤 기능을 써야될까요? 커맨드 입력말고 소스트리로 할수 있는 방법이 있는지, 있다며 어떻게 할 수 있는지 조언 부탁 드립니다.
2.4K
1
1
0
kimho
kimho·2020-05-14
원하시는 방법인지 모르겠습니다만, 다른 브랜치에 있는 커밋을 선택적으로 내 브랜치에 적용시킬 때 git cherry-pick 이라는 명령어가 있습니다. https://imasoftwareengineer.tistory.com/7   소스트리에서 사용하는 방법은 아래와 같습니다. https://goodayth.github.io/git-cher...
머똥가머똥가· 7년전

질문소스트리 브랜치삭제시 그동안 작업한 브랜치내용이 삭제되나요?

어떻게되나요... 좌측 브랜치만 삭제되는건지.. 너무 많아서 없애려구 합니다.
2.2K
2
1
0
kimho
kimho·2020-04-08
branch는 삭제됩니다. 삭제 전에 merge를 하는 것이 좋습니다. https://memoming.com/37