Lobsters

jujutsu (jj) 0.46.0

jujutsu (jj) 0.46.0 — Git worktree 연동과 워크스페이스 관리 개선

jujutsu 0.46.0은 Git worktree와 jj 워크스페이스를 함께 관리하는 기능을 추가하고, 워크스페이스 제거와 다른 리비전의 파일 편집을 지원합니다. 여러 remote에 push하거나 diff 헤더에서 소스 심볼을 확인하는 기능도 포함합니다.

AI 요약

jujutsu(jj) 0.46.0은 워크스페이스와 Git worktree를 함께 관리하는 기능을 확장했습니다. 기존 워크스페이스에서 colocation을 켜고 끌 수 있으며, 워크스페이스를 디스크의 디렉터리와 함께 제거하는 명령도 추가했습니다. 파일 편집과 push, diff 확인 기능도 보강했습니다.

워크스페이스와 Git 연동

jj workspace add에 --colocate와 --no-colocate 옵션이 생겼습니다. 기본 설정은 현재 워크스페이스의 colocation 상태를 따릅니다. git.colocate 설정으로 기본 동작을 정할 수도 있습니다. 기존 워크스페이스에서는 jj git colocation enable과 disable로 Git worktree 연동을 켜거나 끕니다. jj workspace forget은 연결된 Git worktree도 제거합니다.

jj workspace remove는 워크스페이스와 디렉터리를 디스크에서 제거합니다. 제거 전에 작업 트리 상태를 커밋으로 저장합니다. jj undo와 jj redo는 다른 워크스페이스에서 실행한 작업을 기본적으로 되돌리거나 다시 적용하지 않습니다. 필요하면 --allow-cross-workspace를 지정합니다. 워크스페이스 목록은 더 이상 경로가 도달 불가능하다는 이유로 기록을 숨기지 않습니다.

파일 편집과 push

새 jj file edit과 jj file delete 명령은 작업 디렉터리를 다른 리비전으로 전환하지 않고도 해당 리비전의 파일을 수정하거나 삭제합니다. 릴리스 노트는 이를 통해 특정 변경에 속한 파일만 다룰 수 있다고 설명합니다. jj split은 분할할 커밋의 설명을 한 번의 편집기 세션에서 수정합니다.

jj git push는 여러 remote에 동시에 push합니다. git.push 설정에 문자열 패턴 하나나 배열을 지정하거나, 반복 가능한 --remote 옵션을 사용할 수 있습니다. 기본 push 대상 리비전은 revsets.git-push로 설정합니다. jj run은 실행한 워크스페이스의 sparse 패턴을 사용하며, --sparse-patterns 옵션으로 동작을 지정합니다.

diff와 템플릿 개선

diff의 hunk 헤더에 여러 프로그래밍·마크업 언어의 주변 소스 심볼이 표시됩니다. diff.color-words.conflict = "pair"에서는 비교하는 항목의 conflict label도 헤더에 나옵니다. 파일 경로 두 개를 비교하는 jj util diff <path1> <path2> 명령도 추가했습니다.

템플릿 함수 List.get(), .first(), .last()는 범위를 벗어난 접근에서 오류를 내는 대신 Option<T>를 반환합니다. json()은 맵 리터럴을 지원하며, fill에는 긴 단어의 줄바꿈 여부를 지정하는 break_words 인자가 추가됐습니다. TreeEntry.normal_value()와 TreeValue로는 Git submodule 커밋 ID를 포함한 해석된 트리 값의 전체 객체 ID를 확인합니다. ui.editor 설정은 $path와 $line 치환 변수도 지원합니다.

호환성 변경과 버그 수정

필요한 Git 최소 버전은 2.42.0으로 올라갔습니다. jj workspace add가 Git 2.42.0에 추가된 git worktree add --orphan을 사용하기 때문입니다. 최소 지원 Rust 버전(MSRV)은 1.97.1입니다. jj bisect run은 시작 전에 일관성 검사를 수행하며, 검사를 끄려면 --trust-endpoints를 지정합니다.

Windows에서는 SSH가 암호 입력이나 호스트 확인을 요청할 때 jj가 멈추던 문제가 수정됐습니다. sparse 패턴으로 작업 트리에서 제외한 .gitignore도 무시 규칙으로 적용되며, 저장소 내부의 .gitignore가 심볼릭 링크라면 대상 파일을 읽지 않습니다. jj undo로 jj workspace forget을 되돌릴 때 경로 정보가 보존되고, 현재 작업의 조상이 아닌 동시 실행 작업도 at_operation()에서 처리합니다.

Lobsters 반응

  • @kingmob — 제 개인적인 불편 두 가지가 해결돼 정말 반갑습니다. 이제 워크스페이스를 Git worktree와 함께 배치할 수 있고, 워크스페이스를 잊는 동시에 디렉터리도 삭제하는 명령이 생겼습니다.
    • @imcquee — 대충 물어보는 질문일 수도 있는데, 이 기능을 쓰려면 새 워크스페이스를 만들어야 하나요, 아니면 기존 워크스페이스도 연동할 수 있나요? 덧붙임: 안전하게 기존 워크스페이스를 제거하고 다시 추가했습니다.
    • @aqrln — 릴리스 노트에는 기존 worktree에서 jj git colocation enable을 실행하면 된다고 나와 있습니다. 직접 해보지는 않았습니다.
    • @offby1 — 저도 두 기능이 정말 반갑습니다. 워크스페이스를 훨씬 쓰기 편하게 만들어 주겠네요.
  • @zmitchell — 이번 릴리스에서 가장 마음에 드는 건 jj split이 메시지를 수정할 때 편집기 세션을 한 번만 여는 점과, 다른 변경에 속한 파일을 다루는 jj file edit 및 jj file delete입니다. 실수로 커밋한 파일을 삭제할 때 두 번째 기능이 정말 유용하겠네요.
    • @giodamelio — jj file edit이 정말 좋을 것 같습니다. jj에서는 예전 방식보다 훨씬 자유롭게 과거로 돌아가 편집할 수 있지만, 작업 트리 전체를 전환하면 언어 서버나 다른 도구가 오작동할 때가 있습니다. jj absorb가 종종 해결해 주지만, 무엇을 언제 편집할지 정확히 알고 있을 때는 이 기능이 편리하겠습니다.

원문: GitHub / 번역·요약: Trawling