gitlab

Git 2.55.0의 새로운 기능은 무엇인가? (새 탭에서 열림)

Git 2.55.0은 커밋 수정, 대규모 저장소 성능, 여러 원격 저장소 관리, 로그 가독성을 개선한 릴리스입니다. 특히 git history fixup, Linux용 내장 fsmonitor, 원격 그룹 대상 git push, git log --graph의 레인 폭 제한이 눈에 띕니다. 또한 Git 코드베이스의 Rust 도입과 부분 클론에서의 git grep, git cherry 성능 개선도 주요 변경 사항으로 소개됩니다.

git history fixup으로 기존 커밋 수정

  • 기존 방식은 다음 두 단계가 필요했습니다.
    git commit --fixup=<commit-id>
    git rebase -i --autosquash <commit-id>^
    
  • Git 2.55에서는 스테이징된 변경 사항을 지정한 커밋에 바로 반영할 수 있습니다.
    git history fixup <commit-id>
    
  • 대화형 리베이스 없이 커밋을 수정할 수 있어 절차가 간단해집니다.
  • 수정된 커밋을 포함하는 다른 로컬 브랜치도 함께 갱신됩니다.
  • 따라서 스택형 브랜치에서 중간 커밋을 수정하면 관련 브랜치가 자동으로 재배치됩니다.

Linux용 내장 fsmonitor 데몬

  • 대규모 모노레포에서는 git status가 전체 작업 트리를 탐색해야 하므로 느려질 수 있습니다.
  • core.fsmonitor를 활성화하면 파일 시스템 변경을 백그라운드에서 감시하고, Git이 변경 가능성이 있는 파일만 확인할 수 있습니다.
  • 기존 내장 fsmonitor는 Windows와 macOS만 지원했지만 Git 2.55부터 GNU/Linux도 지원합니다.
  • Linux에서는 권한 상승이 필요한 fanotify 대신 inotify를 사용합니다.
  • 저장소의 모든 디렉터리에 감시자를 등록하므로, 큰 저장소에서는 감시자 수 제한을 초과할 수 있습니다.
  • 필요하면 다음 커널 설정을 늘려야 합니다.
    fs.inotify.max_user_watches
    

원격 그룹으로 한 번에 push

  • 기존에는 원격 그룹을 git fetch에서만 사용할 수 있었습니다.
  • 다음과 같이 원격 그룹을 설정합니다.
    git config set remotes.forks "origin upstream"
    
  • Git 2.55부터 그룹 전체에 브랜치를 push할 수 있습니다.
    git push forks main
    
  • 지정한 브랜치가 그룹에 포함된 각 원격 저장소로 독립적으로 전송됩니다.
  • 각 원격 저장소의 remote.<name>.push 매핑과 mirror 설정도 개별적으로 적용됩니다.

git log --graph의 레인 폭 제한

  • git log --graph는 브랜치와 병합 관계를 ASCII 그래프로 표시합니다.
  • 기여자가 많거나 병렬 브랜치가 많은 저장소에서는 그래프가 지나치게 넓어져 가독성이 떨어질 수 있습니다.
  • Git 2.55는 그래프의 레인 폭을 제한하는 기능을 제공해 복잡한 커밋 이력을 보다 compact하게 표시할 수 있도록 합니다.

Rust 도입과 부분 클론 성능 개선

  • Git 2.55 릴리스의 추가 주제로 Git 코드베이스 내 Rust 사용 확대가 소개됩니다.
  • 부분 클론 환경에서 git grepgit cherry가 더 빠르게 동작하도록 성능 개선이 이루어졌습니다.
  • 제공된 글 내용에는 Rust 도입 방식이나 각 명령의 구체적인 개선 수치는 자세히 설명되지 않습니다.

대규모 저장소를 사용한다면 Linux에서 core.fsmonitor=true를 활성화하고, inotify 감시자 제한을 점검하는 것이 좋습니다. 여러 미러나 포크에 동시에 배포하는 팀은 원격 그룹 push를 활용하면 반복 작업을 줄일 수 있습니다.