1P by GN⁺ | ★ favorite | 댓글 1개
  • jj 명령어를 반복 입력하는 작은 실수는 하위 명령 오류로 이어지지만, jj 설정 별칭으로 흡수할 수 있음
  • 예시는 현재 편집 중인 changeset의 짧은 ID를 얻으려는 jj jj show -T 'change_id.short()'가 실패하는 상황임
  • jj는 git처럼 설정 파일에 alias를 정의할 수 있어, jj util exec로 남은 명령을 다시 jj에 넘길 수 있음
  • 단순 별칭은 -T를 실행 대상이 아니라 jj util exec의 옵션처럼 해석하므로, --로 인자 파싱을 끊어야 함
  • 최종 설정 jj = ["util", "exec", "--", "jj"]를 쓰면 jj jj show뿐 아니라 여러 번 중첩된 jj jj jj... show도 같은 changeset ID를 출력함

반복 입력된 jj가 하위 명령 오류로 실패함

  • jj 사용 중 명령줄에 jj를 하나 더 입력하면, 두 번째 jj가 하위 명령으로 해석되어 실패함
    • 예시는 현재 편집 중인 changeset의 짧은 ID를 가져오려는 명령임
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
  • 셸 별칭으로도 우회할 수 있지만, jj 자체 설정의 alias를 사용할 수 있음
    • 설정 편집에는 jj config edit를 사용할 수 있음
    • 셸에서 설정을 바꾸려면 jj config set을 사용할 수 있음

jj util exec에서 --로 인자 전달을 고정함

  • 첫 시도는 별칭에서 jj util exec로 다시 jj를 실행하는 방식임
[aliases]


# jj all the way down
jj = ["util", "exec", "jj"]
  • 이 설정에서는 -T가 실행 대상 jj가 아니라 jj util exec의 옵션처럼 해석되어 실패함
$ jj jj show -T 'change_id.short()'
error: unexpected argument '-T' found
tip: to pass '-T' as a value, use '-- -T'
Usage: jj util exec [OPTIONS] <COMMAND> [ARGS]...
For more information, try '--help'.
  • --를 넣으면 이후 옵션 파싱을 중단하고 남은 인자를 그대로 실행 대상에 전달할 수 있음
[aliases]


# jj all the way down
jj = ["util", "exec", "--", "jj"]
  • 최종 설정 후에는 일반 jj show, 중첩된 jj jj show, 더 많이 반복된 jj jj jj ... show가 모두 같은 짧은 changeset ID를 출력함
$ jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx

댓글과 토론

Lobste.rs 의견들
  • 이전에도 git git git git git가 있었음

  • 이건 더 단순한 방법으로도 가능함:

    [aliases]  
    jj = []  
    

    이 형태의 유일한 단점은, 기억이 맞다면 jj jj처럼 다른 인자 없이 실행했을 때 jj처럼 기본 명령을 실행하지 않는다는 것임

    • 그렇다면 그 더 단순한 방법은 실제로 같은 일을 하는 게 아닌 것 아닌가?
  • 와, 거의 1년 전(09/28/25)에 JJ Discord에 같은 해결책을 올렸었음
    jj jj ... 오타가 jj ...처럼 동작하게 하려면 실제로는 이게 필요함:

    [aliases]  
    jj = ["util", "exec", "--", "jj"]  
    

    사실 이 방식이 꽤 마음에 듦

  • 이거 bunny party 참조인가?

  • 내가 관리하는 jj 설정 gist에도 추가했음: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • 그래도 Jujutsu가 무엇이고 왜 써야 하는지 트윗 길이로 5살에게 설명하듯 정리한 버전을 보고 싶음
    이전 직장에서는 Git을 4년간 매일 썼고, 정말 싫었음. 우리가 필요로 한 것과 대부분의 사용 방식에 비해 기괴할 정도로 과하게 복잡했고, 대부분에게는 분산 버전 관리 시스템이 아니라 Github 중심의 중앙화된 서버 기반 도구였음
    많은 Git 사용자가 git이 영국 영어로 “성마르고 비협조적이며 도움이 안 되는 사람”이라는 뜻도 있다는 걸 모르는 게 재미있음. 도구로서의 Git을 잘 설명하는 말임
    다만 다른 버전 관리 시스템은 써본 적이 없어서 비교에는 약함. Jujutsu는 구글링하기도 어렵고, 문서도 나 같은 사람보다는 더 숙련된 버전 관리 사용자에게 맞춰진 듯함

    • Torvalds가 git을 고른 건 실제로 무례하고 성마른 사람이라는 뜻 때문이었다고 봄