개발자라면 누구나 사용하고 있는 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 명령어로 검색해 보면, 옵션까지 추가해서 생성해주는 내용도 나오는데 나는 일단 따로 옵션은 주질 않았다.
- ssh-keygen 명령어 입력 실행
- Enter file in which to save the key : 입력창에 ssh key 이름 입력(ex. id_rsa_project)
- Enter passphrase : 공백
이러면 2에서 입력한 파일 이름으로 2개의 파일이 생성된다. 그 중 .pub 확장자가 public key 파일이다.
그 다음은 새로운 계정(B 계정)의 ssh key 등록
기존 A 계정에서 사용하던 ssh key가 아니라 새롭게 생성한 key이기 때문에 B 계정의 ssh key 등록에는 무리가 없을 것이다.
- cat ~/.ssh/id_rsa_project.pub (위에서 생성한 key 값 내용)
- github > Settings > SSH and GPG keys > New SSH key
- Title에는 각자 알아서, Key type = Authentication Key, Key는 id_rsa_project.pub의 내용
여기까지 왔으면 다음과 같은 상황이다.
github에는 각각 A 계정, B 계정에 따로 ssh key가 등록되어 있다. 그런데 내 컴퓨터에서는 어떤 git 계정을 사용해야 하는지 알수가 없다. 개발은 내 컴퓨터로 작업을 하니 내 로컬에도 따로 작업을 해줘야 한다.
config 파일 만들기
- vi ~/.ssh/config
- 위 이미지 참고해서 입력
아마 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 파일과 연결할 것이다.
- vi ~/.gitconfig-project (새로운 .gitconfig 파일 생성)
- 새로운 .gitconfig 파일의 [user] name, email 을 새로 사용할 B 계정 내용을 입력
- 기존의 .gitconfig 파일에 includeIf를 통한 계정 분리 작성
2번까지 진행한 다음, 3번은 다음처럼 입력한다.
- [includeIf "gitdir:{새로운 B 계정을 사용한 Project 경로}"]
- path = ~/.gitconfig-project // 1에서 작성한 새로운 gitconfig 파일
위에 작성한 내용의 뜻은 문구에서 알수 있다시피 간단하다. gitdir로 지정한 폴더는 path에서 지정해 놓은 git 정보를 사용한다는 뜻이다.
간단히 정리하자면,
- github는 동일한 ssh key를 사용할 수 없으므로, ssh-keygen 명령어를 통해 새로운 ssh key 생성
- 새롭게 생성된 ssh key를 새로운 계정에 등록
- ~/.ssh/config 파일에 Host 구분할 수 있는 정보 추가(username을 통한 구분. 해당 값을 git clone 할 때 추가해줘야 함)
- ~/.gitconfig 파일에 새로운 계정에 대한 정보 추가
'이것저것' 카테고리의 다른 글
[모니터링] Prometheus + Blackbox Exporter로 API 상태 모니터링 및 슬랙 알림 구축하기 (0) | 2025.04.16 |
---|---|
[VSCode] VSCode + Remote - SSH (원격서버 파일(.log) 새로고침) (0) | 2024.10.14 |
[docker/docker compose] 리눅스 CLI를 통한 설치 (1) | 2024.09.26 |
[C#] Mac에서 VS Code로 문법 공부하기 (1) | 2023.12.31 |
[git] 원격 저장소(github/gitlab)와 로컬 저장소 연결하는 방법 (1) | 2023.12.18 |