Git, 정말 최선인가요?
Git을 쓰다가 한 번쯤 이런 경험 있지 않나요? 브랜치를 잘못 체크아웃해서 작업 중인 변경사항이 날아갈 뻔했다거나, rebase하다가 충돌 지옥에 빠졌다거나, git stash로 임시 저장했는데 나중에 어떤 stash가 뭔지 모르겠다거나. Git은 강력한 도구이지만, 솔직히 사용자 경험이 좋다고 말하기는 어렵잖아요.
Jujutsu(줄여서 jj)는 이런 Git의 불편함을 근본적으로 다시 설계한 새로운 버전 관리 시스템이에요. 구글에서 시작된 프로젝트인데, 가장 중요한 특징은 Git 저장소와 완전히 호환된다는 거예요. 기존 Git 저장소에서 바로 jj를 쓸 수 있고, 팀원들은 계속 Git을 써도 아무 문제가 없어요. 새로운 도구를 도입할 때 가장 큰 장벽이 "팀 전체가 바꿔야 한다"는 건데, jj는 그 문제를 깔끔하게 해결한 거죠.
jj가 뭘 다르게 하나요?
작업 복사본이 곧 커밋이에요
Git에서는 파일을 수정하고 → git add로 스테이징하고 → git commit으로 커밋하는 3단계를 거치잖아요. jj에서는 이 과정이 훨씬 단순해요. 파일을 수정하면 그게 자동으로 현재 "변경"에 반영되거든요. 이게 뭐냐면, jj에서는 작업 디렉토리 자체가 하나의 커밋처럼 취급돼요. 별도로 스테이징할 필요가 없는 거예요.
"그러면 커밋 단위를 어떻게 나누지?"라고 궁금할 수 있는데요. jj에서는 변경사항을 나중에 자유롭게 분할하거나 합칠 수 있어요. 먼저 작업하고, 나중에 정리하는 방식이죠. Git에서 git add -p로 하던 걸 훨씬 직관적으로 할 수 있어요.
충돌이 커밋에 기록돼요
Git에서 rebase나 merge 중에 충돌이 나면 작업이 멈추잖아요. 충돌을 해결할 때까지 다른 건 아무것도 못하고요. jj는 접근 방식이 달라요. 충돌이 발생하면 그 충돌 상태 자체를 커밋에 기록해둬요. 그래서 충돌을 나중에 해결해도 되고, 다른 작업을 먼저 하다가 돌아와서 해결할 수도 있어요. 충돌 때문에 작업 흐름이 끊기지 않는 거죠.
이 방식이 정말 빛을 발하는 순간이 있는데요. 여러 브랜치를 동시에 rebase하는 상황이에요. Git에서는 하나씩 순서대로 해야 하는데, jj에서는 한 번의 rebase로 연쇄적인 브랜치들이 다 같이 업데이트되거든요.
실행 취소가 돼요
jj에는 jj undo라는 명령어가 있어요. 거의 모든 작업을 되돌릴 수 있어요. Git에서 reflog를 뒤져가며 복구하던 걸 생각하면 정말 편한 기능이에요. 실수해도 jj undo 한 번이면 이전 상태로 돌아가니까, 새로운 명령어를 실험해보는 것에 대한 부담이 확 줄어들어요.
익명 브랜치
Git에서는 새로운 작업을 시작하려면 먼저 브랜치를 만들어야 하잖아요. 이름도 지어야 하고요. jj에서는 브랜치 이름 없이도 바로 새 변경을 시작할 수 있어요. 나중에 푸시할 때 이름을 붙이면 되거든요. 작은 차이 같지만, 실제로 써보면 "일단 뭔가 시도해보자"는 탐색적 작업이 훨씬 가벼워져요.
Git과의 호환성은 어떤가요?
jj는 백엔드로 Git 저장소를 그대로 사용해요. 그래서 jj git clone으로 기존 저장소를 클론하면, 그 안에 .git 폴더가 있고 Git 명령어도 같이 쓸 수 있어요. GitHub이나 GitLab으로 push/pull도 되고요. 팀에서 나 혼자만 jj를 쓰고 나머지는 Git을 써도 전혀 문제가 없어요. 이 점이 Jujutsu 채택의 가장 큰 강점이에요.
비슷한 시도를 했던 도구로는 Meta(페이스북)의 Sapling이 있었는데요. Sapling도 Git 호환 VCS였지만 커뮤니티 성장이 더뎠어요. Jujutsu는 구글 내부에서 실제로 사용되면서 꾸준히 발전하고 있고, Steve Klabnik(Rust 커뮤니티에서 유명한 개발자) 같은 분이 튜토리얼을 작성할 정도로 커뮤니티의 관심도 높아지고 있어요.
한국 개발자에게 주는 시사점
jj는 지금 당장 개인 프로젝트에서 시험해볼 수 있어요. 기존 Git 저장소를 그대로 쓰면서 jj를 얹는 거라 리스크가 거의 없거든요. 마음에 안 들면 jj만 삭제하면 Git 저장소는 그대로 남아있어요.
특히 rebase를 자주 하거나, 여러 기능을 동시에 개발하면서 브랜치를 넘나드는 워크플로우를 가진 분이라면 jj의 가치를 바로 체감할 수 있을 거예요. jj log로 보는 변경 히스토리도 Git의 그것보다 훨씬 직관적이고요.
다만 팀 전체 도입은 아직 신중할 필요가 있어요. 아직 1.0이 나오지 않은 상태라 명령어 인터페이스가 바뀔 수 있고, IDE 통합도 Git만큼 성숙하지 않아요. 하지만 개인 워크플로우를 개선하는 도구로는 충분히 써볼 만해요.
정리
Jujutsu는 "Git을 대체"하는 게 아니라 "Git 위에서 더 나은 경험을 제공"하는 도구예요. Git이 불편하다고 느꼈지만 대안이 없어서 참고 있었다면, jj를 한번 시도해보세요. 여러분이 Git에서 가장 불편하게 느끼는 부분은 뭔가요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공