Git의 불편함을 해결하는 새로운 VCS, Jujutsu(JJ) 사용 후기!
JJ는 Git을 백엔드로 사용하며, Git의 복잡한 브랜치 관리(Branch Management) 문제를 해결함
Git과 달리 스테이징 영역(Staging Area)이 없어 모든 변경 사항이 자동으로 추적됨
변경(Change) 관리 기능은 커밋(Commit)을 자유롭게 수정하고 재배치하여 개발 생산성을 향상시킴
JJ는 Git과 호환되므로, Git 사용자와 원활한 협업(Seamless Collaboration)이 가능함
Git과 JJ의 차이점: 변경 관리
JJ는 Git과 달리 스테이징 영역(Staging Area)이 없어, 모든 변경 사항이 자동으로 추적된다. 이는 개발자가 변경 사항을 일일이 스테이징할 필요 없이, 즉시 커밋을 생성하고 수정할 수 있음을 의미한다. 또한, JJ는 `jj new`, `jj describe`, `jj commit` 명령어를 통해 변경 사항을 생성하고 설명하며, `jj edit`, `jj squash`, `jj split` 등의 명령어를 사용하여 변경 사항을 자유롭게 수정하고 재구성할 수 있다. 이러한 유연성은 Git에서 커밋 수정(Commit Modification)으로 인한 번거로움을 줄여 개발 생산성을 향상시킨다.
JJ의 브랜치 관리: 북마크(Bookmark) 활용
JJ는 Git과 달리 브랜치 대신 북마크(Bookmark)를 사용한다. 북마크는 변경 사항을 가리키는 이름표 역할을 하며, 이를 통해 브랜치와 유사한 기능을 구현한다. `jj bookmark create`, `jj bookmark list`, `jj bookmark delete` 등의 명령어를 사용하여 북마크를 생성, 관리할 수 있다. 북마크는 변경 사항이 이동해도 자동으로 따라가며, Git 리모트 브랜치와 연동되어 원격 저장소(Remote Repository)와의 동기화도 지원한다. 이러한 유연한 브랜치 관리는 Git의 복잡성을 줄여준다.
Git과의 연동: `jj git` 명령어
JJ는 Git을 백엔드로 사용하므로, Git과 완벽하게 호환된다. `jj git init`, `jj git clone` 명령어를 통해 Git 저장소를 JJ 저장소로 초기화할 수 있으며, Git 리모트와 연동하여 원격 저장소(Remote Repository)에 변경 사항을 푸시(Push)하고 가져올(Fetch) 수 있다. `jj git push`, `jj git fetch` 명령어를 사용하면 JJ의 변경 사항을 Git 커밋으로 변환하여 Git 리모트에 업로드하거나, Git 리모트의 변경 사항을 JJ 저장소로 가져올 수 있다. 이러한 Git과의 연동은 JJ를 사용하는 개발자와 Git을 사용하는 개발자 간의 원활한 협업(Seamless Collaboration)을 가능하게 한다.
JJ의 장점: 유연한 변경 관리와 실험
JJ는 Git에 비해 유연한 변경 관리(Flexible Change Management) 기능을 제공하여 개발 생산성을 향상시킨다. 특히, `jj edit`, `jj squash`, `jj split`, `jj rebase` 등의 명령어를 통해 커밋을 자유롭게 수정하고 재배치할 수 있다. 또한, `jj op log`, `jj undo`, `jj redo` 명령어를 통해 작업 내역을 추적하고, 이전 상태로 복구할 수 있어 실험(Experimentation)에 대한 부담을 줄여준다. 이러한 기능들은 개발자가 코드 변경에 대한 두려움 없이 자유롭게 실험하고, 더 나은 코드를 작성할 수 있도록 돕는다.