안녕하세요, 개발자 여러분! 오늘은 버전 컨트롤 시스템(VCS) 세계에서 최근 주목받고 있는 Jujutsu (jj) 에 대해 이야기해보려 합니다. Git을 사랑하지만, 더 직관적이고 강력한 도구를 찾고 계신가요? Git의 속도와 호환성을 유지하면서도 Mercurial이나 Darcs 같은 도구의 혁신적인 기능을 결합한 jj가 바로 그 해답일 수 있습니다. 이 포스트는 GitHub 저장소의 내용을 기반으로 jj의 매력을 자세히 살펴보겠습니다. 초보자부터 고급 사용자까지, 왜 jj를 시도해볼 만한지 알아보죠.
Jujutsu란 무엇인가?
Jujutsu는 소프트웨어 프로젝트를 위한 Git 호환 VCS로, 코드 복사, 변경 추적, 배포를 간단하고 강력하게 처리합니다. 2019년에 Martin von Zweigbergk가 취미 프로젝트로 시작한 이 도구는 이제 Google에서 풀타임 개발 중이며, 핵심 개발자들이 GitHub에서 jj를 개발하는 데 실제로 사용하고 있습니다.
jj의 철학은 사용자 인터페이스와 알고리즘을 저장소 백엔드와 분리하는 데 있습니다. 기본적으로 Git 저장소를 사용해 Git 도구와 완벽하게 호환되지만, Mercurial, Breezy, 또는 Google의 Piper/CitC 같은 하이브리드 시스템도 지원할 수 있습니다. 이름은 'Jujutsu'지만, 명령줄 도구는 간단히 jj로 불립니다. 아직 젊고 실험적인 도구지만, Git의 속도, Mercurial의 revset 언어, Darcs의 충돌 객체 같은 장점을 흡수해 더 나은 경험을 제공합니다.
궁금한 점이 있으신가요? Discord나 GitHub Discussions에서 커뮤니티와 소통해보세요!
주요 기능: 왜 jj가 특별할까?
jj는 Git의 안정성을 유지하면서도 혁신적인 기능을 더해 "더 나은 VCS"를 지향합니다. 아래는 핵심 기능입니다:
- Git 완벽 호환: Gitoxide Rust 라이브러리를 통해 Git 저장소를 사용합니다.
jj fetch나jj push로 Git 리모트와 자유롭게 상호작용하며, jj 커밋은 일반 Git 커밋으로 보입니다. 심지어 jj와 Git을 같은 저장소에서 섞어 사용할 수 있어요! - 작업 복사본(Working Copy) as Commit: 변경 사항이 자동으로 커밋으로 기록되어 "더러운 작업 복사본" 오류가 사라집니다. 스태시(stash) 필요 없이, 작업 복사본을 다른 커밋처럼 다룰 수 있습니다. 예를 들어,
jj describe로 메시지를 수정하거나jj restore로 이전 상태로 되돌리기 쉽죠. - 저장소가 진실의 원천(Repo as Source of Truth): 모든 명령어가 작업 복사본을 스냅샷으로 찍고 저장소를 업데이트한 후, 작업 복사본을 새로 고칩니다. 결과적으로
jj undo로 특정 작업을 되돌리거나, 전체 저장소 상태를 쉽게 복원할 수 있습니다. - 충돌(Conflicts) as First-Class Objects: 충돌을 커밋에 기록해 작업을 중단하지 않고 계속 진행합니다. 나중에 통합된 워크플로우로 해결하며, 병합 커밋의 리베이스도 정확히 처리됩니다.
- 자동 리베이스(Automatic Rebase): 커밋 수정 시 후손 커밋이 자동으로 리베이스되고, 북마크가 업데이트되며, 충돌은 투명하게 처리됩니다. Git의
rebase --update-refs와rerere를 합친 듯한 느낌! - 포괄적인 히스토리 재작성:
jj rebase,jj split(커밋 분할),jj squash(변경 이동),jj diffedit(체크아웃 없이 변경 편집) 등으로 히스토리를 자유롭게 다듬습니다. - 실험적 기능: Dropbox, S3, rsync 같은 비원자적 파일 시스템에서 안전한 동시 복제를 지원합니다. (충돌 발생 시 해결 필요)
이 기능들은 Git의 단점을 보완하며, 대규모 팀이나 복잡한 히스토리 프로젝트에 이상적입니다. 자세한 Git 비교는 여기를 확인하세요.
설치와 기본 사용법: 5분 만에 시작하기
jj를 설치하는 건 간단합니다. 공식 설치 가이드를 따르세요. (프리릴리스 버전은 여기)
기본 사용 예시:
- 저장소 클론:
jj git clone https://github.com/example/repo(Git 리모트 지원). - 변경 작업: 파일 수정 후 자동 커밋.
jj describe -m "My changes"로 메시지 설정. - 히스토리 보기:
jj log로 그래프와 함께 로그 확인. - 리베이스:
jj rebase -d main으로 메인 브랜치에 리베이스. - 언두:
jj undo로 최근 작업 취소.
튜토리얼은 여기에서 상세히 다뤄집니다. jj help 명령어로 언제든 도움말을 불러보세요!
최근 업데이트와 로드맵
jj는 활발히 개발 중입니다. 2024년 11월 v0.24에서 jj file annotate (Git blame 비슷)가 추가되었고, 12월에 jj-vcs 조직으로 이동했습니다. Git Merge 2024에서 발표된 비디오도 흥미로워요. 로드맵은 여기에서 확인 가능하며, v1.0.0 이전에 호환성 변경이 있을 수 있습니다. (라이선스: Apache 2.0)
마무리: jj로 VCS를 재발견하세요
Jujutsu는 Git의 진화를 상징합니다. 실험적이라 버그가 있을 수 있지만, 그만큼 혁신적입니다. Git에 지치셨다면, 오늘 jj를 설치해보세요. 작업 복사본이 커밋처럼 느껴지는 순간, VCS의 새로운 세계가 열릴 거예요. 여러분의 경험 공유 부탁드려요 – 댓글로 알려주세요!