git config 명령어 사용법
이번 포스팅에서는 Git 설정을 위해 사용하는 git config
명령어에 대해서 알아보겠습니다.
설정 범위와 설정 파일
git config
명령어에 대해서 배우기 전에 먼저 간단하게 설정 범위에 대해서 짚고 넘어가겠습니다.
Git은 지역(local), 전역(global), 시스템(system) 이렇게 크게 3가지 범위로 설정이 가능한데요.
지역 범위로 설정하면 특정 저장소(repository)로 한정되고, 전역 범위는 현재 사용자(user)의 모든 저장소를 포함시킵니다. 자주 사용되지는 않지만 시스템 범위로 설정하면 해당 컴퓨터의 모든 저장소와 사용자를 걸쳐서 적용됩니다.
이렇게 설정된 정보는 컴퓨터 내에서 서로 다른 위치에 텍스트 파일의 형태로 관리가 되는데요.
지역 범위의 설정 정보는 저장소 폴더의 .git/config
에 저장되며, 전역 범위의 설정값은 운영체제의 사용자 폴더의 .gitconfig
에 저장됩니다.
시스템 범위의 설정값은 운영체제에 따라 다른데 유닉스 계열에서는 /etc/gitconfig
, 윈도우즈 계열에서는 C:\ProgramData\Git\config
에 저장됩니다.
설정 쓰기
git config
명령어를 사용해서 다양한 범위에서 설정을 할 수 있는데요.
기본적인 문법은 설정이 필요한 이름과 값을 차례대로 명령어의 인자로 넘기는 것입니다.
$ git config <이름> <값>
옵션을 주지 않으면 기본적으로 지역(local) 범위에서 설정이 이루어지는데요.
다른 범위를 사용하고 싶다면 범위 옵션(--global
또는 --system
)을 명시해주면 됩니다.
$ git config --<범위> <이름> <값>
여러 범위에서 동일한 이름에 대해서 다른 값을 설정했을 경우 좁은 범위가 넓은 범위보다 우선 시 됩니다. 이러한 특성을 이용하면 전역에서 설정한 값들을 지역에서 덮어쓰기 할 수 있는데요. 밑에서 예제를 통해서 좀 더 설명드리겠습니다.
설정 읽기
git config
명령어를 사용하면 현재 설정을 읽을 수도 있습니다.
값을 제외하고 이름만 넘기면 현재 설정되어 있는 값을 출력합니다.
$ git config <이름>
설정을 읽을 때도 범위 옵션을 줄 수 있지만 옵션을 주지 않으면 알아서 범위를 넓혀가면서 설정을 찾아주기 때문에 옵션을 주지 않는 것이 더 편리한 경우가 많습니다.
설정 지우기
특정 설정을 지우고 싶다면 --unset
옵션을 사용하면 됩니다.
$ git config --unset <이름>
전역 범위의 설정을 지우고 싶다면 --global
옵션을 사용해야겠죠?
$ git config --global --unset <이름>
지금까지 git config
명령어의 기본적인 사용법을 알아보았는데요.
지금부터 실질적인 활용 사례에 대해서 알아보겠습니다.
사용자 이름과 이메일 설정
여러 개발자가 함께 작업하는 프로젝트에서 코드 변경 이력에 정확한 사용자 이름과 이메일을 남기는 것은 매우 중요합니다. 그래야지 문제가 발생했을 때 해당 코드를 누가 변경하였는지 쉽게 파악할 수 있기 때문입니다.
아마도 이것이 많은 분들이 git config
명령어를 처음으로 접하게 되는 계기가 될텐데요.
git config
명령어를 사용하면 코드 변경분을 커밋(commit)할 때 어떤 사용자 이름과 이메일로 남길지를 설정할 수 있습니다.
사용자 이름과 이메일은 각각 user.name
과 user.email
을 설정 이름으로 사용하고 일반적으로 전역(global) 범위에서 설정합니다.
예를 들어, John Doh
라는 이름으로 커밋을 남기도록 설정해볼까요?
$ git config --global user.name "John Doh"
설정이 잘 되었는지 확인도 해봐야겠네요.
$ git config user.name
John Doh
마찬가지 방법으로 사용자 이메일을 john@personal.com
로 설정한 후 설정값을 확인해보겠습니다.
$ git config --global user.email john@personal.com
$ git config user.email
john@personal.com
이렇게 설정을 해주면 본인 컴퓨터에서 어느 저장소(repository)에서 작업을 하든 커밋을 할 때 동일한 사용자 이름과 이메일이 사용됩니다.
이제 코드 커밋을 해보면 코드 변경 이력의 Author
항목에 다음과 같이 설정한 사용자 이름과 이메일이 보일 것입니다.
$ git log
commit 4dced225d108c1719d178173023528876705224f (HEAD -> master)
Author: John Doh <john@personal.com>
Date: Thu Jun 2 20:59:34 2022 -0400
git config test
만약에 동일한 컴퓨터에서 개인 프로젝트와 업무 프로젝트를 왔다갔다 하면서 개발을 해야하는 상황이라면,
지역(local) 범위에서, 즉 --global
옵션을 빼고 사용자 이름과 이메일을 덮어쓰기 해주면 되는데요.
예를 들어, 업무 관련 저장소에서는 사용자 이메일로 john@business.com
을 사용해야 한다면 해당 저장소 폴더로 이동하여 다음과 같이 설정해줄 수 있습니다.
$ git config user.email
john@personal.com
$ git config user.email john@business.com
$ git config user.email
john@business.com
이렇게 로컬 범위에서 이메일을 설정을 해주면 해당 저장소에서만 john@business.com
으로 커밋이 되고, 그 밖에 저장소에서는 여전히 john@personal.com
이 사용됩니다.
항상 동일한 브랜치 명으로 푸쉬하기
git push
명령어를 실행할 때는 기본적으로 저장소명과 브랜치명을 명시해줘야하는데요.
그런데 생각해보면 우리는 대부분의 경우 로컬 저장소와 원격 저장소에서 동일한 브랜치 이름을 사용하는데 이렇게 매번 똑같은 저장소명과 브랜치명을 타이핑하는 것이 상당히 귀찮게 느껴집니다.
이럴 때는 다음과 같이 push.default
설정을 current
로 설정해주면 git push
명령어어가 항상 현재 브랜치를 기준으로 작동하게 됩니다.
$ git config --global push.default current
자, 이제부터는 어느 브랜치에서 작업을 하든 git push
만 날리면 원격 저장소에 동일한 브랜치로 코드 변경분이 업로드됩니다. 🤗
$ git push
원격 저장소에 코드 변경분을 업로드하기 위해서 사용하는 Git 명령어인 git push에 대해서는 별도 포스팅에서 자세히 다루고 있습니다.
기본 브랜치 변경
최근에는 기본 브랜치명을 GitHub부터 시작해서 과거 노예 역사의 잔재가 남아있는 단어인 master
대신에 main
을 사용하는 추세죠?
사실 Git 저장소 생성할 때마다 기본 브랜치명을 바꿔주는 것은 번거롭고 까먹기 쉽죠?
다음과 같이 init.defaultBranch
를 전역 범위에서 main
으로 설정해주면 항상 기본 브랜치명이 main
이 되기 때문에 상당히 유용합니다.
$ git config --global init.defaultBranch main
기본 에디터 변경
Git은 기본적으로 커밋 메시지를 남길 때 CLI 기반 도구인 vi를 사용하도록 되어 있는데요. VSCode와 같이 GUI 기반 에디터에 익숙하신 분들은 vi가 어렵게 느껴질 수도 있습니다.
이럴 때는 core.editor
설정을 원하는 에디터의 실행 명령어로 변경해주시면 좀 더 익숙한 환경에서 커밋 메시지를 남기거나 리베이스(rebase)와 같이 에디터가 필요한 작업을 할 수 있습니다.
예를 들어, VSCode를 기본 에디터로 사용하도록 설정해볼께요.
$ git config --global core.editor "code --wait --disable-extensions"
단축 명령어 설정
주변에서 Git을 잘 쓰시는 분들을 관찰해보면 단축 명령어를 잘 활용하신다는 것을 알 수 있는데요.
이것도 사실 git config
명령어를 통해 별칭(alias) 설정을 해준 거라고 보시면 됩니다.
보통 어느 저장소에 있느냐와 무방하게 동일한 명령어를 사용하고 싶을 것이므로 다음과 같은 방식으로 전역에서 설정을 해주는데요.
$ git config --global alias.<단축 명령어> <실제 명령어>
예를 들어, git status
를 git st
로 줄여볼까요?
$ git config --global alias.st status
마찬가지 방법으로 다른 명령어도 줄일 수 있습니다.
$ git config --global alias.ci commit
$ git config --global alias.co checkout
$ git config --global alias.br branch
마치면서
예전에는 git config
명령어를 쓸 일이 그리 많지는 않았습니다.
기껏해야 컴퓨터를 새로 샀거나 포맷할 경우 정도 였지요.
하지만 요즘에는 클라우드 환경에서 매번 새로운 가상 서버를 사용하는 것이 보편화되면서 Git을 처음부터 셋업해야하는 경우가 좀 더 빈번해지는 것처럼 느껴집니다. 그래서 한 번 정리해보았는데 도움이 되었으면 좋겠습니다 😄