Search

[git] PC 하나에서 git 계정 여러 개 사용하기

타입
개발
태그
git
개발환경
상태
Published
생성일
2022/12/29 05:54
최종 편집 일시
2023/02/24 11:35
2 more properties
회사 노트북을 안 쓰고 개인 맥북에서 개인 개발과 회사 업무개발을 둘 다 하고 싶었다.
현재 상황은
개인 이메일 → 개인 github
회사 이메일 → 회사 gitlab
을 써야하는 상황이다.
두 개의 git 계정을 한 머신에서 모두 사용하려면 SSH key 를 써야한다.
( SSH 대신 https 방식을 유지하고 싶다면 프로젝트마다 로컬 최상위에 있는 .git/config 파일을 수정해줘야 한다. )
개인 github 는 https 방식으로 쓰면서, 회사 gitlab 만 SSH 방식으로 사용해도 되긴 하지만 기왕 SSH key 를 만드는 김에 둘 다 만들었다.

~/.ssh 로 이동

cd ~/.ssh
Bash
복사

ssh key 생성

ssh-keygen -t rsa -C "개인 git 이메일" -f "ssh key 개인용" ssh-keygen -t rsa -C "회사 git 이메일" -f "ssh key 회사용" # 예시 ssh-keygen -t rsa -C "chs98105@gmail.com" -f "personal_git_key"
Bash
복사
ssh key 이름은 본인 마음대로 해도 된다.
key 생성 명령어를 치면 비밀번호(passphrase) 를 입력하라고 나오는데, 나는 입력하지 않고 바로 ENTER 를 눌렀다.
ssh key 의 비밀번호란 ?
SSH 인증 방식은 public key(서버) 와 private key(로컬) 를 이용해서 메시지 암호화 성공 여부로 인증 처리를 하는 방식이다.
입력하라고 하는 비밀번호는 로컬에 있는 private key 를 보호하기 위한 비밀번호이다.
만약 비밀번호를 설정하게 된다면 이 ssh 키를 사용할 때마다 비밀번호를 입력해줘야 한다.

ssh key 생성 완료

아래와 같이 personal_git_key 와 personal_git_key.pub 이 생겼다.
.pub 키는 말 그대로 public 키로 인증할 서버에 올릴 키이고,
확장자가 없는 key 는 private 키 이므로 유출되면 안 되는 키이다.

(선택사항) ssh key 를 ssh-agent 에 등록

ssh 키를 생성할 때 비밀번호를 입력했다면 매 번 치는 것이 귀찮은데, ssh-agent 에 등록하면 매번 비밀번호를 치지 않아도 된다.
ssh key 를 생성할 때 비밀번호를 생성하지 않았다면 이 과정이 필요없다.
eval "$(ssh-agent -s)" ssh-add -K ~/.ssh/[키 이름]
Bash
복사

ssh config 추가

~/.ssh/config 파일에 아래 내용을 추가한다. ( 기존에 파일이 없으면 파일 생성 )
# Host 는 별칭 개념이므로 본인이 사용하기 편하게 세팅해도 됩니다 Host github.com-me HostName github.com User git IdentityFile ~/.ssh/personal_git_key Host gitlab.com-{회사명} HostName gitlab.com User git IdentityFile ~/.ssh/{회사명}_git_key
Bash
복사
Host : ssh 접속할 때 github.com-me 로 들어오는 host ( 쉽게 부르기 위한 별명 개념 )
HostName : 해당 Host 명으로 들어왔을 때 실제로 연결되는 Host
User : 맨 앞에 붙는 이름 ( @ 앞 부분 )
IdentityFile : private 키 파일

public key 복사해서 github 에 등록

cat ~/.ssh/personal_git_key.pub
Bash
복사
맨 처음(ssh-rsa)부터 끝까지 다 복사해서 github 상에 등록해준다.
github SSH key 추가 링크
gitlab 은 아래 페이지

ssh 인증 테스트

ssh github.com-me
Bash
복사
ssh config 상에서 작성한 Host 별칭으로 ssh 인증 테스트를 해보자.
이러한 문구가 뜬다면 정상이다.

clone 하는 방법

https 를 사용할 때처럼 그냥 복사해서 clone 하면 안 되고, ssh config 에서 설정한 Host 이름으로 수정한 다음 clone 을 해야한다.
github 의 SSH clone 링크를 보면 디폴트 host 값으로 github.com 이 들어가있다.
예를 들어 ssh config 상에서 Host 명을 github.com-me 로 설정했다면
git@github.com-me:{유저명}/{레포명}.git 처럼 Host 부분을 본인 설정에 맞게 바꿔줘야 한다.

(선택사항 1) 커밋 로그의 user.email 바꾸기

만약 전역적으로 user.email 과 이 설정돼있다면, 커밋을 할 시 해당 user 프로필로 커밋 로그가 찍히게 된다.
ssh key 는 신원파악만 할 뿐 ssh key 마다 커밋로그의 프로필까지 자동으로 설정해주지는 않는다.
따라서 전역 프로필 설정을 계속 유지하고 싶은데 프로젝트마다 커밋 이메일을 변경하고 싶다면, 어쩔 수 없이 로컬 git config 에서 수동으로 바꿔줘야 한다.
$ git config user.email <원하는유저이메일>
Python
복사
만약 global config 를 변경하고 싶다면 git config --global ~ 로 해주면 된다.

config 값 확인

$ git config --list --show-origin
Python
복사
--show-origin : 해당 config 속성이 local 에서 설정됐는지 global 에서 설정됐는지 직관적으로 확인할 수 있다.

(선택사항 2) git config 수정

새롭게 clone 을 받은 레포가 아닌 기존 레포의 경우
프로젝트 상의 git config 파일에서 remote 레포지토리 주소를 수정해줘야 한다.
remote 주소는 위에서 했던 대로 원하는 ssh key 의 Host 주소로 바꿔줘야 한다.
ex) {프로젝트루트}/git/config
[remote "orgin"] url = git@github.com-me:{유저명}/{레포명}.git
Bash
복사