회사에서 작업한 코드가 내 개인의 코드와 섞이는 것만큼 불편한 일도 없을 것이다, 내 개인 계정이 회사의 코드에 남게 되는 것도 매우 조심해야할 일이기도 하다.
확실히 구분하려면 그만큼 사용환경도 확실히 분리할 수 있어야하는데 이럴 때 git config와 ssh key를 이용하여 간단히 해결할 수 있다. 아이디어는 다음과 같다.
1. 두 개의 계정모두 git hub에 ssh key로 접근할 수 있도록 설정해둔다.
2. git config로 두 사용자를 저장소별로 설정한다.
3. 나도 모르는 예외 상황을 대비한 전략 준비
이미 많이 사용하고 있는 설정일 것이라 간략히 기록한다.
각 계정에 대해 서로 다른 SSH 키를 생성해야 한다. 키를 생성하려면 Terminal을 열고 아래의 명령어를 입력하자:
ssh-keygen -t rsa -b 4096 -C "coolworker@idealcompany.kr"
키를 저장할 위치를 물어보면 다음과 같이 입력:
/home/mysecretid/.ssh/id_rsa_idealcompany
마찬가지로 두 번째 계정에 대한 SSH 키를 생성한다:
ssh-keygen -t rsa -b 4096 -C "mysecretid@gmail.com"
키를 저장할 위치를 물어보면 다음과 같이 입력:
/home/mysecretid/.ssh/id_rsa_mysecretid
생성한 각 SSH 키를 해당 GitHub 계정에 추가해야 한다. 먼저 키를 복사하자:
cat ~/.ssh/id_rsa_idealcompany.pub | pbcopy
그리고 GitHub에서 해당 계정으로 로그인하여 Settings > SSH and GPG keys > New SSH key에 키를 붙여넣자. 두 번째 계정에 대해서도 같은 과정을 반복한다.
이제 SSH 설정 파일(~/.ssh/config)을 만들거나 수정해야 한다. 해당 파일이 없다면 새로 만들어야 한다. 해당 파일에 다음 내용을 추가하자:
# idealcompany account
Host github.com-idealcompany
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_idealcompany
# mysecretid account
Host github.com-mysecretid
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_mysecretid
각 로컬 저장소에서 사용할 Git 사용자 이름과 이메일을 설정해야 한다. 이렇게 하려면 VS Code에서 해당 저장소로 이동하고 아래의 명령을 실행하자:
git config user.name "Your Name"
git config user.email "coolworker@idealcompany.kr"
개인 계정을 사용하는 다른 로컬 저장소에서는 다음과 같이 설정하자:
git config user.name "Your Name"
git config user.email "mysecretid@gmail.com"
설정이 잘 됐는 지는 아래 명령어로 간단히 볼 수 있다.
ssh -T git@github.com-idealcompany
ssh -T git@github.com-mysecretid
이제 적절한 호스트 별명을 사용하여 저장소를 복제할 수 있다. 예를 들어, idealcompany 계정에서 저장소를 복제하려면 다음과 같이 실행하자:
git clone git@github.com-idealcompany:organization/repo.git
mysecretid 계정에서는 다음과 같이 실행하자:
git clone git@github.com-mysecretid:username/repo.git
이 과정을 통해 각 저장소가 해당 계정에 알맞게 설정되며, 각 계정은 각각의 SSH 키를 사용하게 된다. 이를 통해 푸시하거나 풀을 할 때, 해당 계정이 알맞게 선택되도록 할 수 있다.
git config --global user.name "Your Name"
git config --global user.email "whoami@unknown.ai"
git config --global user.name "Your Name"
git config --global user.email "coolworker@idealcompany.ai"
이렇게 해서 각 폴더별로 나의 리포지토리와 회사의 리파지토리를 분리하여 연결할 수 있어 한 결 수월하게 일을 진행할 수 있게 됐다. UI 툴이나 좀 더 쉽게 눈에 띄는 도구가 있으면 좋을 것 같은데 아마 이런 툴을 찾으면 또 업데이트 할 예정이다.
작업을 하다보면 private key와 public key를 복사해서 사용할 일이 있다. 이럴 때 각 파일의 권한 설정도 중요하다. 다음의 힌트를 참고해서 활용하자.
chmod 400 privatekey chmod 644 publickey
pbcopy에 대한 설명은 https://velog.io/@damianos/command-line-text-to-clipboard 를 참고
정보가 풍부해서 많은 도움이 되었습니다.