- jj는 Git 호환 버전 관리 시스템으로 익명 브랜치를 권장하지만, Git 저장소에 push하려면 bookmark, 즉 Git 브랜치 이름이 필요함
- 기본 jj git push --change xyz는 push-xyz 브랜치를 만들며, change ID 중심이라 CLI에서는 자연스럽지만 GitHub 목록에서는 작업 내용을 떠올리기 어려움
- git_push_bookmark 템플릿을 바꿔 설명 첫 줄을 slugify() 로 짧은 slug로 만들고, 뒤에 짧은 change ID를 붙이는 방식으로 개선 가능함
- jj git push --change ozkspkuyzpwu는 add-note-about-jj-bookmark-templates/ozkspkuyzpwu를 만들어 읽기 쉬움과 리비전 연결성을 함께 유지함
- 공유 저장소에서는 ddbeck/ 같은 namespace를 앞에 붙일 수 있지만, Git 브랜치 이름 규칙이 복잡해 유효하지 않으면 수동 bookmark 생성이 필요함
jj의 Git push용 브랜치 이름 개선
- jj(Jujutsu)는 Git 호환 버전 관리 시스템이며, 여러 이유로 익명 브랜치 사용을 기대하고 권장함
- Git 저장소로 push할 때는 익명 브랜치에도 이름이 필요하며, jj에서는 이를 bookmark, Git에서는 branch라고 부름
- jj git push --change xyz는 ID가 xyz인 리비전을 Git 브랜치 push-xyz로 push함
- 기본값은 jj CLI가 자주 표시하고 사용하는 change ID를 강조한다는 점에서 자연스럽지만, GitHub 웹사이트의 브랜치 목록에서는 push-xyz만으로 어떤 작업인지 기억하기 어려움
설정 변경 방식
[template-aliases]
"slugify(str)" = '''
truncate_end(
65,
str.first_line()
.replace(regex:'[^[[:alnum:]].]', '-')
.replace(regex:'-{2,}', '-')
.replace(regex:'\.{2,}', '.')
.replace(regex:'(^-+|-+$)', '')
.lower()
)
'''
[templates]
git_push_bookmark = 'slugify(description) ++ "/" ++ change_id.short()'
- slugify()는 변경 설명의 첫 줄을 사용해 짧은 slug 형태 이름을 만들고, 끝에 짧은 change ID를 붙임
- 예를 들어 jj git push --change ozkspkuyzpwu를 실행하면 add-note-about-jj-bookmark-templates/ozkspkuyzpwu가 생성됨
- 이 이름은 더 읽기 쉬우면서도 jj CLI에 표시되는 리비전 ID와의 연결을 유지함
- 다른 사람과 공유하는 저장소에 push한다면, 자신의 브랜치를 별도 namespace 아래에 두도록 템플릿을 바꿀 수 있음
[templates]
git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()'
- Git 브랜치 이름이 항상 안전한지는 보장되지 않음
- Git의 유효한 브랜치 이름 규칙은 복잡하며, 템플릿이 유효하지 않은 이름을 만들면 오류가 발생하고 bookmark를 수동으로 만들어야 함