프로그래밍/기타(툴)
Git 개발자가 Git을 구성하는 방법
재우니
2025. 2. 28. 11:19
How Core Git Developers Configure Git
What `git config` settings should be defaults by now? Here are some settings that even the core developers change.
blog.gitbutler.com
1. Git을 확실히 더 좋게 만드는 설정
(1) 브랜치(Branch)와 태그(Tag) 나열 개선
- 브랜치 나열 개선
기본적으로 Git은 브랜치를 알파벳 순서로 보여줍니다. 그러나 요즘은 최근에 작업한(커밋한) 순서대로 보여주면 더 편리합니다.- git config --global column.ui auto
→ 브랜치나 파일 목록을 화면에 보기 좋게 여러 열(column)로 나눠서 보여줍니다. - git config --global branch.sort -committerdate
→ 브랜치 목록을 마지막으로 커밋한 날짜 순서로 정렬합니다.
(즉, 최근에 작업한 브랜치가 위쪽에 나오게 됩니다.)
- git config --global column.ui auto
- 태그 나열 개선
Git 태그는 보통 소프트웨어의 버전을 표시하는데, 숫자로 된 버전 번호는 알파벳 순서로 정렬하면 이상하게 나올 수 있습니다.- git config --global tag.sort version:refname
→ 태그들을 버전 번호 순서(예: 0.5.100, 0.5.101 등)로 올바르게 정렬해 줍니다.
- git config --global tag.sort version:refname
(2) 기본 브랜치 이름 설정
- 새로운 저장소를 만들 때마다 기본 브랜치 이름을 지정할 수 있습니다.
- git config --global init.defaultBranch main
→ 기본 브랜치 이름을 "main"으로 설정합니다.
(예전에는 "master"가 기본이었지만, 최근에는 "main"을 사용하는 추세입니다.)
- git config --global init.defaultBranch main
(3) 더 나은 파일 변경(diff) 비교 방법
- Git은 파일이 어떻게 바뀌었는지를 보여줄 때 "diff"라는 기능을 사용합니다.
- 기본 알고리즘은 오래된 "myers" 방식을 사용하는데, 이는 1986년에 만들어진 방법입니다.
- 추천하는 방법: "histogram" 알고리즘을 사용하면 더 똑똑하게 변경 내용을 비교할 수 있습니다.
- 설정:
- git config --global diff.algorithm histogram
→ diff 비교 시 histogram 알고리즘을 사용합니다. - 추가 옵션들:
- git config --global diff.colorMoved plain
→ 코드의 이동된 부분을 다른 색으로 표시해서 쉽게 구분할 수 있게 해줍니다. - git config --global diff.mnemonicPrefix true
→ diff 출력에서 “a/”, “b/” 대신에 더 의미있는 접두어(i/, w/, c/ 등)를 사용합니다. - git config --global diff.renames true
→ 파일 이름이 변경된 경우도 자동으로 감지하여 보여줍니다.
- git config --global diff.colorMoved plain
- git config --global diff.algorithm histogram
(4) 더 편리한 원격 저장소에 변경사항 보내기 (Push)
- Git을 사용할 때, 작업한 내용을 원격 저장소(예: GitHub)로 보내는(push) 과정이 있습니다. 이 과정을 쉽게 만드는 설정은 다음과 같습니다.
- git config --global push.default simple
→ 현재 작업 중인 브랜치를 원격 저장소의 같은 이름 브랜치로 보내도록 합니다.
(Git 2.0 이후 기본값입니다.) - git config --global push.autoSetupRemote true
→ 원격 브랜치가 없으면 자동으로 설정해 줍니다.
(즉, "upstream" 브랜치를 따로 지정할 필요가 없습니다.) - git config --global push.followTags true
→ 로컬에서 만든 태그도 함께 원격 저장소에 보냅니다.
- git config --global push.default simple
(5) 원격 저장소에서 정보 가져오기 (Fetch) 개선
- 원격 저장소와 로컬 저장소가 최대한 동일하게 유지되도록 도와줍니다.
- git config --global fetch.prune true
→ 원격 저장소에서 삭제된 브랜치는 로컬에서도 삭제합니다. - git config --global fetch.pruneTags true
→ 원격 저장소에서 삭제된 태그도 로컬에서 삭제합니다. - git config --global fetch.all true
→ 모든 원격 저장소에서 정보를 가져옵니다.
- git config --global fetch.prune true
2. “왜 안 해?”라고 할 수 있는 설정 (괜찮으니 추가해도 좋은 설정)
(1) 명령어 오타 자동 수정
- Git 명령어를 입력할 때 오타가 발생하면, Git이 사용자가 의도한 명령어를 추측하여 실행할 수 있도록 합니다.
- git config --global help.autocorrect prompt
→ 오타가 있을 때 바로 실행하기 전에 사용자에게 물어봅니다.
- git config --global help.autocorrect prompt
(2) 커밋(commit) 시 변경 내용(diff) 함께 보기
- 커밋 메시지를 작성할 때, 어떤 파일이 어떻게 바뀌었는지(diff)를 함께 보여줌으로써 작성에 도움을 줍니다.
- git config --global commit.verbose true
(3) 충돌 해결 기록 재사용
- 여러 번의 rebase(커밋 정리) 작업 중 충돌(conflict)이 발생하면, 한 번 해결한 충돌 정보를 기록해 두고 동일한 충돌이 다시 발생하면 자동으로 해결해 줍니다.
- git config --global rerere.enabled true
- git config --global rerere.autoupdate true
(4) 전역(Global) 무시 파일 설정
- 여러 프로젝트에서 공통적으로 무시할 파일(예: 임시 파일, 로그 파일 등)을 한 곳에 지정할 수 있습니다.
- git config --global core.excludesfile ~/.gitignore
→ 사용자 홈 디렉토리의 .gitignore 파일을 전역 설정으로 사용합니다.
- git config --global core.excludesfile ~/.gitignore
(5) 리베이스(rebase) 작업을 더 편리하게
- 여러 커밋을 하나로 합치거나 정리할 때(rebase), 더 쉽게 작업할 수 있도록 도와주는 설정입니다.
- git config --global rebase.autoSquash true
→ fixup이나 squash 커밋을 자동으로 합칩니다. - git config --global rebase.autoStash true
→ 리베이스 전에 변경사항을 임시로 저장(stash)한 후, 리베이스가 끝나면 다시 적용합니다. - git config --global rebase.updateRefs true
→ 리베이스 후에 관련 브랜치의 참조(refs)를 자동으로 업데이트해 줍니다.
- git config --global rebase.autoSquash true
3. 개인 취향에 따른 선택적 설정
이 설정들은 사용자의 취향에 따라 적용할 수 있습니다.
(1) 병합 충돌 시 더 나은 표시
- 두 사람이 같은 파일을 수정하여 충돌이 생길 때, 기본 표시 방식보다 더 자세하게 충돌 상황을 보여줍니다.
- git config --global merge.conflictstyle zdiff3
→ 충돌이 발생한 경우, 좌우 변경 내용뿐만 아니라 변경 전의 기본 상태도 함께 보여줍니다.
단, 이 옵션은 Git 2.35 이상에서 사용 가능합니다. 구버전의 경우 diff3를 사용할 수 있습니다.
- git config --global merge.conflictstyle zdiff3
(2) 기본 pull 동작 변경
- Git pull 명령어는 원격 저장소의 변경 사항을 가져올 때 기본적으로 merge(병합)를 수행합니다. 이를 rebase 방식으로 바꾸면 기록이 깔끔해질 수 있습니다.
- git config --global pull.rebase true
(3) 파일 시스템 모니터링 기능 사용
- 큰 프로젝트에서는 git status 같은 명령어가 느릴 수 있는데, 이를 빠르게 하기 위해 파일 시스템의 변화를 감시하는 기능을 사용할 수 있습니다.
- git config --global core.fsmonitor true
→ 저장소 내 파일 변경 사항을 모니터링하여 빠르게 반영합니다. - git config --global core.untrackedCache true
→ 변경되지 않은 파일들의 목록을 캐시해 두어 성능을 높입니다.
단, 이 기능은 각 저장소마다 하나씩 프로세스를 실행하기 때문에 저장소가 너무 많으면 시스템에 부담이 될 수 있습니다.
- git config --global core.fsmonitor true
최종 정리
위의 설정들은 Git 코어 개발자들이 실제로 사용하며 Git을 더 편리하게 만들기 위해 추천하는 옵션들입니다.
- Git을 더 좋게 만드는 설정은 브랜치, 태그, 기본 브랜치, diff 비교, push, fetch 등 Git의 기본 동작을 개선합니다.
- 추가로 해도 무방한 설정들은 오타 수정, 커밋 시 diff 표시, 충돌 해결 기록 재사용, 전역 무시 파일 지정, 그리고 리베이스 작업을 더 편리하게 합니다.
- 개인 취향에 따른 설정은 병합 충돌 표시 방법, 기본 pull 동작 변경, 파일 시스템 모니터링 기능 등을 포함합니다.
이 모든 설정들을 한 번에 자신의 ~/.gitconfig 파일에 추가하면, 앞으로 Git을 사용할 때 더욱 편리하고 효율적인 작업 환경을 만들 수 있습니다. 각 설정이 어떤 역할을 하는지 이해하면서 사용해 보세요. Git을 사용하는 동안 문제가 생기거나 어려운 점이 있다면, 이 설정들이 왜 필요한지 다시 한 번 생각해 보는 것도 큰 도움이 될 것입니다.
이상으로 Git 코어 개발자들이 사용하는 다양한 설정에 대해 쉽고 자세하게 설명해 보았습니다.