재우니의 블로그

 

https://blog.gitbutler.com/how-git-core-devs-configure-git/?utm_source=Nomad+Academy&utm_campaign=826f488517-EMAIL_CAMPAIGN_2025_02_28&utm_medium=email&utm_term=0_4313d957c9-7ac123137e-45655449

 

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 태그는 보통 소프트웨어의 버전을 표시하는데, 숫자로 된 버전 번호는 알파벳 순서로 정렬하면 이상하게 나올 수 있습니다.
    • git config --global tag.sort version:refname
      → 태그들을 버전 번호 순서(예: 0.5.100, 0.5.101 등)로 올바르게 정렬해 줍니다.

(2) 기본 브랜치 이름 설정

  • 새로운 저장소를 만들 때마다 기본 브랜치 이름을 지정할 수 있습니다.
    • git config --global init.defaultBranch main
      → 기본 브랜치 이름을 "main"으로 설정합니다.
      (예전에는 "master"가 기본이었지만, 최근에는 "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
          → 파일 이름이 변경된 경우도 자동으로 감지하여 보여줍니다.

(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
      → 로컬에서 만든 태그도 함께 원격 저장소에 보냅니다.

(5) 원격 저장소에서 정보 가져오기 (Fetch) 개선

  • 원격 저장소와 로컬 저장소가 최대한 동일하게 유지되도록 도와줍니다.
    • git config --global fetch.prune true
      → 원격 저장소에서 삭제된 브랜치는 로컬에서도 삭제합니다.
    • git config --global fetch.pruneTags true
      → 원격 저장소에서 삭제된 태그도 로컬에서 삭제합니다.
    • git config --global fetch.all true
      → 모든 원격 저장소에서 정보를 가져옵니다.

2. “왜 안 해?”라고 할 수 있는 설정 (괜찮으니 추가해도 좋은 설정)

(1) 명령어 오타 자동 수정

  • Git 명령어를 입력할 때 오타가 발생하면, Git이 사용자가 의도한 명령어를 추측하여 실행할 수 있도록 합니다.
    • 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 파일을 전역 설정으로 사용합니다.

(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)를 자동으로 업데이트해 줍니다.

3. 개인 취향에 따른 선택적 설정

이 설정들은 사용자의 취향에 따라 적용할 수 있습니다.

(1) 병합 충돌 시 더 나은 표시

  • 두 사람이 같은 파일을 수정하여 충돌이 생길 때, 기본 표시 방식보다 더 자세하게 충돌 상황을 보여줍니다.
    • git config --global merge.conflictstyle zdiff3
      → 충돌이 발생한 경우, 좌우 변경 내용뿐만 아니라 변경 전의 기본 상태도 함께 보여줍니다.
      단, 이 옵션은 Git 2.35 이상에서 사용 가능합니다. 구버전의 경우 diff3를 사용할 수 있습니다.

(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 코어 개발자들이 실제로 사용하며 Git을 더 편리하게 만들기 위해 추천하는 옵션들입니다.

 

  • Git을 더 좋게 만드는 설정은 브랜치, 태그, 기본 브랜치, diff 비교, push, fetch 등 Git의 기본 동작을 개선합니다.
  • 추가로 해도 무방한 설정들은 오타 수정, 커밋 시 diff 표시, 충돌 해결 기록 재사용, 전역 무시 파일 지정, 그리고 리베이스 작업을 더 편리하게 합니다.
  • 개인 취향에 따른 설정은 병합 충돌 표시 방법, 기본 pull 동작 변경, 파일 시스템 모니터링 기능 등을 포함합니다.

 

이 모든 설정들을 한 번에 자신의 ~/.gitconfig 파일에 추가하면, 앞으로 Git을 사용할 때 더욱 편리하고 효율적인 작업 환경을 만들 수 있습니다. 각 설정이 어떤 역할을 하는지 이해하면서 사용해 보세요. Git을 사용하는 동안 문제가 생기거나 어려운 점이 있다면, 이 설정들이 왜 필요한지 다시 한 번 생각해 보는 것도 큰 도움이 될 것입니다.

 

이상으로 Git 코어 개발자들이 사용하는 다양한 설정에 대해 쉽고 자세하게 설명해 보았습니다.