ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git Config로 다중 계정 설정하기
    Git 2025. 1. 30. 09:46

    안녕하세요. 그린입니다 🍏

    이번 포스팅에서는 Git Config로 완벽하게 다중 계정 환경을 설정하는 방법에 대해 정리해보겠습니다 🙋🏻

     

    예전에 제 포스팅중에 다중 깃헙 계정 연동하기라는걸 작성한적이 있어요!

     

     

    [Github] 다중 깃헙 계정 연동하기

    안녕하세요. 그린입니다🍏 이번 포스팅에서는 다중 깃헙 계정을 한 PC에서 연동하는 방법에 대해 포스팅해보겠습니다🙌 개인 깃헙 계정과 회사에서 사용하는 깃헙 계정이 다를 경우 각각 프로

    green1229.tistory.com

     

    여기서도 config를 이용하여 변경해주는데 핵심은 개인 깃헙 계정과 회사 깃헙 계정이 공존할때 한 PC에서 이 둘에 대해 SSH key를 이용해 각자 환경과 상황에 맞게 적절한 계정으로 작업되도록 설정하는것을 알아봤습니다.

     

    그래서, 먼저 오늘의 포스팅을 이해하기전 위 포스팅을 사전적으로 학습하고 온다면 많은 도움이 될거에요 😃

     

    왜냐면, 오늘은 위 포스팅에서 발전해서 하나를 더 보완하는 과정이기 때문입니다!

     

    그럼 시작해보겠습니다 🚀

     


    Git Config로 다중 계정 설정하기

    먼저 이전 포스팅으로 다중 깃헙 계정 연동하기까지는 잘되었고 별탈이 없었습니다.

    그러나 하나 걸리는 포인트가 있었어요.

     

    어떤거냐면 먼저 예시로 보시죠!

     

    이 상황인데요.

    여기서 chanwoo29가 회사 깃헙 계정이고, GREENOVER가 개인 깃헙 계정입니다.

    그리고, 두번째 그림에서 보이는 프로필은 실제로 GREENOVER 계정의 프로필이구요.

     

    그런데 중요한건 위 캡쳐는 모두 회사 레포에서 이뤄진 PR과 커밋이에요.

    결국 깃헙에서 생성한 PR 및 이슈들은 회사 계정 로그인 상태에서 작업하기에 회사 계정으로 생성됩니다.

    그러나, 커밋은 로컬에서 진행하기에 지금처럼 개인 계정으로 로그가 남는것을 볼 수 있어요.

     

    왜 그럴까요?

     

    바로, git config의 user 설정이 global로 설정되어 있다보니, 해당 환경 변수를 따르게 되고 userEmail 값이 하나로 통일되어 있기에 발생하는 문제입니다.

     

    사실 문제라기엔 그냥 커밋 히스토리가 개인 계정으로 남는것이지 푸쉬나 PR이 안되고 하는건 아니긴 하지만요..!

     

    그래도 완벽하게 이런 커밋 로그의 author까지 확실히 용도 분리가 되면 좋잖아요?

     

    그래서 오늘 해볼 작업이 바로 이 작업입니다 ☺️

     

    먼저 두가지 방법이 있어요.

     


    1️⃣ 각자 다른 방법으로 레포 설정

    하나는 각 레포별로 다른 계정을 사용하도록 설정해주는 방법입니다.

    즉, 위 경우에선 work 용도로 clone해온 레포로 이동합니다.

     

    cd /path/to/work/repository

     

    그리고, 해당 레포에서 로컬 git config에 work 계정 정보를 설정해줘요.

     

     

    해당 config 파일입니다.

     

    먼저, 설정전 해당 파일을 열어볼까요?

     

    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = false
    	logallrefupdates = true
    	ignorecase = true
    	precomposeunicode = true
    [remote "origin"]
    	url = git@github.com-work:greenWork/greenWork-ios.git
    	fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "develop"]
    	remote = origin
    	merge = refs/heads/develop

     

    이렇게 별다른 설정이 되어 있지 않아요.

    그렇기에 global config 설정을 따르게 되는것이죠.

     

    여기에 우리는 별도로 명령어를 통해 user.name하고 user.email을 work에 맞게 넣어줄거에요.

     

    git config user.name "work-username"
    git config user.email "work@company.com"

     

    필요한것만 넣어주셔도 됩니다.

    저는 user.name까지 달리 주지 않아도 되기에 user.email만 넣었습니다.

     

    한번 그럼 다시 config 파일을 볼까요?

     

    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = false
    	logallrefupdates = true
    	ignorecase = true
    	precomposeunicode = true
    [remote "origin"]
    	url = git@github.com-work:greenWork/greenWork-ios.git
    	fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "develop"]
    	remote = origin
    	merge = refs/heads/develop
    [branch "test3"]
    	remote = origin
    	merge = refs/heads/test3
    [user]
    	email = "greenWork@gmail.com"

     

    짜잔 ✨✨✨

     

    마지막 라인을 보면 email이 work 깃헙 계정으로 설정된것을 볼 수 있어요.

    물론 명령어 입력이 아니라, 해당 파일을 직접 건드려도 됩니다!

     

    이렇게 하고 이제 커밋을 하면 해당 깃헙 이메일 계정 프로필로 작업 히스토리가 남아요..!

     

    아주 간단하죠?

     

    그런데, 매번 다른 work 레포를 클론해오고 설정할때마다 저걸 까먹지 않고 설정을 커스텀하게 넣어주는게 귀찮을 수 있어요.

     

    그럴 경우에 아예 gitconfig를 전역적으로 설정하는 방법이 있습니다 👋

     


    2️⃣ gitconfig로 한큐에 해결하기

    이전보다 조금 스텝이 있습니다.

     

    먼저, 홈 디렉토리에서 .gitconfig 파일을 설정해줘야 합니다 🙋🏻

     

     

    요런식으로 홈 디렉토리에 .gitconfig 파일이 있죠?

     

    열어볼까요?

     

    [user]
    	name = green
    	email = green@gmail.com
    [core]
    	excludesfile = ~/.gitignore_global
    [pull]
    	rebase = true
    [filter "lfs"]
    	clean = git-lfs clean -- %f
    	smudge = git-lfs smudge -- %f
    	process = git-lfs filter-process
    	required = true
    [credential]
    	helper = osxkeychain

     

    보시면 이렇게 되어 있는데, user 부분만 집중하면 됩니다.

    여기서 보는것처럼 해당 gitconfig 파일이 전역적인 설정인데, email이 work계정이 아니라 개인 깃헙 계정으로 되어 있어서 우리가 앞서 봤던 작업을 해주지 않았을때 해당 계정으로 설정이 심어져서 발생했었어요.

    그걸, 각 레포에서 별도 설정을 해준것이구요.

     

    그런데, 레포 별도 설정을 매번 하는게 귀찮으니 우리는 이 파일에서 해결해볼 수 있습니다!

     

    먼저 아래와 같이 코드를 추가해줍니다.

     

    [user]
    	name = green
    	email = green@gmail.com
    [core]
    	excludesfile = ~/.gitignore_global
    [pull]
    	rebase = true
    [filter "lfs"]
    	clean = git-lfs clean -- %f
    	smudge = git-lfs smudge -- %f
    	process = git-lfs filter-process
    	required = true
    [credential]
    	helper = osxkeychain
    [includeIf "hasconfig:remote.*.url:git@github.com-work:**/**"]
    	path = ~/.gitconfig-work

     

    마지막 라인을 보시면 이제 클론해오는 SSH 리모트에서 work로 되어 있는 글로브 패턴을 줍니다.

    그럼 해당 work로 클론해오는 레포들은 gitconfig-work 파일을 적용하게 되는 형태에요!

    includeIf를 통해 포함되어 있는지 여부를 검사하고 해당 경로를 바꿔주는 형태라고 보시면 됩니다.

     

    그럼 gitconfig-work은 어떻게 구성할까요?

     

    gitconfig와 동일한 홈 디렉토리에서 gitconfig-work를 만들어 줍니다.

    vi 명령어를 통해 하셔도 좋고, VS 코드에서 하셔도 무방합니다.

     

    코드는 이렇게 넣어줘요.

     

    [user]
    	name = green
    	email = greenWork@gmail.com

     

    user 섹션만 있어도 됩니다.

    왜냐하면 core, pull, filter, credential 등의 설정들은 전역 설정으로 메인 gitconfig에만 있으면 되기 때문이죠.

    즉, gitconfig-work는 work 계정으로 커밋할 때 필요한 사용자 정보만 덮어쓰는 용도로 볼 수 있어요 😁

    그럼 생성하고 나면 아래와 같이 해당 홈 디렉토리 경로에 두개가 생긴걸 볼 수 있습니다!

     

     

    그럼 이제 모든 설정 작업은 끝났습니다!

     

    이제 work로 클론해오고 해당 레포의 터미널을 켜봐요ㅎㅎ

     

    그리고 아래 명령어를 입력해 정상적으로 work 레포는 work 계정으로 연동되었는지 확인해볼 수 있습니다 😁

     

    git config --get user.name
    git config --get user.email

     

    아주 간단하죠~?

     


    마무리

    이렇게 2탄까지해서 보완되어 완전하게 다중 깃헙 계정을 연동해봤습니다.

    편리하게 설정하고 유용하게 써보세요!

     


    레퍼런스

     

    Git - includeIf hasconfig:remote.*.url not working

    I want to use two separate GitHub accounts on the same computer so I setup ssh keys for both of them. Both are working fine. I don't want to config my email and name each time I create a new repo s...

    stackoverflow.com

    'Git' 카테고리의 다른 글

    GitHub - Issue & PR Template  (60) 2024.06.05
    GitHub - Auto Assign 사용하기  (64) 2024.05.31
    Github - Suggestion  (70) 2024.05.23
    [Github] 다중 깃헙 계정 연동하기  (0) 2023.02.03
    Git 커밋 메시지 변경  (0) 2021.02.16
Designed by Tistory.