- "Pro Git" 저자인 Scott Chacon이 글로벌로 활성화한 몇 가지 Git 설정과 그 이유를 설명
- 설정 중 다수는 실제로 Git 코어 코드베이스를 작업하는 개발자들로부터 배운 것임
- 아래는 Git을 더 좋게 만드는 ~/.gitconfig 설정
[column]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[init]
defaultBranch = main
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[push]
default = simple
autoSetupRemote = true
followTags = true
[fetch]
prune = true
pruneTags = true
all = true
# 쓰지 않을 이유가?
[help]
autocorrect = prompt
[commit]
verbose = true
[rerere]
enabled = true
autoupdate = true
[core]
excludesfile = ~/.gitignore
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
# 개인 취향에 따른 설정 (필요 시 주석 해제하고 사용)
[core]
# fsmonitor = true
# untrackedCache = true
[merge]
# (Git 버전이 2.3 미만인 경우 ‘diff3’ 사용)
# conflictstyle = zdiff3
[pull]
# rebase = true
Git 코어 개발자들은 Git을 어떻게 설정할까?
- Git 메일링 리스트에서 Felipe Contreras가 코어 팀에게 모든 설정과 별칭을 제거하고 기본 Git을 사용해보라고 제안한 적이 있음
- 이 실험의 결과로 9개의 설정과 3개의 별칭이 새로운 기본값으로 제안되었음
merge.conflictstyle = zdiff3
rebase.autosquash = true
rebase.autostash = true
commit.verbose = true
diff.colorMoved = true
diff.algorithm = histogram
grep.patternType = perl
feature.experimental = true
branch.sort = committerdate
- 이러한 설정은 아직 기본값으로 채택되지 않았음
- 하지만, 많은 Git 개발자들이 이 중 몇가지를 켜지 않고서는 Git을 사용하는데 어려움을 겪고 있다는게 흥미로움
- 더욱 흥미로운 것은 여러분 중 대부분이 이게 뭘 의미하는지 전혀 모른다는 것임
- 세가지 카테고리로 나누어 설명하겠음
- Git을 확실히 더 좋게 만드는 것(Clearly Makes Git Better)
- 안 쓸 이유가?(Why the Hell Not?)
- 취향의 문제(A Matter of Taste)
# Git을 확실히 더 좋게 만드는 것
브랜치 목록 정렬
- 기본적으로 Git은 브랜치를 알파벳 순으로 정렬하지만, 최근 커밋 날짜 순으로 정렬하는 것이 더 유용할 수 있음
- 다음 설정을 통해 브랜치를 최근 커밋 순으로 정렬하고, 열 형식으로 표시할 수 있음
git config –global column.ui auto
git config –global branch.sort -committerdate
태그 목록 정렬
- 태그를 알파벳 순이 아닌 버전 순으로 정렬하려면 다음 설정을 사용
git config –global tag.sort version:refname
기본 브랜치 이름 설정
- 새로운 저장소를 초기화할 때 기본 브랜치 이름을 설정하려면 다음과 같이 설정
git config –global init.defaultBranch main
향상된 diff 설정
- 기본 diff 알고리즘을 'histogram'으로 변경하여 더 정확한 비교를 수행
- 코드 이동을 감지하고 색상으로 표시하려면 다음 설정을 추가
git config –global diff.algorithm histogram
git config –global diff.colorMoved plain
git config –global diff.mnemonicPrefix true
git config –global diff.renames true
향상된 push 설정
- 다음 설정을 통해 push 동작을 개선할 수 있음
git config –global push.default simple
git config –global push.autoSetupRemote true
git config –global push.followTags true
향상된 fetch 설정
- fetch 시 불필요한 브랜치와 태그를 자동으로 제거하려면 다음 설정을 사용
git config –global fetch.prune true
git config –global fetch.pruneTags true
git config –global fetch.all true
# 안 쓸 이유가?
자동 수정 프롬프트
- 명령어 입력 시 오타를 감지하고 제안하도록 설정하려면 다음을 사용
git config –global help.autocorrect prompt
커밋 할 때 diff
- 커밋 메시지 작성 시 변경된 내용을 함께 표시하려면 다음 설정을 추가
git config –global commit.verbose true
충돌 해결 재사용
- 이전의 충돌 해결을 자동으로 재사용하려면 다음 설정을 사용
git config –global rerere.enabled true
git config –global rerere.autoupdate true
전역 .gitignore 파일 설정
- 전역적으로 무시할 파일을 지정하려면 다음과 같이 설정
git config –global core.excludesfile ~/.gitignore
리베이스 설정 개선
- 리베이스 시 자동으로 스쿼시 및 스태시를 수행하려면 다음 설정을 사용
git config –global rebase.autoSquash true
git config –global rebase.autoStash true
git config –global rebase.updateRefs true
# 취향의 문제
향상된 머지 충돌 표시
- 병합 충돌 시 기본 버전도 함께 표시하려면 다음 설정을 고려
git config –global merge.conflictstyle zdiff3
pull 시 리베이스 사용
-
git pull 시 자동으로 리베이스를 수행하려면 다음과 같이 설정
git config –global pull.rebase true
파일 변경 감지 속도 향상
-
git status 등의 성능을 향상시키려면 다음 설정을 사용할 수 있음
git config –global core.fsmonitor true
git config –global core.untrackedCache true
# 마무리
- 이 설정들을 통해 Git을 보다 편리하게 사용할 수 있으며, 일부는 코어 개발자들도 적극적으로 사용하는 설정임
- Git 설정을 최적화함으로써 작업 흐름을 개선하고 보다 효율적으로 사용할 수 있음