만약 하나의 컴퓨터에서 A프로젝트, B프로젝트를 작업한다고 가정하자.
A는 a라는 github 계정으로 저장소를 관리해야 하며, B는 b라는 github 계정으로 저장소를 따로 관리해야 한다.
이럴 땐 어떻게 해야 할까??
만약에 본인 컴퓨터에서 단 한번이라도 git을 사용했다면, 다음 명령어를 실행해보자.
$ git config --list
그렇다면 다음과 비슷한 결과물을 볼 수 있다.
credential.helper=osxkeychain
init.defaultbranch=main
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
user.name=이름
user.email=이메일주소
core.excludesfile=/Users/whkwon/.gitignore_global
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/private/var/folders/0q/1f83qk2x3t17bvp6ybhccg3h0000gn/T/AppTranslocation/22EAA26E-8317-4095-B215-98FB7407557E/d/Sourcetree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
pull.ff=only
위 결과물에서 중요하게 봐야할 것은 user.name
과 user.email
이다. 이는 현재 git 저장소에 실제 등록되어 있는 본인의 이메일과 계정 이름이다.
(본인 같은 경우 github에 등록되어 있는 계정인 user.name
= name7777 , user.email
= mywonhyuni@gmail.com 이렇게 되어있다.)
저건 global로 설정 된 계정 정보이다.
즉, 내가 프로젝트를 하나 생성하고 config를 딱히 건드는 것 없이 commit, push를 하면 무조건 1차적으로 global로 설정 된 계정/이메일로 관리가 된다.
local이 global보다 더 높은 우선 순위를 가지게 때문에 local로 git 계정 등록이 된 프로젝트는 해당 계정으로 저장소가 관리된다.
먼저, 원하는 프로젝트 경로로 진입 후 다음 명령어를 친다.
$ git config --local user.name 'git 계정이름'
$ git config --local user.email 'git 등록 이메일'
설정 확인은 다음 명령어를 통해 알 수 있다.
$ git config --list
결과는 다음과 같다.
credential.helper=osxkeychain
init.defaultbranch=main
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
user.name=OOO # global name
user.email=OOO # global email
core.excludesfile=/Users/whkwon/.gitignore_global
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/private/var/folders/0q/1f83qk2x3t17bvp6ybhccg3h0000gn/T/AppTranslocation/22EAA26E-8317-4095-B215-98FB7407557E/d/Sourcetree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
pull.ff=only
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
user.name=name7777 # 해당 프로젝트에서만 나오는 local name
user.email=mywonhyuni@gmail.com # 해당 프로젝트에서만 나오는 local email
remote.origin.url=git@github.com:name7777/payhere_assignment.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
상/하단에 두 개씩 있는데, 하단에 있는 것이 local이므로 참고하면 된다.
존재하지 않는다면, 생성 후 이동하자
$ cd ~/.ssh
ssh-key
생성다음 명령어로 키를 생성한다
$ ssh-keygen -t [암호화 방식] -b [생성할 key의 크기] -C 'GitHub 등록 메일 주소'
위 명령어가 끝나면 다음과 같은 메시지가 나온다.
Generating public/private rsa key pair.
다음과 메시지가 나오는데, 여기서 그냥 Enter 치면 id_rsa
라는 이름의 파일로 저장이 되고, 그게 싫다면 원하는 명칭을 적으면 해당 파일로 만들어진다.
Enter file in which to save the key (/Users/whkwon/.ssh/id_rsa):
이름을 설정하고 나면 해당 계정의 비밀번호를 입력하라고 나온다.
필자는 id_rsa_name7777
로 만들었다.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
마지막으로 다음과 같은 메시지가 나오면 정상적으로 ssh-key
가 생성이 된 것이다.
해당 파일 목록을 보면 id_rsa_name7777
, id_rsa_name7777.pub
두 개가 생성된 것을 볼 수 있다.
pub
은 public의 약자로 공개키이며, 남은 하나는 비밀키이다.
Your identification has been saved in id_rsa_name7777
Your public key has been saved in id_rsa_name7777.pub
The key fingerprint is:
SHA256:sha256sha256sha256sha256 mywonhyuni@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
| .+*SO= |
| ..oM=. |
| o. ==+ . |
| . 보안. . |
| 때문 |
| o o + o . |
| 에 조금 변형 |
| o.. = G . |
| 했습니다!! |
+----[SHA256]-----+
아래 명령어를 통해 ssh-key
를 등록해보자.
ssh-key
는 pub가 안붙은 비밀키를 등록하자
$ ssh-add [생성한 ssh-key의 경로]
명령어를 실행했을 때, 다음과 같은 쉘이 나오면 성공한 것이다.
Identity added: /Users/whkwon/.ssh/id_rsa_name (mywonhyuni@gmail.com)
🔔 참고
만약 아래와 같은 오류가 발생한다면,
Could not open a connection to your authentication agent.
이 명령문을 실행하고 다시 실행하면 된다.
$ eval $(ssh-agent)
/.ssh
경로에 config
파일을 생성하고 다음 내용을 작성하자
$ vi ~/.ssh/config
config
파일 내 내용 추가
Host github.com-name7777
HostName github.com
IdentityFile ~/.ssh/id_rsa_name7777
User name7777
ssh-key
파일 경로name7777
)경로는 다음과 같다.
GitHub 접속 > (로그인) > 우측 상단 프로필 클릭 > Settings > SSH and GPG keys > New SSH Key
다음과 같은 화면이 나오면 Title 엔 본인이 알아볼 수 있는 이름을 정하고 Key에는 위에서 만든 .pub
키의 내용을 적으면 된다.
.pub
키의 내용은 다음 명령어로 알 수 있다.
(하기 경로는 본인이 만든 .pub
의 경로로 지정해야 한다)
$ cat ~/.ssh/id_rsa_name7777.pub
이 후, GitHub 비밀번호를 입력하여 인증하면 설정이 완료 된다.
설정이 완료 되면, 아래 이미지와 같이 나올 것이다.
다음 명령어를 통해 지금까지 한 설정이 잘 됐는지 확인해보자.
참고로 name7777
부분은 4번에서 본인이 지정한 맨위 Host 옆에 지은 id를 넣으면 된다.
$ ssh -T git@github.com-name7777
정상적인 화면은 다음과 같다.
Hi name7777! You've successfully authenticated, but GitHub does not provide shell access.
만약에 아래와 같은 화면이 뜰 수 있다.
The authenticity of host 'github.com (15.164.81.167)' can't be established.
RSA key fingerprint is SHA256:sha256sha256sha256sha256sha256sha256sha256
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
아마 위 내용은 본인이 최초에 생성하고 등록한 ssh-key
에 등록 당시 인터넷 IP 주소가 같이 들어가 있어 현재 IP주소가 달라 나타나는 현상으로 보인다.
현재 IP 주소를 신뢰하면 yes
를 입력하여 진행하면 된다.
🔧 수정
IP가 달라서 그런줄 알았는데 컴퓨터를 다시 껐다 키면 ssh-add
했던 것이 날아가는 것 같다.
다시 새로운 환경에서 ssh-add ~/.ssh/id_rsa_name7777
하고 remote 에 push
하니 정상 작동한다.