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 <이름>
설정을 읽을 때도 범위 옵션을 줄 수 있지만 옵션을 주지 않으면 알아서 범위를 넓혀가면서 설정을 찾아주기 때문에 옵션을 주지 않는 것이 더 편리한 경우가 많습니다.
특정 이름이 아니라 현재 적용되고 있는 모든 설정을 한꺼번에 보고 싶다면 --list 옵션을 사용하면 됩니다.
$ git config --list
user.name=John Doh
user.email=john@personal.com
push.default=current
init.defaultbranch=main
core.editor=code --wait --disable-extensions
설정이 어디서 왔는지 확인하기
여러 범위에서 같은 이름을 설정하다 보면 “지금 적용되는 이 값이 대체 어디서 온 거지?” 하는 순간이 옵니다.
이때 --show-scope와 --show-origin 옵션이 유용해요.
--show-scope는 설정값이 어느 범위에서 왔는지를 보여줍니다.
$ git config --show-scope core.editor
global code --wait --disable-extensions
--show-origin은 한 발 더 나아가 실제 파일 경로까지 알려줍니다.
$ git config --show-origin core.editor
file:/Users/dale/.gitconfig code --wait --disable-extensions
만약 지역 범위에서 같은 설정을 덮어썼다면 결과가 달라지는데요.
$ git config core.editor vim
$ git config --show-scope core.editor
local vim
$ git config --show-origin core.editor
file:.git/config vim
지역 범위가 전역보다 우선하기 때문에 local과 .git/config가 표시됩니다.
이 옵션들은 설정을 지울 때 특히 도움이 돼요.
git config --unset core.editor로 지역 설정을 지웠는데 여전히 값이 남아있다면 전역 범위에도 설정이 있기 때문인데요, --show-scope로 확인하면 바로 원인을 찾을 수 있습니다.
$ git config --unset core.editor
$ git config --show-scope core.editor
global code --wait --disable-extensions
지역 설정을 지우고 나니 전역 값이 다시 보이는 거죠.
이 값까지 지우려면 git config --global --unset core.editor를 사용해야 합니다.
참고로 위에서 알아본 --list 옵션과 --show-scope를 같이 쓰면 모든 설정의 출처를 한눈에 볼 수 있어서 전체 설정을 점검할 때 유용합니다.
$ git config --list --show-scope
system credential.helper=osxkeychain
global user.name=John Doh
global user.email=john@personal.com
global push.default=current
local user.email=john@business.com
설정 지우기
특정 설정을 지우고 싶다면 --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이 사용됩니다.
그런데 업무 프로젝트가 여러 개라면 저장소마다 일일이 로컬 설정을 해주는 것도 귀찮죠?
이럴 때 includeIf를 사용하면 폴더 경로에 따라 설정을 자동으로 전환할 수 있습니다.
먼저 업무용 설정 파일을 하나 만들어둡니다.
[user]
name = John Doh
email = john@business.com
그리고 전역 설정 파일(~/.gitconfig)에 다음을 추가해주면 됩니다.
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
이렇게 해두면 ~/work/ 폴더 아래에 있는 모든 저장소에서는 자동으로 업무용 이메일이 사용되고, 그 밖의 저장소에서는 전역 설정이 그대로 적용됩니다.
더 이상 새 업무 프로젝트를 클론할 때마다 이메일을 설정할 필요가 없어지는 거죠.
항상 동일한 브랜치 명으로 푸쉬하기
git push 명령어를 실행할 때는 기본적으로 저장소명과 브랜치명을 명시해줘야하는데요.
그런데 생각해보면 우리는 대부분의 경우 로컬 저장소와 원격 저장소에서 동일한 브랜치 이름을 사용하는데 이렇게 매번 똑같은 저장소명과 브랜치명을 타이핑하는 것이 상당히 귀찮게 느껴집니다.
이럴 때는 다음과 같이 push.default 설정을 current로 설정해주면 git push 명령어가 항상 현재 브랜치를 기준으로 작동하게 됩니다.
$ git config --global push.default current
자, 이제부터는 어느 브랜치에서 작업을 하든 git push만 날리면 원격 저장소에 동일한 브랜치로 코드 변경분이 업로드됩니다. 🤗
push.default에는 current 외에도 simple(Git 2.0+ 기본값), upstream, nothing, matching 등의 값이 있습니다.
각 옵션의 차이점과 선택 기준은 git push 사용법에서 자세히 다루고 있습니다.
원격 저장소가 여러 개인 프로젝트에서는 remote.pushDefault 설정으로 기본 push 대상 원격 저장소를 지정할 수도 있는데요.
이 설정은 fork 기반 워크플로우에서 특히 유용하며, git remote로 원격 저장소 관리하기에서 자세히 다루고 있습니다.
기본 브랜치 변경
최근에는 기본 브랜치명을 GitHub부터 시작해서 과거 노예 역사의 잔재가 남아있는 단어인 master 대신에 main을 사용하는 추세죠?
사실 Git 저장소 생성할 때마다 기본 브랜치명을 바꿔주는 것은 번거롭고 까먹기 쉽죠?
다음과 같이 init.defaultBranch를 전역 범위에서 main으로 설정해주면 항상 기본 브랜치명이 main이 되기 때문에 상당히 유용합니다.
$ git config --global init.defaultBranch main
git init명령어로 Git 저장소를 생성하는 방법은 git init 사용법을 참고하세요.
기본 에디터 변경
Git은 기본적으로 커밋 메시지를 남길 때 CLI 기반 도구인 vi를 사용하도록 되어 있는데요. VSCode와 같이 GUI 기반 에디터에 익숙하신 분들은 vi가 어렵게 느껴질 수도 있습니다.
이럴 때는 core.editor 설정을 원하는 에디터의 실행 명령어로 변경해주시면 좀 더 익숙한 환경에서 커밋 메시지를 남기거나 리베이스(rebase)와 같이 에디터가 필요한 작업을 할 수 있습니다.
예를 들어, VSCode를 기본 에디터로 사용하도록 설정해볼게요.
$ git config --global core.editor "code --wait --disable-extensions"
페이저 비활성화
git log처럼 출력이 긴 명령어는 기본적으로 페이저(pager)를 통해 화면 단위로 보여주는데요.
짧은 로그만 확인하거나 다른 명령어로 파이프할 때는 페이저가 오히려 불편할 수 있습니다.
특정 명령어의 페이저만 끄고 싶다면 pager.<명령어> 설정을 false로 지정하면 됩니다.
$ git config --global pager.log false
이렇게 하면 git log를 실행할 때 항상 페이저 없이 터미널에 바로 출력됩니다.
git diff나 git branch 같은 다른 명령어에도 같은 방식으로 적용할 수 있어요.
단축 명령어 설정
주변에서 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 log --oneline --graph --all은 브랜치 히스토리를 한눈에 볼 때 자주 쓰이는 조합인데, 매번 치기엔 좀 길죠?
$ git config --global alias.lg "log --oneline --graph --all"
$ git lg
이렇게 등록해두면 git lg만으로 전체 브랜치의 커밋 그래프를 간결하게 볼 수 있습니다.
git log명령어에 대해서는 git log 사용법에서 자세히 다루고 있으니 참고 바랍니다.
별칭 앞에 !를 붙이면 Git 하위 명령어가 아니라 셸 명령어를 실행할 수도 있는데요.
예를 들어 .gitignore 파일을 자동 생성하는 별칭을 등록해볼게요.
$ git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'
$ git ignore java
이렇게 해두면 git ignore java만 치면 Java 프로젝트용 .gitignore 내용이 터미널에 출력됩니다.
!를 활용하면 curl, grep, xargs 같은 도구와 Git을 자유롭게 조합할 수 있어서 자동화에 유용합니다.
설정 파일 직접 편집하기
지금까지 명령어를 통해 설정하는 방법을 알아보았는데요, 사실 설정이 여러 개라면 하나씩 명령어를 치는 것보다 설정 파일을 직접 열어서 편집하는 것이 더 빠를 때가 있습니다.
--edit 옵션을 사용하면 설정 파일이 에디터에서 바로 열립니다.
$ git config --global --edit
이렇게 하면 ~/.gitconfig 파일이 열리는데요, INI 형식으로 되어 있어서 직관적으로 읽고 편집할 수 있습니다.
[user]
name = John Doh
email = john@personal.com
[push]
default = current
[init]
defaultBranch = main
[alias]
st = status
ci = commit
co = checkout
br = branch
lg = log --oneline --graph --all
[pager]
log = false
새 컴퓨터를 세팅하거나 동료에게 설정을 공유할 때 이 파일만 복사하면 한 방에 모든 설정을 옮길 수 있어서 편리합니다.
외부 diff 도구 연동
터미널에서 diff를 읽기 부담스러우면 VS Code 같은 GUI diff 도구를 연동할 수 있어요.
$ git config --global diff.tool vscode
$ git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
설정 후 git difftool 명령어를 쓰면 GUI 도구에서 diff를 볼 수 있습니다.
$ git difftool
$ git difftool --staged
$ git difftool main feature
git diff와 같은 인자를 받으니 사용법은 동일해요.
VS Code 외에도 IntelliJ나 Beyond Compare, Meld 같은 도구도 연동할 수 있습니다.
git diff명령어에 대해서는 git diff 사용법에서 자세히 다루고 있습니다.
마치며
예전에는 git config 명령어를 쓸 일이 그리 많지는 않았습니다.
기껏해야 컴퓨터를 새로 샀거나 포맷할 경우 정도였지요.
하지만 요즘에는 클라우드 환경에서 매번 새로운 가상 서버를 사용하는 것이 보편화되면서 Git을 처음부터 셋업해야하는 경우가 좀 더 빈번해지는 것처럼 느껴집니다. 이 글에서 다룬 주요 명령어를 정리하면 다음과 같아요.
git config <이름> <값>— 지역 범위에서 설정 쓰기git config --global <이름> <값>— 전역 범위에서 설정 쓰기git config <이름>— 현재 설정값 읽기git config --list— 모든 설정 한꺼번에 보기git config --show-scope <이름>— 설정이 어느 범위에서 왔는지 확인git config --show-origin <이름>— 설정이 어느 파일에서 왔는지 확인git config --unset <이름>— 설정 지우기git config --global --edit— 전역 설정 파일을 에디터로 열기
도움이 되었으면 좋겠습니다 😄
Git 설정과 함께 자주 필요한 다른 명령어들도 블로그에서 다루고 있으니 참고해보세요. git init으로 저장소 생성하기, git add로 파일 추가하기, git push로 원격 저장소에 올리기, 그리고 .gitignore로 파일 제외하기까지 함께 읽어보시면 Git 기초를 탄탄하게 다질 수 있을 거예요.
더 자세한 내용은 Git 공식 문서를 참고하세요.
This work is licensed under
CC BY 4.0