tj.park
← Back

한 PC에서 회사·개인 GitHub 계정 분리하기 (macOS)

·2 min read· views
#git#github#macos#ssh

회사 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_personal

Passphrase는 선택사항입니다. 입력 시 매번 묻지 않도록 macOS Keychain에 등록하려면 아래 참조.

공개키를 GitHub에 등록

각 키의 공개키(.pub) 내용을 복사해 해당 계정의 GitHub → Settings → SSH and GPG keys → New SSH key 에 등록합니다.

# 회사 계정에 등록할 공개키
pbcopy < ~/.ssh/id_ed25519_work.pub
 
# 개인 계정에 등록할 공개키
pbcopy < ~/.ssh/id_ed25519_personal.pub

2. 계정별 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

nameemail은 실제 본인 정보로 수정하세요.

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-study

5. 동작 확인

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 test

6. 사용법

새 레포 클론

폴더 위치만 맞추면 끝. 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))

다음을 점검:

  1. SSH 키 등록 확인

    ssh -T -i ~/.ssh/id_ed25519_work git@github.com
    ssh -T -i ~/.ssh/id_ed25519_personal git@github.com

    각각 다른 사용자명으로 인사 메시지가 떠야 정상.

  2. 현재 사용 중인 키 확인

    GIT_SSH_COMMAND="ssh -v" git fetch 2>&1 | grep -i "offering"
  3. 폴더 위치 재확인

    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가 필요하므로 협업 중인 브랜치에서는 주의.

참고

accent