본문 바로가기

이것저것

컴퓨터 한대에 github 여러 계정 사용하는 방법

개발자라면 누구나 사용하고 있는 git. 개인적으로 github, gitlab 모두 사용하고 있는데 최근 문제가 발생했다. 나와 같은 문제 상황을 겪을 사람을 위해!서가 아니라, 내가 또 이런 경우가 발생하면 이것저것 삽질할 것으로 보여 이번에 처리한 내용을 따로 정리하고자 한다.

 

일단 상황을 간단히 정리하면 다음과 같다.

  • git A 계정을 ssh key 등록해서 사용 중임.
  • 새로운 git B 계정에 A 계정에서 사용하는 ssh key를 등록하려 했더니 오류 발생.

나는 계정 2개 또는 그 이상의 git 계정을 하나의 컴퓨터에서 사용하고 싶다! 

 

Key is already in use?

개인 git 계정(A 계정)만을 사용하고 있었으나, 다른 Project에 투입되면서 git 계정(B 계정)을 새로 생성해야 했다. 기존 A 계정 사용시에 ssh key 등록해서 사용하고 있어서, 새로운 B 계정도 ssh key 사용을 위해 A 계정에서 사용했던 ssh를 등록하려고 했는데 다음 이미지처럼 "Key is already in use" 경고창에 뜨면서 key 등록이 되질 않는다.

검색해보니, github에서는 ssh key 중복 등록을 허용하지 않는다고 한다. A 계정에서 사용하고 있는 ssh key를 B 계정에도 똑같이 추가하려니 안되는 것이다.

 

아, 그럼 일단 새로운 Key를 따로 생성하자!

일단 ssh-keygen 명령어를 통해 인증키를 따로 생성한다. ssh-keygen 명령어로 검색해 보면, 옵션까지 추가해서 생성해주는 내용도 나오는데 나는 일단 따로 옵션은 주질 않았다.

  1. ssh-keygen 명령어 입력 실행
  2. Enter file in which to save the key : 입력창에 ssh key 이름 입력(ex. id_rsa_project)
  3. Enter passphrase : 공백

이러면 2에서 입력한 파일 이름으로 2개의 파일이 생성된다. 그 중 .pub 확장자가 public key 파일이다.

 

그 다음은 새로운 계정(B 계정)의 ssh key 등록

기존 A 계정에서 사용하던 ssh key가 아니라 새롭게 생성한 key이기 때문에 B 계정의 ssh key 등록에는 무리가 없을 것이다.

  1. cat ~/.ssh/id_rsa_project.pub (위에서 생성한 key 값 내용)
  2. github > Settings > SSH and GPG keys > New SSH key
  3. Title에는 각자 알아서, Key type = Authentication Key, Key는 id_rsa_project.pub의 내용 

여기까지 왔으면 다음과 같은 상황이다.

github에는 각각 A 계정, B 계정에 따로 ssh key가 등록되어 있다. 그런데 내 컴퓨터에서는 어떤 git 계정을 사용해야 하는지 알수가 없다. 개발은 내 컴퓨터로 작업을 하니 내 로컬에도 따로 작업을 해줘야 한다.

 

config 파일 만들기

  1. vi ~/.ssh/config
  2. 위 이미지 참고해서 입력

아마 config 파일은 없을 것이고, 만약 있다면 해당 파일에 추가적으로 작성해주면 된다. 주석 이용해서 적당히 내가 나중에 봐도 알아먹을 수 있게 작성하고 큰 내용은 다음과 같다.

  • Host : github.com-{github username}
  • HostName : github.com (고정값)
  • User : {github username} // Commit 시에 나타나는 내용으로 자기 이름을 작성할지 아니면 이메일을 작성할지는 본인 선택.
  • IdentityFile : 계정별로 사용할 ssh key 파일 (ex. ~/.ssh/id_rsa_project)

git clone 시에 위에서 작성한 Host에 따라서 어떤 내용을 사용할 것인지 구분하는 config 파일이라 보면 된다.


git clone 주의할 점!

여기까지 진행한 뒤에, 새로운 B 계정을 통한 git clone시에 주의할 점이 하나가 있다. git clone시에 ssh를 선택하면 다음과 같은 형식일 것이다.

  • git@github.com:XXXX.git

기존과 동일하게 해당 내용을 이용하게 되면 Permission denied가 발생하게 된다. config 파일에서 설정한 것처럼 Host를 추가해줘야 한다. 다음처럼 말이다.

  • git@github.com-{github username}:XXXX.git

-(대시) 다음에 config 파일에 설정한 Host와 동일한 형태를 만들어줘야 한다.

 

Android Studio에서의 git 사용

개인적으로 Android Studio에서 새로운 B 계정의 프로젝트를 clone까지는 완료했다. 테스트 겸해서 commit을 진행했는데 왠걸? commit 메시지에 기존의 A 계정 이메일과 이름이 나오는 것이다. 아 뭔가 꼬였나해서 이것저것 더 검색을 해보니 다음과 같은 과정을 추가적으로 진행해줘야 한다.

 

.gitconfig를 통한 name, email 설정

git이 설치가 되어 있다면, git 자체의 설정은 .gitconfig 파일 내부에 있다.

  • cat ~/.gitconfig

위 명령어를 치면 위와 같은 화면이 나온다. user의 name, email을 보면 아마 기존 A 계정의 내용이 적혀 있을 것이다. 나는 새로운 B 계정은 기존과 다른 내용을 이용할 것이기 때문에 따로 설정을 해줘야 한다. 나는 새로운 gitconfig 파일을 따로 만들고, 해당 파일을 기존의 gitconfig 파일과 연결할 것이다.

  1. vi ~/.gitconfig-project (새로운 .gitconfig 파일 생성)
  2. 새로운 .gitconfig 파일의 [user] name, email 을 새로 사용할 B 계정 내용을 입력
  3. 기존의 .gitconfig 파일에 includeIf를 통한 계정 분리 작성

2번까지 진행한 다음, 3번은 다음처럼 입력한다.

  • [includeIf "gitdir:{새로운 B 계정을 사용한 Project 경로}"]
  • path = ~/.gitconfig-project // 1에서 작성한 새로운 gitconfig 파일

위에 작성한 내용의 뜻은 문구에서 알수 있다시피 간단하다. gitdir로 지정한 폴더는 path에서 지정해 놓은 git 정보를 사용한다는 뜻이다.


간단히 정리하자면,

  1. github는 동일한 ssh key를 사용할 수 없으므로, ssh-keygen 명령어를 통해 새로운 ssh key 생성
  2. 새롭게 생성된 ssh key를 새로운 계정에 등록
  3. ~/.ssh/config 파일에 Host 구분할 수 있는 정보 추가(username을 통한 구분. 해당 값을 git clone 할 때 추가해줘야 함)
  4. ~/.gitconfig 파일에 새로운 계정에 대한 정보 추가