jj vs Gradle: 줄바꿈 문자 충돌로 도입 실패
Jujutsu(jj) 도입 시도 중 Gradle 프로젝트의 `gradlew.bat` 파일에서 줄바꿈 문자(Line Ending) 처리 불일치 문제 발생
jj가 `.gitattributes` 설정을 지원하지 않아 발생하는 문제로, Windows 환경에서 `gradlew.bat` 실행 오류 유발
해당 문제 해결을 위해 `git worktree`를 대안으로 사용 중이며, jj의 향후 개선을 기대함
Jujutsu(jj)와 `.gitattributes`의 호환성 문제
커뮤니티에서는 Jujutsu(jj)가 `.gitattributes` 파일의 `eol=crlf`와 같은 파일별 줄바꿈 문자 규칙을 지원하지 않는 점을 주요 문제로 지적합니다. 이는 Git에서는 정상적으로 처리되던 `gradlew.bat` 파일의 CRLF(Carriage Return Line Feed) 줄바꿈 문자를 jj가 인식하지 못해, 저장된 LF(Line Feed)와 디스크 상의 CRLF 간의 지속적인 팬텀 수정(Phantom Modification)을 유발한다고 설명합니다. 이로 인해 Windows 환경에서 `gradlew.bat` 스크립트 실행에 차질이 발생할 수 있습니다.
Gradle Wrapper(`gradlew.bat`)의 특수성
논의에서는 Gradle Wrapper 스크립트(`gradlew.bat`)가 Windows의 `cmd.exe`에서 `goto` 및 레이블 구문을 사용하기 때문에 LF 줄바꿈 문자만으로는 정상 작동이 어렵다는 점을 강조합니다. 따라서 Git에서는 `.gitattributes`를 통해 `*.bat` 파일에 대해 CRLF 줄바꿈을 강제하는 것이 일반적입니다. jj는 이러한 Git의 파일별 설정을 무시하고 전역 설정(`working-copy.eol-conversion`)에만 의존하므로, 특정 파일에 대한 세밀한 제어가 불가능하다는 한계가 있습니다.
대안으로 `git worktree`를 선택한 이유
글쓴이는 jj의 워크스페이스(Workspace) 기능이 제공하는 다중 작업 디렉토리(Multiple Working Directories) 지원이 매력적이었으나, 기존에 사용하던 `git worktree`로도 충분히 동일한 효과를 얻을 수 있다고 설명합니다. `git worktree`는 하나의 Git 저장소를 공유하면서 여러 개의 체크아웃을 관리할 수 있어, CI/CD 파이프라인이나 병렬 개발 작업 시 유용하다고 언급합니다. 이는 jj의 핵심 기능 중 하나를 대체할 수 있는 실용적인 대안으로 제시됩니다.
jj의 잠재력과 향후 개선 가능성
이번 문제에도 불구하고, 글쓴이는 jj의 운영 기록(Operation Log) 기능 등 잠재력에 대해 긍정적인 평가를 내립니다. 특히 줄바꿈 문자 지원 문제는 `gix-filter` 등을 통한 해결이 논의되고 있어, 향후 jj가 Gradle 프로젝트와 같은 특정 환경과의 호환성 문제를 해결한다면 재도입을 고려할 수 있다고 밝힙니다. 이는 jj가 아직 개발 중인 VCS이며, 커뮤니티 피드백을 통해 발전하고 있음을 시사합니다.