최근 Rust 기반의 새로운 오픈소스 Git diff 도구인 OmniDiff가 공개되어 개발 커뮤니티의 주목을 받고 있습니다. 기존 Git diff가 주로 텍스트 기반 코드 변경 사항을 비교하는 데 집중했다면, OmniDiff는 한 단계 더 나아가 이미지, 폰트, 압축 파일, PDF 등 비텍스트 파일까지 콘텐츠의 특성에 맞춰 변경된 부분을 정확하고 빠르게 감지하고 시각화합니다. 이는 개발자들이 버전 관리 시스템을 활용하는 방식에 큰 변화를 가져올 잠재력을 지니고 있습니다.
OmniDiff는 코드 비교 시 25개 언어에 대해 tree-sitter 기반의 구조적 비교를 수행하여 단순한 줄 단위 비교를 넘어 실제 코드의 논리적 변경을 파악합니다. 비텍스트 파일의 경우, 파일명 대신 바이트를 분석하여 파일 형식을 식별하고, 이미지(PNG, JPEG 등)는 픽셀 단위로, 폰트(TrueType, OpenType)는 글리프(glyph) 단위로, PDF는 페이지 단위로 렌더링하여 변경 사항을 보여줍니다. 압축 파일(zip, jar, Office 문서 등)은 내부 파일을 해체하여 비교하며, 중첩된 압축 파일까지 처리합니다. 이러한 콘텐츠 인식 비교 방식 덕분에, 예를 들어 폰트 파일에서 글리프 두 개만 바뀌었다면 해당 두 개만 터미널에 표시하는 등 매우 세밀한 정보를 제공합니다. 성능 면에서도 코드 테스트 2,302건의 중앙값 처리 시간이 4.2ms에 불과하며, 대규모 저장소의 99.95%를 시간 및 메모리 한도 내에서 처리하는 등 뛰어난 속도를 자랑합니다.
OmniDiff의 등장은 개발 워크플로우를 혁신할 중요한 의미를 가집니다. 기존에는 바이너리 파일의 변경 사항을 확인하기 위해 별도의 도구를 사용하거나 수동으로 비교해야 하는 번거로움이 있었습니다. 하지만 OmniDiff를 통해 개발자들은 이제 Git 환경 내에서 코드와 비코드 파일의 변경 사항을 일관되고 효율적으로 검토할 수 있게 됩니다. 이는 특히 디자인 리소스, 문서, 빌드 아티팩트 등 다양한 형태의 파일을 버전 관리하는 프로젝트에서 협업의 효율성을 높이고 오류를 줄이는 데 크게 기여할 것입니다. 또한, 터미널에서 24비트 색상과 이미지(kitty, sixel, iTerm2 프로토콜 지원)를 직접 표시하는 대화형 TUI(Text User Interface)와 스크립트 및 CI/CD 환경을 위한 JSON 출력 기능은 개발자들에게 유연하고 강력한 도구 경험을 제공합니다.