jj로 더 나은 생성 브랜치 이름 만들기

1 hour ago 1
  • 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 alias slugify()를 새로 만들고, git_push_bookmark 템플릿이 이를 사용하도록 바꿈
[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를 수동으로 만들어야 함
Read Entire Article