피드로 돌아가기
The future of version control
Hacker NewsHacker News
Backend

The future of version control

Manyana 프로젝트가 CRDT 기반 버전 관리 시스템을 구현해 전통적 병합 충돌을 구조화된 정보 표시로 전환

2026년 3월 22일7advanced

Context

전통적 VCS(Git 등)에서는 두 개의 분기가 같은 파일을 수정할 때 충돌 마커가 두 개의 불투명한 블록으로만 표시되어, 엔지니어가 실제 어떤 변경이 일어났는지 재구성하기 어렵다. 또한 공격적인 리베이스로 인해 단일 공통 조상이 없는 병합 위상이 생기면 3-way merge가 제대로 작동하지 않는 문제가 있다.

Technical Solution

  • CRDT(Conflict-Free Replicated Data Types) 기반 설계 도입: 병합이 항상 성공하고 브랜치 순서와 관계없이 동일한 결과를 보장하는 구조로 변경
  • 충돌 표시 방식 개선: 각 변경사항이 어느 쪽에서 왔는지를 명시적으로 표기하여(begin deleted left, begin added right 등) 충돌 구조를 명확하게 제시
  • 라인 순서를 불변으로 처리: 두 브랜치가 같은 지점에 코드를 삽입할 때 CRDT가 순서를 결정하고 고정하여 다양한 병합 순서에서의 불일치 문제 제거
  • 히스토리 저장 구조 변경: 파일의 모든 라인이 언제 추가되고 제거되었는지 메타데이터를 포함한 weave 구조로 통합하여 공통 조상 탐색과 DAG 순회 불필요
  • 리베이스 메커니즘 개선: primary ancestor 주석을 DAG에 추가하여 전체 히스토리를 보존하면서도 리베이스의 효과를 달성

Key Takeaway

CRDT 기반 버전 관리 시스템은 병합 충돌을 막을 수 없는 기술적 한계로 보지 않고 정보를 명확하게 표시하는 기회로 재정의함으로써, 기존 도구들이 해결하지 못한 복잡한 병합 위상에서도 일관되고 이해 가능한 결과를 제공할 수 있다.


Git을 사용하는 팀에서 3명 이상이 동시에 같은 파일을 수정하거나 공격적인 리베이스로 인해 병합 충돌이 빈번하게 발생하는 환경에서, CRDT 기반 버전 관리를 도입하면 충돌 메시지의 명확성을 높여 코드 리뷰 시간을 단축할 수 있다.

원문 읽기