Git 커밋할 때, 개인과 업무 계정의 분리
👨‍💻

Git 커밋할 때, 개인과 업무 계정의 분리

Published
February 18, 2025
Tags
github
git

개요

회사에서 Git을 사용하다 보면, 커미터의 이름과 이메일 설정을 분리해야 한다. System, Global, Local 설정을 통해서 Git 설정을 관리할 수 있기는 하지만, 여러 리포지토리를 섞어서 사용하다 보면 종종 실수를 하곤 하는데, 이를 방지하기 위한 좋은 방법을 소개하고자 한다.

설정

Git에서 특정 조건에 따라 설정을 넣을 수 있는 influceif 기능이 존재한다. 그리고 이 기능을 통해서 체크할 수 있는 항목들은 다음과 같다.
  • git-dir
  • onbranch
  • hasconfig
이를 잘 사용하면, 프로젝트의 경로, 브랜치, 그리고 설정 정보에 따라서 개인과 업무 설정을 분리할 수 있게 된다. 이 중에서 오늘 알아볼 기능은 hasconfig 이다.

새로운 git 프로젝트를 생성하고, GitHub의 리모트만 등록한 프로젝트의 로컬 설정은 다음과 같다.
> git config --local core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true remote.origin.url=git@github.com:<username>/<repository>.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.main.remote=origin branch.main.merge=refs/heads/main
.git/config
이처럼 대부분의 프로젝트에는 리모트를 등록하기 때문에 remote.*.url 키가 존재하게 된다. 여기서 * 부분은 리모트의 이름이라서 임의의 값으로 설정 가능하여 바뀔 수 있다. 그러면 hasconfig 를 사용하여 해당 설정값을 읽을 수 있고, 조직 이름을 통해서 서로 다른 경로임을 판단할 수 있게 된다!
... [includeIf "hasconfig:remote.*.url:git@github.com:<organization>/**"] path = ~/.config/git/config-work
~/.gitconfig
위와 같은 설정을 추가한다면, github.com/<organization> url을 가지는 모든 프로젝트에 대해서는 path 에 위치하는 git의 설정 정보를 추가로 가져올 수 있게 된다.
[user] signingkey = ssh-ed25519 AAAA... name = Work email = lamanus@workmail.local
~/.config/git/config-work
회사 계정 설정은 완료가 되었으니, 개인 계정 설정을 기본값으로 설정해보자.
... [user] signingkey = ssh-ed25519 AAAA... name = Personal email = lamanus@personal.local [includeIf "hasconfig:remote.*.url:git@github.com:<organization>/**"] path = ~/.config/git/config-work
~/.gitconfig
여기서 주의할 점은, 반드시 [user] 설정이 [includeIf…] 보다 먼저 설정되어야 기본값으로 적용된다. 설정 자체가 후순위 설정이 선순위 설정을 Override 하도록 되어있기 때문이다.

결과

이제 설정한대로 잘 동작하는지 확인한다. 개인 프로젝트와 회사 프로젝트에서 각각 다음 명령을 통해서 원하는 이메일 주소가 출력되는지 확인해본다.
git config user.email
앞서 설정한 바와 같이, remote url에 회사 조직 정보가 포함되면 회사 이메일로, 그 외의 모든 프로젝트는 개인 이메일로 나타난다면 정상적으로 설정이 완료되었다!

맺음말

앞서 사용한 옵션은 remote url을 이용하기 때문에, remote 설정이 되어있지 않으면 무조건 개인 메일을 리턴하게 된다. 그래서 회사 관련한 작업을 진행할때는 반드시 최초 설정시에 remote 설정부터 진행하고 최초 커밋을 생성해야만 한다.
그리고 설정을 좀 더 발전시켜서 개인 계정에 대한 정보를 별도의 파일로 분리하고, 각각의 설정에 대해서 서로 다른 ssh 키를 사용하는 것도 가능하다. 다음에 기회가 된다면 해당 설정을 추가하면서 1password에 연동해볼 계획이다.

참고 자료