What’s new in Git 2.54.0? (새 탭에서 열림)
Git 2.54.0 버전은 객체 데이터베이스(ODB)의 추상화를 통해 플러그 가능한 저장소 구조를 도입하고, 복잡한 대화형 리베이스를 대체할 직관적인 git history 명령어를 새롭게 선보였습니다. 이번 릴리스는 대규모 바이너리 처리나 플랫폼별 최적화 등 저장소 확장성을 확보하는 동시에, 개발자가 커밋 이력을 훨씬 쉽고 안전하게 관리할 수 있도록 사용자 경험을 대폭 개선하는 데 중점을 두었습니다. 약 2년에 걸친 내부 아키텍처 개편을 통해 Git은 더욱 현대적이고 유연한 도구로 진화하고 있습니다.
플러그 가능한 객체 데이터베이스 (Pluggable Object Databases)
- 기존에 참조(refs) 저장 방식을 "files"와 "reftable"로 선택할 수 있었던 것처럼, 이제 객체(Objects) 저장 방식에도 추상화 계층이 도입되었습니다.
- 그동안 Git 코드 곳곳에 하드코딩되어 있던 객체 저장 포맷(Loose objects, Packfiles) 가정을 제거하고, 다양한 백엔드를 수용할 수 있는 구조를 마련했습니다.
- 현재는 커밋 생성, 그래프 표시, 병합 등 로컬 워크플로우의 상당 부분을 지원하며, 원격(Fetch, Push) 작업 지원을 위한 고도화 작업이 진행 중입니다.
- 이러한 변화를 통해 향후 대용량 바이너리 파일을 효율적으로 저장하는 특수 포맷이나, GitLab과 같은 대규모 플랫폼에 최적화된 전용 스토리지 포맷을 도입하는 것이 가능해집니다.
커밋 이력 편집의 현대화와 git history 명령어
- 강력하지만 사용법이 복잡하고 난해했던 기존의 대화형 리베이스(
git rebase -i)를 대체하기 위해 직관적인git history명령어가 추가되었습니다. - git history reword: 특정 커밋의 메시지를 즉시 수정할 수 있는 기능을 제공하여 사용자 편의성을 높였습니다.
- git history split: 하나의 커밋을 두 개로 쪼개는 작업을 간편하게 수행할 수 있으며, 이는 최신 버전 관리 도구인 Jujutsu(
jj split)의 영감을 받아 구현되었습니다. - 단순한 편집을 넘어, 수정된 커밋을 포함하고 있는 모든 로컬 브랜치를 자동으로 리베이스해주는 기능이 포함되어 있어 'Stacked Diffs(여러 개의 의존적 브랜치를 동시에 관리하는 방식)' 워크플로우를 강력하게 지원합니다.
- 향후
fixup(수정 사항 자동 병합),drop(커밋 삭제),reorder(순서 변경),squash(커밋 합치기) 등 더 많은 서브 명령어가 추가될 예정입니다.
실용적인 결론
이번 업데이트는 Git의 내부 구조를 유연하게 재설계하여 미래의 저장 기술을 수용할 준비를 마쳤다는 점에서 큰 의의가 있습니다. 특히 git history 명령어는 리베이스 과정에서 실수를 두려워하던 사용자들에게 훨씬 안전하고 간결한 작업 방식을 제공하므로, 깔끔한 커밋 이력을 유지하고자 하는 개발자들에게 사용을 적극 권장합니다.