Git 커밋 전략: 히스토리 관리와 작업 단위 분리
Rebase 기반 워크플로우와 스택 브랜치를 활용한 효율적인 Git 협업 전략
Git을 사용하다 보면 여러 계정으로 작업해야 할 때가 있습니다. 예를 들어, 개인 프로젝트는 개인 GitHub 계정으로 관리하고, 회사 프로젝트는 회사 계정으로 관리해야 하는 상황이 있을 수 있습니다. SSH를 사용하면 별도의 라이브러리 설치 없이 로컬 환경에서 여러 계정을 손쉽게 관리할 수 있습니다.
먼저, 각각의 계정에 대해 별도의 SSH 키를 생성해야 합니다. SSH 키는 암호화된 형태로 자격 증명을 대체하며, 안전하게 Git 서버와의 통신을 가능하게 합니다.
# 첫 번째 계정용 SSH 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/github_user1_ed25519
# 두 번째 계정용 SSH 키 생성
ssh-keygen -t ed25519 -C "your_other_email@example.com" -f ~/.ssh/github_user2_ed25519위 명령어를 실행하면 ~/.ssh/ 디렉토리에 각각 github_user1_ed25519와 github_user2_ed25519라는 이름의 SSH 키 쌍(공개 키와 개인 키)이 생성됩니다.
ed25519는 최신 암호화 알고리즘으로, 기존의 RSA 방식보다 다음과 같은 장점을 제공합니다:
생성된 공개 키를 각 GitHub 계정에 등록해야 합니다.
# 공개 키 내용 확인
cat ~/.ssh/github_user1_ed25519.pub
cat ~/.ssh/github_user2_ed25519.pub각 계정의 GitHub Settings > SSH and GPG keys에서 New SSH key를 클릭하여 공개 키를 등록합니다.
SSH 설정 파일(~/.ssh/config)을 통해 각 SSH 키가 어떤 GitHub 계정과 연결될지를 설정합니다. 이 설정 파일을 사용하면 특정 호스트명에 대해 지정된 SSH 키를 사용하도록 지정할 수 있습니다.
# 첫 번째 계정 설정
Host github-user1
HostName github.com
User git
IdentityFile ~/.ssh/github_user1_ed25519
# 두 번째 계정 설정
Host github-user2
HostName github.com
User git
IdentityFile ~/.ssh/github_user2_ed25519위와 같이 설정하면 github-user1과 github-user2라는 호스트명이 각각의 SSH 키와 연결됩니다.
git입니다.이제 각각의 SSH 설정을 이용해 Git 리포지토리를 클론하거나, 푸시/풀 작업을 수행할 수 있습니다.
# user1 계정으로 클론
git clone git@github-user1:user1/repository.git
# user2 계정으로 클론
git clone git@github-user2:user2/repository.git이미 클론한 리포지토리의 계정을 변경하려면 remote URL을 수정합니다:
# 현재 remote URL 확인
git remote -v
# remote URL 변경
git remote set-url origin git@github-user1:user1/repository.git각 리포지토리에서 올바른 사용자 정보를 사용하도록 설정합니다:
# 리포지토리별 사용자 정보 설정
cd /path/to/user1/repository
git config user.name "User 1"
git config user.email "user1@example.com"
cd /path/to/user2/repository
git config user.name "User 2"
git config user.email "user2@example.com"SSH 키 파일의 권한을 적절히 설정해야 합니다. Git은 개인 키 파일의 권한이 올바르게 설정되지 않은 경우 보안을 위해 경고 메시지를 출력하며, 연결을 거부할 수 있습니다.
# 개인 키 파일 권한을 600으로 설정 (소유자만 읽기/쓰기 가능)
chmod 600 ~/.ssh/github_user1_ed25519
chmod 600 ~/.ssh/github_user2_ed25519
# 공개 키 파일 권한을 644로 설정 (권장)
chmod 644 ~/.ssh/github_user1_ed25519.pub
chmod 644 ~/.ssh/github_user2_ed25519.pub설정이 올바르게 되었는지 테스트합니다:
# user1 계정 테스트
ssh -T git@github-user1
# user2 계정 테스트
ssh -T git@github-user2성공하면 다음과 같은 메시지가 표시됩니다:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
특정 디렉토리에서 자동으로 특정 Git 계정을 사용하도록 설정할 수 있습니다.
~/.gitconfig에 다음과 같이 설정합니다:
[includeIf "gitdir:~/personal/"]
path = ~/.gitconfig-personal
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work각각의 설정 파일을 생성합니다:
~/.gitconfig-personal:
[user]
name = Personal Name
email = personal@example.com~/.gitconfig-work:
[user]
name = Work Name
email = work@company.com이제 ~/personal/ 디렉토리에서는 자동으로 개인 계정이, ~/work/ 디렉토리에서는 회사 계정이 사용됩니다.
# SSH 에이전트에 키 추가
ssh-add ~/.ssh/github_user1_ed25519
ssh-add ~/.ssh/github_user2_ed25519
# 등록된 키 확인
ssh-add -l마지막 커밋의 작성자 정보를 수정합니다:
git commit --amend --author="Correct Name <correct@email.com>"SSH를 활용하면 별도의 도구 없이 여러 Git 계정을 효율적으로 관리할 수 있습니다. SSH 설정 파일을 통해 각 계정에 대한 별칭을 지정하고, 적절한 키를 사용하도록 구성함으로써 안전하고 편리한 다중 계정 관리가 가능합니다.
디렉토리별 자동 계정 전환 설정을 추가하면 개인 프로젝트와 업무 프로젝트를 더욱 명확히 분리하여 관리할 수 있습니다.
Rebase 기반 워크플로우와 스택 브랜치를 활용한 효율적인 Git 협업 전략