.gitconfig 하나로 생산성 2배
Git 코어 개발자들이 만장일치로 추천하는 설정, 터미널을 바꾸는 도구, 그리고 Git 2.49에 Rust가 들어온 이유.
Git 코어 개발자들의 .gitconfig — 3단계 추천
2024년 GitButler 블로그가 Git 코어 개발자들을 대상으로 "Spring Cleaning" 설문을 진행했다. "당신의 .gitconfig에서 반드시 켜야 할 설정은?"이라는 질문에 대한 답변을 집계한 결과, 설정들이 세 단계로 나뉘었다. 만장일치(Tier 1), 반대 의견 없음(Tier 2), 취향 차이(Tier 3).
확실히 Git을 개선
push.autoSetupRemote — 처음 push할 때 --set-upstream 자동 설정. 매번 입력하던 그 명령이 사라진다.
fetch.prune — fetch할 때 삭제된 원격 브랜치 자동 정리. stale 브랜치가 쌓이지 않는다.
diff.algorithm=histogram — 기본 myers보다 정확한 diff. 함수 이동을 더 잘 감지한다.
branch.sort=-committerdate — 최근 커밋 순으로 브랜치 정렬. 가장 활발한 브랜치가 맨 위.
column.ui=auto — branch, tag 목록을 컬럼 레이아웃으로 출력. 터미널 공간 활용.
안 할 이유가 없는 것
rerere.enabled — 충돌 해결을 기억하고 같은 충돌에 자동 적용. rebase 반복 작업이 극적으로 줄어든다.
commit.verbose — 커밋 메시지 편집기에 diff를 함께 표시. 변경 내용을 보면서 메시지를 작성할 수 있다.
rebase.autoSquash — fixup!/squash! 접두사 커밋을 자동 재배치. interactive rebase가 깔끔해진다.
help.autocorrect=prompt — 오타 명령을 감지하고 "Did you mean...?" 확인. 실수가 사고로 이어지지 않는다.
취향의 영역
merge.conflictstyle=zdiff3 — 충돌 마커에 "원본 코드"를 함께 표시. 3-way merge의 컨텍스트가 보인다. 일부 개발자는 복잡하다고 느낀다.
pull.rebase — pull할 때 merge 대신 rebase. 히스토리가 깔끔하지만, 초보자에게는 위험할 수 있다.
core.fsmonitor — 파일 시스템 변경 감지 데몬. 대규모 레포에서 status/add 속도 향상. 작은 레포에서는 체감 차이 없음.
주목할 점은 Tier 1의 push.autoSetupRemote이다. 2022년에 추가된 비교적 최근 설정인데, 코어 개발자 전원이 추천했다. 새 브랜치를 만들고 처음 push할 때마다 git push --set-upstream origin feature/xxx를 입력하던 시대가 끝났다.
복붙하면 끝나는 .gitconfig 완성본
아래는 Tier 1 + Tier 2 설정을 모두 포함하고, 실전에서 바로 쓸 수 있는 alias를 추가한 완성본이다. 파일 위치는 ~/.gitconfig이다. 각 설정에 한글 주석을 달았다.
Mathias Bynens의 dotfiles 저장소는 GitHub에서 30,000개 이상의 스타를 받았다. 그의 .gitconfig는 위 설정의 대부분을 포함하고 있다. Scott Chacon(GitHub 공동 창업자)의 dotfiles 역시 비슷한 패턴을 따른다. "좋은 .gitconfig"에 대한 개발 커뮤니티의 합의가 이미 존재한다는 뜻이다.
- git s status -s — 변경 파일 목록만 한 줄씩 출력. 기본 status의 장황한 설명 대신 M/A/D 플래그로 즉시 파악.
- git lg log --oneline --graph --all --decorate — 전체 브랜치의 커밋 히스토리를 ASCII 그래프로 시각화. GUI 없이도 브랜치 흐름이 보인다.
- git undo reset --soft HEAD~1 — 마지막 커밋만 취소하고 변경 사항은 스테이징 영역에 유지. "커밋을 잘못 했을 때" 첫 번째 선택지.
- git fpush push --force-with-lease — force push하되, 원격에 다른 사람의 커밋이 있으면 거부. --force보다 안전한 대안.
.gitconfig를 한 번도 수정하지 않았다면,
Git의 절반만 쓰고 있는 것이다.
터미널을 바꿔라 — delta, lazygit, gh
.gitconfig를 최적화했다면, 다음은 도구다. Git의 기본 출력은 1990년대의 유산이다. diff는 읽기 어렵고, log는 단색이며, 스테이징은 파일 경로를 일일이 타이핑해야 한다. 하지만 2026년의 터미널 도구들은 이 모든 것을 바꿔놓았다.
Syntax-Highlighted Diff
구문 강조, 단어 단위 변경 감지, side-by-side 출력을 지원하는 diff 뷰어. git diff, git log, git show의 출력을 자동으로 파이프해서 가독성을 극대화한다.
Go TUI
하나의 화면에 status, log, diff, staging을 모두 표시하는 터미널 UI. 키보드만으로 스테이징, 커밋, rebase, cherry-pick, stash를 처리한다. Git 명령어를 몰라도 된다.
Rust TUI
lazygit의 Rust 대안. 대규모 레포에서 가장 빠르다. 100만 커밋 레포에서도 즉각 반응한다. UI는 lazygit보다 단순하지만, 핵심 기능은 모두 있다.
터미널에서 GitHub
gh pr create로 브라우저 없이 PR을 만든다. gh pr checkout으로 리뷰할 PR을 로컬에 즉시 체크아웃한다. gh copilot suggest로 자연어를 Git 명령으로 변환한다.
gh run list, gh issue create, gh release create까지 — GitHub 워크플로우의 90%를 터미널에서 처리할 수 있다.
자연어 → 명령
"지난주에 main에 머지된 PR 목록을 보여줘"라고 치면, gh copilot suggest가 정확한 gh/git 명령을 생성한다. 명령어를 외울 필요가 없다.
gh copilot explain — 복잡한 명령의 의미를 자연어로 해석해준다.
GitLens + Git Graph
GitLens(40M+ 설치)는 인라인 blame, 파일 히스토리, 커밋 비교를 에디터 안에서 제공한다. Git Graph는 브랜치 시각화를 GUI 수준으로 끌어올린다.
$49.99 — 빠른 GUI
macOS + Windows. 가장 빠른 데스크톱 Git 클라이언트로 평가받는다. interactive rebase가 드래그 앤 드롭. 대규모 레포에서도 버벅이지 않는다.
무료 — Atlassian
무료 데스크톱 클라이언트. Bitbucket/GitHub/GitLab 모두 지원. UI가 다소 복잡하지만 기능은 충분하다. GitKraken(유료)은 더 세련된 UI를 원할 때 대안.
Git 2025–2026, 무엇이 바뀌었나
Git은 매 분기 새 버전을 릴리스한다. 2025년에는 역사적인 변화가 있었다. Rust 코드가 처음 들어왔고, 30년 된 zlib이 교체되었으며, 머지 전략이 전면 교체되었다. "느리고 안정적인" Git의 이미지가 바뀌고 있다.
-
v2.49
Rust 코드 최초 도입. libgit2 의존성의 일부를 Rust로 교체하기 시작. Git의 미래 방향을 선언한 역사적 릴리스. "C만으로는 더 이상 안전하지 않다"는 코어 팀의 합의.
-
v2.49
zlib-ng 전환. 30년 된 zlib을 zlib-ng로 교체. 압축/해제 속도 약 25% 향상. clone, push, gc 모든 작업에서 체감된다.
-
v2.49
Name-Hash v2. repack 알고리즘의 파일 매칭 로직 개선. Chromium 레포 기준 repack 시간 96초 → 34초. 대규모 모노레포에서 극적인 효과.
-
v2.50
ORT가 recursive를 대체. 기본 머지 전략이 recursive에서 ORT(Ostensibly Recursive's Twin)로 변경. "삭제된 코드가 디버깅된 코드다(deleted code is debugged code!)" — 코어 팀의 선언.
Sparse Checkout + Partial Clone
Sparse Checkout은 레포의 일부 디렉토리만 체크아웃한다. Partial Clone은 blob을 필요할 때만 다운로드한다. 두 기능을 합치면 수십 GB 모노레포를 로컬에서 수 MB로 다룰 수 있다.
SHA-256 전환
SHA-1의 보안 한계로 SHA-256 전환이 진행 중이다. 아직 실험 단계(experimental)이지만, 새 레포를 SHA-256으로 생성하는 것이 가능하다. SHA-1과의 호환성 문제가 최대 과제.
Jujutsu (jj)
Google 엔지니어가 만든 차세대 버전 관리 시스템. Git과 호환되면서 근본적으로 다른 모델을 제시한다. 워킹 카피가 자동 커밋되고, 브랜치 없이 작업하며, undo가 모든 곳에서 동작한다.
Git은 변하지 않는 도구가 아니다.
매 분기, 조용히 진화하고 있다.
시크릿 스캐너, AI 커밋, 그리고 미래
.gitconfig와 도구를 넘어서, Git 워크플로우의 외곽에는 보안, AI 자동화, 대규모 레포 관리라는 세 가지 전선이 있다. 이 영역들은 아직 "기본 설정"에 포함되지 않지만, 프로덕션 환경에서는 이미 필수가 되었다.
이상적인 구성은 이중 방어다. 로컬에서 Gitleaks(pre-commit hook)로 1차 차단하고, 서버에서 GitHub Push Protection으로 2차 차단한다. "실수로 push해도 막힌다"는 안전망이 핵심이다.
커밋 메시지 자동 생성
GitHub Copilot은 VS Code에서 커밋 메시지를 자동 제안한다. aicommits는 터미널에서 diff를 분석해 Conventional Commits 형식의 메시지를 생성한다.
완벽하지 않다. 생성된 메시지를 반드시 검토하고 수정해야 한다. "AI가 쓴 커밋 메시지"가 레포를 오염시키는 것은 새로운 종류의 기술 부채다.
gh copilot suggest
"3일 이내에 변경된 파일 목록을 보여줘"라고 입력하면 git log --since='3 days ago' --name-only를 제안한다. Git의 수백 개 옵션을 외울 필요가 없다.
gh copilot explain으로 팀원이 작성한 복잡한 명령의 의미를 즉시 파악할 수 있다.
Turborepo + Nx
Turborepo는 태스크 캐싱과 병렬 실행으로 모노레포 빌드를 최적화한다. Nx는 의존성 그래프 기반으로 영향받는 프로젝트만 테스트한다. 둘 다 sparse-checkout과 결합하면 CI 시간이 극적으로 단축된다.
SSH 커밋 서명
Git 2.34부터 SSH 키로 커밋에 서명할 수 있다. GPG보다 설정이 간단하다. 이미 GitHub에 등록된 SSH 키를 그대로 사용하면 된다. gpg.format = ssh 한 줄이면 끝.
git maintenance start
백그라운드 최적화 명령. commit-graph, prefetch, gc, pack-refs를 스케줄링하여 자동 실행한다. 대규모 레포에서 status, log, fetch 속도가 점진적으로 개선된다.
- Pro Git 한국어판(무료) — git-scm.com/book/ko/v2. Git의 내부 구조까지 다루는 공식 교과서. 전문 무료.
- GitButler Blog — Git 코어 개발자 인터뷰, 신규 기능 해설, 설정 추천의 원천 소스.
- Mathias Bynens dotfiles — github.com/mathiasbynens/dotfiles. 30k+ 스타. .gitconfig뿐 아니라 전체 개발 환경 참고용.
- Git Release Notes — github.com/git/git/tree/master/Documentation/RelNotes. 모든 버전의 변경 내역 원문.
- Jujutsu (jj) — github.com/jj-vcs/jj. Git-compatible next-gen VCS. Google 내부에서 실사용 중.
- delta — github.com/dandavison/delta. diff 뷰어. 설치 후 5분 안에 효과를 체감한다.
좋은 도구는 실력의 일부다
설정 한 줄이 하루를 바꾼다
도구에 투자한 시간은 이자가 붙는다. .gitconfig 한 줄, alias 하나, delta 설치 하나. 작은 최적화가 매일 반복되면 연간 수백 시간이 된다.