Git 2.54의 주요 개선 사항
Git 2.54에 실험용 `git history`, config 기반 hooks, HTTP 429 재시도가 추가됐다.
Git 프로젝트가 Git 2.54를 공개했다. 이번 릴리스에는 137명 이상의 기여자가 참여했고, 그중 66명은 신규 기여자였다. GitHub는 지난번에 다룬 2.52 이후, 이번 글에서 2.53과 2.54의 핵심 변화를 함께 정리했다.
가장 눈에 띄는 변화는 새 실험용 명령인 **git history**다. 이 명령은 복잡한 git rebase -i 대신 더 단순한 역사 수정 작업을 겨냥하며, 현재는 **reword**와 split 두 기능을 지원한다. reword는 특정 커밋 메시지를 인플레이스 방식으로 다시 쓰고, split은 한 커밋을 선택한 hunk 기준으로 둘로 나눈다. 이 과정에서 작업 트리나 index를 건드리지 않으며, bare repository에서도 동작할 수 있다.
git history는 merge commit이 포함된 히스토리는 지원하지 않고, 충돌이 발생할 가능성이 있는 작업도 거부한다. 즉, 열린 끝이 많은 인터랙티브 리베이스가 아니라, 작고 명확한 히스토리 재작성에 초점을 맞춘 도구다. 내부적으로는 새로 분리된 **git replay**의 핵심 메커니즘 위에 구축됐다.
hook 시스템도 크게 바뀌었다. 이제 hook을 .git/hooks의 실행 파일로만 두지 않아도 되고, 설정 파일에 아래처럼 정의할 수 있다.
hook.<name>.event = pre-commithook.<name>.command = ~/bin/linter --cpp20
이 방식은 ~/.gitconfig, /etc/gitconfig, 리포지토리 local config 어디에나 둘 수 있어 여러 저장소에 동일한 hook 정책을 쉽게 배포할 수 있다. 같은 event에 여러 hook을 붙일 수 있고, 기존의 전통적인 hook 스크립트도 그대로 동작하며 마지막에 실행된다. hook.<name>.enabled = false로 개별 hook만 꺼둘 수도 있다.
유지보수 동작에서는 geometric repacking이 기본값이 됐다. 2.52에서 선택적으로 제공되던 maintenance.strategy = geometric가, 2.54에서는 git maintenance run의 기본 전략이 되었다. 덕분에 전체를 한 번에 재압축하는 기존 gc 방식보다 더 점진적이고 효율적으로 packfile을 정리하며, commit-graph와 reflog 같은 보조 데이터도 함께 관리한다.
그 밖에도 실사용에 도움이 되는 개선이 여럿 들어갔다.
- **
git add -p**는 hunk 이동 시 이전에 수락/건너뛴 상태를 보여주고,--no-auto-advance로 파일 간 자동 이동을 멈출 수 있다. - **
git replay**는 기본적으로 atomic reference update를 수행하고,--revert모드와 empty commit drop, root commit까지의 replay를 지원한다. - HTTP 전송은 HTTP 429 Too Many Requests를 처리하며,
Retry-After,http.retryAfter,http.maxRetries,http.maxRetryTime로 재시도 정책을 제어할 수 있다. - **
git log -L**는 내부 출력 경로를 표준 diff pipeline으로 바꿔-S,-G같은 pickaxe 옵션과 호환된다.
전체적으로 Git 2.54는 대형 기능 하나보다, 히스토리 재작성, hook 관리, 유지보수, 네트워크 내성을 동시에 다듬은 릴리스다. 실험 기능은 아직 인터페이스가 바뀔 수 있지만, 방향성은 분명히 더 자동화 친화적이고 관리하기 쉬운 Git 쪽으로 향하고 있다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.