한 PC에서 회사·개인 GitHub 계정 분리하기 (macOS)
회사 PC에서 회사 GitHub 계정과 개인 GitHub 계정을 폴더별로 자동 분리하여 사용하는 방법.
목표
| 폴더 | 용도 | 계정 |
|---|---|---|
/Users/parktaejeong/dev | 회사 프로젝트 | 회사 GitHub |
/Users/parktaejeong/dev-study | 개인 프로젝트 | 개인 GitHub |
폴더에 들어가는 것만으로 자동으로 올바른 계정·SSH 키가 적용되도록 설정합니다.
작동 원리
Git의 includeIf 기능을 활용해 작업 디렉토리 위치에 따라 다른 설정 파일을 로드합니다.
~/.gitconfig
├─ /Users/parktaejeong/dev/ → ~/.gitconfig-work (회사)
└─ /Users/parktaejeong/dev-study/ → ~/.gitconfig-personal (개인)
각 설정 파일은 사용자 정보(name, email) 와 SSH 키 경로를 지정합니다.
1. SSH 키 생성
회사용·개인용 SSH 키를 별도로 생성합니다.
# 회사용 키
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_ed25519_work
# 개인용 키
ssh-keygen -t ed25519 -C "personal@gmail.com" -f ~/.ssh/id_ed25519_personalPassphrase는 선택사항입니다. 입력 시 매번 묻지 않도록 macOS Keychain에 등록하려면 아래 참조.
공개키를 GitHub에 등록
각 키의 공개키(.pub) 내용을 복사해 해당 계정의 GitHub → Settings → SSH and GPG keys → New SSH key 에 등록합니다.
# 회사 계정에 등록할 공개키
pbcopy < ~/.ssh/id_ed25519_work.pub
# 개인 계정에 등록할 공개키
pbcopy < ~/.ssh/id_ed25519_personal.pub2. 계정별 Git 설정 파일 작성
회사용: ~/.gitconfig-work
cat > ~/.gitconfig-work << 'EOF'
[user]
name = 박태정
email = work@company.com
[core]
sshCommand = ssh -i ~/.ssh/id_ed25519_work -F /dev/null -o IdentitiesOnly=yes
EOF개인용: ~/.gitconfig-personal
cat > ~/.gitconfig-personal << 'EOF'
[user]
name = parktaejeong
email = personal@gmail.com
[core]
sshCommand = ssh -i ~/.ssh/id_ed25519_personal -F /dev/null -o IdentitiesOnly=yes
EOF
name과
sshCommand 옵션 설명
| 옵션 | 의미 |
|---|---|
-i ~/.ssh/id_ed25519_work | 사용할 SSH 키 지정 |
-F /dev/null | 시스템 SSH config 무시 (충돌 방지) |
-o IdentitiesOnly=yes | 지정한 키만 사용 (다른 키 자동 시도 방지) |
3. 메인 ~/.gitconfig 설정
nano ~/.gitconfig기존 내용이 있으면 아래 블록을 추가, 없으면 통째로 작성:
[init]
defaultBranch = main
# 회사 폴더 → 회사 계정
[includeIf "gitdir:/Users/parktaejeong/dev/"]
path = ~/.gitconfig-work
# 개인 폴더 → 개인 계정
[includeIf "gitdir:/Users/parktaejeong/dev-study/"]
path = ~/.gitconfig-personal
# 안전망: 위 폴더 밖에서는 커밋 자체를 차단
[user]
useConfigOnly = true경로 작성 시 주의
- 끝에 반드시
/를 붙일 것 (dev/와dev-study/가 헷갈리지 않게 함) - 절대 경로 사용 권장 (
~보다 명시적)
4. 폴더 생성 (없는 경우)
mkdir -p /Users/parktaejeong/dev
mkdir -p /Users/parktaejeong/dev-study5. 동작 확인
includeIf는.git폴더가 있는 레포 내부에서만 동작합니다. 빈 폴더에서git config user.email을 실행하면 결과가 나오지 않습니다.
테스트용 레포로 확인:
# 회사 폴더에 테스트 레포 생성
cd /Users/parktaejeong/dev
mkdir test && cd test && git init
git config user.email
# → work@company.com
git config --show-origin user.email
# → file:/Users/parktaejeong/.gitconfig-work work@company.com
cd .. && rm -rf test# 개인 폴더에서도 동일하게 테스트
cd /Users/parktaejeong/dev-study
mkdir test && cd test && git init
git config user.email
# → personal@gmail.com
cd .. && rm -rf test6. 사용법
새 레포 클론
폴더 위치만 맞추면 끝. SSH 별칭 같은 거 필요 없음.
# 회사 레포
cd /Users/parktaejeong/dev
git clone git@github.com:company-org/some-repo.git
# 개인 레포
cd /Users/parktaejeong/dev-study
git clone git@github.com:myname/my-project.git기존 레포 이전
이미 클론해둔 레포는 올바른 폴더로 옮기기만 하면 자동 적용됩니다.
mv ~/old-location/work-repo /Users/parktaejeong/dev/
mv ~/old-location/personal-repo /Users/parktaejeong/dev-study/(선택) 추가 안전장치
pre-commit 훅으로 이메일 도메인 검증
회사 레포에서 실수로 개인 이메일이 설정된 채 커밋하는 것을 막고 싶다면:
# 회사 레포 안에서 실행
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
EMAIL=$(git config user.email)
if ! echo "$EMAIL" | grep -q "@company.com$"; then
echo "회사 이메일(@company.com)로만 커밋 가능합니다."
echo " 현재 설정: $EMAIL"
exit 1
fi
EOF
chmod +x .git/hooks/pre-commit
.git/hooks는 클론 시 따라오지 않습니다. 팀 단위로 공유하려면 Husky 또는 pre-commit 프레임워크 사용.
macOS Keychain에 SSH 키 등록 (passphrase 자동 입력)
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_personal~/.ssh/config에 다음 추가:
Host *
UseKeychain yes
AddKeysToAgent yes
트러블슈팅
git config user.email 결과가 비어있음
→ .git 폴더가 있는 레포 안에서 실행했는지 확인. includeIf는 레포 컨텍스트에서만 작동.
useConfigOnly로 커밋이 막힘
fatal: no email was given and auto-detection is disabled
→ 정상 동작입니다. dev/나 dev-study/ 폴더 안의 레포에서 작업 중인지 확인. 임시 작업이면 해당 레포에서 명시적으로 설정:
git config user.email "..."
git config user.name "..."Push 시 권한 오류 (Permission denied (publickey))
다음을 점검:
-
SSH 키 등록 확인
ssh -T -i ~/.ssh/id_ed25519_work git@github.com ssh -T -i ~/.ssh/id_ed25519_personal git@github.com각각 다른 사용자명으로 인사 메시지가 떠야 정상.
-
현재 사용 중인 키 확인
GIT_SSH_COMMAND="ssh -v" git fetch 2>&1 | grep -i "offering" -
폴더 위치 재확인
pwd git config --show-origin user.email
잘못된 계정으로 이미 커밋해버린 경우
가장 최근 커밋만 수정:
git config user.email "work@company.com"
git commit --amend --reset-author --no-edit여러 커밋의 작성자 정보 일괄 변경:
git rebase -i HEAD~N --exec 'git commit --amend --reset-author --no-edit'이미 push된 커밋을 수정하면 force push가 필요하므로 협업 중인 브랜치에서는 주의.