[Git] 프로젝트/저장소마다 다른 계정 정보 사용하기

Wonhyun Kwon·2023년 6월 12일
0

Git

목록 보기
5/5
post-thumbnail

1. 문제 의식

만약 하나의 컴퓨터에서 A프로젝트, B프로젝트를 작업한다고 가정하자.
A는 a라는 github 계정으로 저장소를 관리해야 하며, B는 b라는 github 계정으로 저장소를 따로 관리해야 한다.

이럴 땐 어떻게 해야 할까??




2. 해결 방법

1) git config 설정

만약에 본인 컴퓨터에서 단 한번이라도 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.nameuser.email 이다. 이는 현재 git 저장소에 실제 등록되어 있는 본인의 이메일과 계정 이름이다.
(본인 같은 경우 github에 등록되어 있는 계정인 user.name = name7777 , user.email = mywonhyuni@gmail.com 이렇게 되어있다.)

저건 global로 설정 된 계정 정보이다.
즉, 내가 프로젝트를 하나 생성하고 config를 딱히 건드는 것 없이 commit, push를 하면 무조건 1차적으로 global로 설정 된 계정/이메일로 관리가 된다.

따라서, 본인이 따로 관리하고자 하는 프로젝트 경로로 들어가 local로 config를 설정해야 한다.

localglobal보다 더 높은 우선 순위를 가지게 때문에 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이므로 참고하면 된다.




2) ssh-key 등록

1. .ssh 숨김 폴더로 이동

존재하지 않는다면, 생성 후 이동하자

$ cd ~/.ssh

2. ssh-key 생성

다음 명령어로 키를 생성한다

$ ssh-keygen -t [암호화 방식] -b [생성할 key의 크기] -C 'GitHub 등록 메일 주소'
  • 암호화 방식: 보통 rsa를 사용
  • 생성할 key의 크기: 기본 ~ 최대 = 3072 ~ 4096

위 명령어가 끝나면 다음과 같은 메시지가 나온다.

 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]-----+

3. ssh-key 등록

아래 명령어를 통해 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)

4. ssh config 파일 작성

/.ssh 경로에 config 파일을 생성하고 다음 내용을 작성하자

$ vi ~/.ssh/config

config 파일 내 내용 추가

Host github.com-name7777
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_name7777
  User name7777
  • Host github.com-[사용할 이름] : 본인이 원하는 이름 지정
  • HostName: github.com
  • IdentityFile: ssh-key 파일 경로
  • User: GitHub 계정 이름 (본인의 경우 name7777 )

5. GitHub 계정에 ssh-key 등록

경로는 다음과 같다.
GitHub 접속 > (로그인) > 우측 상단 프로필 클릭 > Settings > SSH and GPG keys > New SSH Key


다음과 같은 화면이 나오면 Title 엔 본인이 알아볼 수 있는 이름을 정하고 Key에는 위에서 만든 .pub 키의 내용을 적으면 된다.


.pub 키의 내용은 다음 명령어로 알 수 있다.
(하기 경로는 본인이 만든 .pub 의 경로로 지정해야 한다)

$ cat ~/.ssh/id_rsa_name7777.pub

이 후, GitHub 비밀번호를 입력하여 인증하면 설정이 완료 된다.
설정이 완료 되면, 아래 이미지와 같이 나올 것이다.


6. 마지막으로, 설정이 제대로 되었는지 확인

다음 명령어를 통해 지금까지 한 설정이 잘 됐는지 확인해보자.
참고로 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 하고 remotepush 하니 정상 작동한다.

profile
모든 사용자가 만족하는 UI를 만드는 FE 개발자 권원현입니다.

0개의 댓글