gradle-git-properties "Unknown DIRC version 4" 오류 해결 방법

Unknown DIRC version 4

gradle 프로젝트에서 gradle-git-properties 플러그인을 쓸 때, 위와 같은 오류가 나오는 경우, 거두절미 하고 gradle-git-properties 플러그인 버전을 최신 버전(오늘 기준 2.4.1)으로 올리면 된다

plugins {
  id "com.gorylenko.gradle-git-properties" version "2.4.1"
}

build.gradle

내 경우 기존에 사용중인 플러그인 버전은 2.2.1이었다

플러그인 버전업을 할 수 없는 경우

$ git update-index --index-version 3

버전업을 할 수 없는 상황이라면, git 인덱스 버전을 2 또는 3으로 업데이트 하는 식으로 땜질할 수 있다.

git index 4 버전의 이점을 가져갈 수 없으니, 권장하지는 않는다

오류 원인

일단 git 인덱스에 대해 간략히 알아보면, 단일 바이너리 파일(.git/index)이며, 헤더와 정렬된 인덱스 엔트리를 포함하고 있다. 4바이트 파일 시그니처를 갖고 있으며 시그니처가 DIRC(=dircache)이다.

더 자세한 정보는 git 문서를 확인한다

Git - index-format Documentation

git index 파일 헤더에는 버전도 포함되는데, 버전은 현재 2, 3, 4중 하나다. 높을 수록 최근에 추가된 형식이다.

따라서 Unknown DIRC version 4라는 에러는 gradle-git-properties 플러그인에서 사용되는 git client(=JGit)에서 최신 버전의 깃 인덱스를 인식하지 못해 발생하는 것이다.

Version 4 performs a simple pathname compression that reduces index size by 30%-50% on large repositories, which results in faster load time. Git supports it since version 1.8.0, released in October 2012, and support for it was added to libgit2 in 2016 and to JGit in 2020. (link)

인덱스 버전 4는 큰 리파지토리에서 30~50% 적은 인덱스 사이즈를 가지는데, JGit은 2020년부터 지원한다고 한다. 정확히 말하면 JGit 5.9.0 버전부터이다.

따라서 JGit 버전을 5.9.0으로 올리면 된다.

gradle-git-properties는 grgit이라는 JGit groovy wrapper를 쓰고 있는데, 구버전은 JGit 5.9 미만 버전을 사용하는 grgit-core 버전을 사용하는 것으로 보인다. (당시 grgit 버전에서 JGit의 latest 버전을 사용한다 써있어서 실제 무슨 버전을 쓰는지는 확인이 귀찮다..)

아무튼 결론은 gradle-git-properties 버전을 올리면 된다