Git
ort merge strategy
헬로우월드
2023. 6. 28. 17:20
🔍 ort
Merge 전략이란?
ort
는 Git 2.34 (2021년 11월 출시)부터 기본 병합 전략으로 채택된 신형 merge 전략입니다.
이 전략은 기존의 recursive
전략을 논리적으로 동일하지만 훨씬 빠르게 수행하기 위해 완전히 새롭게 재작성된 merge 엔진입니다.
📌 이름의 유래
- Optimized
- Recursive
- Tree merge
→ 줄여서ort
(발음: 오트)
1. 🎯 도입 배경: 왜 recursive
를 대체했는가?
기존의 recursive
merge 전략은 다음과 같은 문제점이 있었습니다:
문제점 | 설명 |
---|---|
성능 저하 | 대형 리포지토리(예: 리눅스 커널) merge 시, merge에 수 분 이상 소요 |
메모리 비효율 | 트리 비교를 재귀적으로 수행 → call stack 깊이 증가 및 객체 재사용 어려움 |
merge 충돌 처리 복잡성 | 전략적으로는 우수하지만 구현 복잡성 탓에 최적화가 어려움 |
2. ⚙️ ort 전략의 내부 구조
ort
는 recursive
와 논리적으로 동등한 merge 알고리즘을 사용하지만, 데이터 접근 방식과 메모리 처리 로직을 전면 재설계했습니다.
✅ 주요 최적화 요소:
① Flattened Tree Walk (트리 평탄화)
recursive
는 트리를 재귀적으로 순회하면서 비교ort
는 Git의tree diff
알고리즘을 사용해 전체 경로를 한 번에 평탄화하고 병합
② Entry Map 사용
- 각 파일의 경로를 키로,
base
,ours
,theirs
의 Blob 객체를 값으로 가지는 O(1) 해시 테이블 구성
→ 반복 트리 탐색 없이 즉시 비교 가능
③ merge 정책 적용 분리
- merge 로직을 “데이터 수집 → merge 정책 적용 → 출력 생성”의 3단계로 분리
→ 코드 유지보수성 및 병렬 처리 가능성 향상
④ Conflict Marker 최적화
- 충돌 발생 시 생성되는 conflict marker (
<<<<<<<
,=======
,>>>>>>>
)의 처리를 전담하는 stream 처리 유닛 설계
→ 줄 단위 처리 효율 증가
3. ⚡ 성능 비교
🧪 Git 공식 벤치마크 (Linus Torvalds 발표 기준)
리포지토리 | recursive 시간 |
ort 시간 |
향상률 |
---|---|---|---|
Linux 커널 | 약 45초 | 약 5초 | 🔼 9배 이상 |
대형 모노레포 | 수 분 이상 | 수 초 | 🔼 수십 배 |
🔍 ort 전략은 특히 merge 시 충돌 없는 파일 수가 많은 경우 압도적인 성능을 보여줍니다.
4. ✅ merge 결과의 정확성
"merge 결과는 recursive와 100% 동일하게 보장한다."
— Junio Hamano, Git 메인테이너
- merge 결과는 완전히 동일하지만, 구현만 최적화됨
- 테스트는 Git 자체의 2만 개 이상의 테스트 케이스를 통과함
5. 💡 명령어 사용 예시
기본 사용 (Git 2.34 이상은 자동 적용)
git merge feature-branch
# Merge made by the 'ort' strategy.
명시적 사용
git merge -s ort feature-branch
비교 목적으로 recursive 사용
git merge -s recursive feature-branch
6. 🔄 ort vs recursive 비교 요약
항목 | recursive 전략 | ort 전략 (기본값) |
---|---|---|
merge 알고리즘 구조 | 재귀적 탐색 (deep tree walk) | 평탄화된 엔트리 기반 매핑 (flat entry map) |
성능 | 느림 (재귀 탐색, 중복 처리 많음) | 빠름 (최대 9배 이상) |
메모리 사용량 | 높음 | 효율적 |
충돌 처리 | 지원 (복잡한 코드) | 지원 (더 명확하고 빠른 처리) |
Git 기본 전략 | Git 2.33 이하 | Git 2.34 이상 (기본) |
7. 🧠 ort 전략이 실무에서 가지는 의미
장점 | 설명 |
---|---|
🧪 CI 속도 향상 | 대형 리포지토리 merge 속도 극적 향상 |
🤖 자동 병합에 최적 | conflict 없는 다중 브랜치 merge 시 큰 효과 |
📉 merge 충돌 줄이기 | tree-based entry 관리로 더 나은 충돌 감지 |
🔒 안정성 보장 | 기존 merge 전략과 결과 동일 + 테스트 커버리지가 매우 높음 |
✅ 결론
ort
는 Git merge 전략의 최신이자 최고의 기본 전략입니다.- 결과의 일관성은 유지하면서도, 속도와 자원 사용을 획기적으로 개선하였습니다.
- 실무에서 merge가 빈번한 대형 프로젝트에서 반드시 알아야 할 전략입니다.