하나의 컴퓨터에서 여러 개의 깃 계정을 사용하는 방법이다. 회사 컴퓨터를 세팅할 때 회사 계정으로 이미 세팅을 맞춰놓은 상태였다. 하지만 개인 공부는 개인 계정으로 하는 것이 잔디 심기나 정리 측면에서 더 유용했기 때문에, 개인 계정을 사용해서 새 레퍼지토리를 파 사용하기로 했다.
기존 새 방식(실패)
개인 계정에서 레퍼지토리를 판다.
개인 공부를 위한 디렉토리를 하나 만들어 git config user 정보를 바꾼다.
> git config user.email
[email protected]
> git config user.name
kim-dokyung
// 회사 계정으로 되어 있으므로 이를 개인 계정으로 바꿔준다
> git config user.email [email protected]
> git config user.name dkkim0122
그리고 git clone도 해 보고 아니면 새 레퍼지토리를 만들었을 때 나오는 안내문을 따라
> touch README.md
> git add .
> git commit -m 'first commit'
> git remote add origin <https://github.com/dkkim0122/test.git>
그 후 push를 때렸더니 문제가 생겼다.
> git push -u origin main
**error: src refspec main does not match any**
**error: failed to push some refs to '<https://github.com/dkkim0122/test.git>'**
이는 default branch가 main이 아닌 master로 되어 있기 때문에 생기는 마이너한 오류라고 생각했다. 그래서 master로 바꿔 시험을 해 봤는데…
> git push origin master
**remote: Permission to dkkim0122/test.git denied to kim-dokyung.
fatal: unable to access '<https://github.com/dkkim0122/test.git/>': The requested URL returned error: 403**
403 에러가 뜬다. config를 바꿨다고 생각했음에도 kim-dokyung이라는 회사 계정으로 등록이 되고, 권한이 없어 원격 레퍼지토리에 접근하지 못한다. 즉 필요한 것은 개인 계정으로 권한을 부여받아 원격 레퍼지토리와 컨택하는 방법을 알아내는 것이다.
이를 해결해주기 위해 개인 계정의 ssh 권한을 만들어줄 것이다.
How to Work with GitHub and Multiple Accounts
개인 계정의 ssh 키를 만든다.
> ssh-keygen -t rsa -b 4096 -C **[email protected]**
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/dokyungkim/.ssh/**id_rsa**): /Users/dokyungkim/.ssh/**id_rsa_personal
// 여기서 이미 만들어진 키(id_rsa)를 덮어쓰지 않도록 키의 이름을 바꿔줘야 한다.**
.ssh 파일에 들어가 보면 새로 만들어진 키가 보일 것이다.
config id_ed25519.pub
**id_rsa_personal.pub** known_hosts.old
id_ed25519 **id_rsa_personal**
known_hosts sg20.pem
깃허브 개인 계정에서 해당 컴퓨터에 저장되어 있는 ssh 키를 등록한다.
settings > SSH and GPG keys > New SSH key
key 이름 임의대로 정하고, id_rsa_personal.pub에 담겨 있는 키 복사하여 내용에 붙여넣기
이제 개인 계정에 새 ssh 키를 등록했다.
이제 호스트의 ssh 관리 리스트에 우리가 새로 만든 ssh 키를 등록한다.
> ssh-add ~/.ssh/id_rsa_personal
Identity added: /Users/dokyungkim/.ssh/id_rsa_personal ([email protected])
이제 새 ssh 키가 계정에도 등록이 되었고, 호스트에도 등록이 되었다.
.ssh 안의 config 파일에서 호스트를 구분해 준다.
호스트를 구분해서 원격 레퍼지토리에 push하고 접근할 수 있도록 호스트를 구분해준다.
Host와 IdentityFile만 바꿔주고 나머지 내용은 동일하게 한다!
# 기존 계정
Host github.com
HostName github.com
User git
IdentitiesOnly yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking no
# 새 개인 계정
Host **github-personal**
HostName github.com
User git
IdentitiesOnly yes
AddKeysToAgent yes
**IdentityFile** ~/.ssh/**id_rsa_personal**
StrictHostKeyChecking no
이제 깃허브에서 원격 레퍼지토리에 접근할 때 SSH로 접근, HOST만 github-personal로 접근한다.
origin에 접근할 때 HOST를 바꿔서 접근해야 한다.
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
// git remote add origin git@**github.com**:dkkim0122/test.git
git remote add origin git@**github-personal**:dkkim0122/test.git
git push -u origin main
git clone git@**github.com**:dkkim0122/test.git
git clone git@**github-personal**:dkkim0122/test.git
그리고 push할 때 git push origin master
로 push한다.
<aside>
💡 이 때 git config user.email
과 user.name
을 개인 계정으로 바꿔줘야 개인 계정에 잔디가 심어진다!
</aside>
git push origin master와 git push -u origin main의 차이?