회사에서 Git을 쓰게 되었는데, 작업환경 특성상 personal account 대신 company account를 새로 만들어서 작업을 하게 되었다.
그런데 나는 개인적인 용도로도 Git을 사용하고 있어서, 개인 계정으로도 작업할 수 있어야 했다. 정리하면 아래와 같은 상황이었다.
- 내 메인 Git ID(kuna)에는 SSHkey1, 업무용 Git ID에는 SSHkey2가 등록되어 있음
- 일반적인 경우 개인 Git repository로 작업할 거고, 이 경우 SSHkey1을 사용하여야 함
- 업무용 Git repository들은
http://github.com/company_name/...
형태의 URL을 가지고 있고, 이것들은 SSHkey2로 인증되어야 함.
이러한 상황에서 세팅을 어떻게 할 지 찾아보다가 좋은 글이 있어서 포스트로 옮겨 써 놓는다.
1번째 방안 — 별도의 Host 만들기
각 계정별로 SSH 키를 준비해서, Git ID에 등록합니다.
git config를 수정하여, 특정 URL에 대해서 host를 redirect 할 수 있도록 한다.
# git@github.com 대신 git@github-company를 보도록 한다. 즉, hostname을 바꾼다. # 밑의 ssh config에서 특정 hostname에 대해 redirect 및 keyfile 설정을 해주기 위한 선행작업 git config --global 'url.git@github-company:company_name.insteadOf' 'https://github.com/company-name'
SSH Config file을 아래와 같이 수정합니다 (
~/.ssh/config
)# Default github account: oanhnn Host github.com HostName github.com IdentityFile ~/.ssh/oanhnn_private_key IdentitiesOnly yes # Other github account: superman Host github-company HostName github.com IdentityFile ~/.ssh/superman_private_key IdentitiesOnly yes
SSH key를 등록합니다. ssh-keygen 쓰면 알아서 등록 되는 듯?
$ ssh-add ~/.ssh/oanhnn_private_key $ ssh-add ~/.ssh/superman_private_key
연결이 실제로 잘 되는지 테스트
$ ssh -T git@github.com $ ssh -T git@github-company
정상적으로 세팅이 되었다면, ssh 연결이 잘 수행되어 아래와 같은 메시지를 볼 수 있습니다.
Hi oanhnn! You've successfully authenticated, but GitHub does not provide shell access.
이제 Git으로 필요한 작업을 하면 됩니다. (clone, ...)
git clone https://github.com/company_name/repo git clone git@github-company:company_name/repo.git
한계점?
이 방식으로는 Hostname(또는 git user)에 따른 유저(SSH key) 분리 정도밖에 하기 어렵습니다.
repo마다 다르게 GPG 서명까지 해야 한다고 하면, 이 방식으로는 하기 힘들어 보입니다.
2번째 방안 — 폴더별로 다른 .gitconfig 사용하기
이는 Git 2.13 이후로 지원하는 includeIf
기능을 사용하면 가능합니다.
[includeIf "gitdir:~/company_a/"]
path = ~/.gitconfig-company_a
[includeIf "gitdir:~/company_b/"]
path = ~/.gitconfig-company_b
경로에 따라 적절하게 repository와 gitconfig을 가져다 놓으면 설정 분리가 쉽게 됩니다.
개인적으로는, 이쪽이 더 직관적인 것 같습니다.
출처
'개발 > Developing' 카테고리의 다른 글
함수형 프로그래밍과 멀티 코어 (0) | 2022.03.17 |
---|---|
Compiler Explorer (0) | 2022.03.05 |
Boost.build와 jam build system (0) | 2022.02.19 |
[C++17] std::execution - 알고리즘의 병렬화 (0) | 2022.02.19 |
아주 이상한 std::thread의 stack smashing (0) | 2021.04.10 |