# Mergiraf - Git용 구문 인식 Merge 처리기

> Clean Markdown view of GeekNews topic #17673. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17673](https://news.hada.io/topic?id=17673)
- GeekNews Markdown: [https://news.hada.io/topic/17673.md](https://news.hada.io/topic/17673.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-10T09:42:39+09:00
- Updated: 2024-11-10T09:42:39+09:00
- Original source: [mergiraf.org](https://mergiraf.org/)
- Points: 4
- Comments: 2

## Topic Body

- Git Merge Conflict를 해결하는 도구로, 파일 내 트리를 이해하여 양측의 요구를 조화롭게 해결  
- 새로운 언어를 선언적으로 추가할 수 있음  
- Git의 기본 Merge 알고리듬 대신 Mergiraf를 사용하도록 설정 가능  
  - `merge`, `revert`, `rebase`, `cherrypick` 등의 Git 명령어를 향상시킴  
- 또는 Git의 원래 동작을 유지하면서 충돌 발생 시 수동으로 Mergiraf를 호출할 수 있음.  
  
### Mergiraf의 목표  
- 충돌을 숨기지 않음  
  - 구문을 인식하는 머지 휴리스틱은 때로는 지나치게 낙관적으로 충돌이 해결되었다고 간주할 수 있음  
  - Mergiraf는 의심스러운 경우 파일에 충돌 마커를 유지하는 쪽으로 최선의 상태를 보존  
  - 모든 충돌을 자체적으로 해결했다면 `mergiraf review` 명령을 통해 중재 작업을 검토하도록 권장  
  - 병합이 잘못된 것처럼 보이면 `mergiraf report`로 쉽게 보고할 수 있음  
- 대화식 사용에 충분할 만큼 빠름  
  - 기린은 시속 60킬로미터로 달릴 수 있음  
  - 파일의 분기 버전을 병합하는 작업은 충돌이 없는 한 종종 눈치채지 못한 채 일상적으로 발생함   
  - Mergiraf는 작업을 방해하지 않도록 빨라지려고 노력함  
- 다른 방법에 개방적임  
  - 많은 경우 행 기반 병합은 잘 작동하며 트리 조작이 필요하지 않음  
  - 행 기반 병합에 충돌이 없으면 Mergiraf는 해당 병합을 반환함(매우 빠름)  
  - 행 기반 병합으로 인해 중복 키가 생성되면 Mergiraf는 문제를 해결하거나 충돌 마커로 강조 표시하기 위해 약간의 추가 작업을 수행함

## Comments



### Comment 31123

- Author: 2147483647
- Created: 2024-11-11T10:47:24+09:00
- Points: 3

기린은 시속 60 킬로미터로 달릴 수 있군요

### Comment 31093

- Author: neo
- Created: 2024-11-10T09:42:39+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42093756) 
- SemanticDiff와 유사한 작업을 하고 있으며, tree-sitter와 GumTree 사용에서 문제를 겪고 있음
  - tree-sitter는 주로 구문 강조를 위해 작성되어, 코드 수정 시 정확한 구문 분석이 어려움
  - GumTree는 빠른 결과를 제공하지만, 잘못된 매칭을 자주 반환함
  - Dijkstra 기반 접근 방식으로 전환하여 더 나은 결과를 얻고 있음

- Mergiraf의 아키텍처 섹션이 복잡한 도구의 작동 방식을 깊이 있게 설명하고 있음

- 기린을 선택한 이유는 높이로 인해 멀리 볼 수 있고, 육상 포유류 중 가장 큰 심장을 가졌기 때문임

- 일부 삽입에서 순서가 중요하지 않다고 주장하는 것에 대해 비판적임
  - 언어 수준에서는 순서가 중요하지 않을 수 있지만, 인간에게는 특정 순서가 중요할 수 있음
  - 예시로 Base `struct Foo; struct Bar;` 사이에 Left가 `impl Foo { }`를 삽입하고 Right가 `struct Baz;`를 삽입하는 경우, 컴퓨터는 차이를 인식하지 못함

- Git의 병합 드라이버 개발에 긍정적임
  - 표준 3-way 병합은 언어를 인식하지 못해 문제를 일으킬 수 있음
  - Python 코드에서 두 가지 다른 브랜치가 각각 다른 `print`를 삭제하면 유효하지 않은 코드가 됨

- 팀이 문제에 맞게 기본 언어를 확장할 때 구문 인식 도구가 문제를 겪음
  - Rust의 매크로나 "go generate" 사용 사례를 언급함

- 자동 포맷팅 관련 충돌 해결에 도움이 될 수 있는 아이디어임
  - 코드 이동으로 인해 발생하는 의미적 충돌을 감지할 수 있는지 궁금해함

- Mergiraf를 시도해볼 예정이며, git-absorb와 함께 사용 중임
  - 두 도구가 완벽하게 작동하거나 Git에 공식적으로 통합되면 좋겠음

- Python 지원이 유용할 것 같음
  - Python의 들여쓰기 기반 AST가 잘 작동할 것으로 보임

- 언어 지원이 제한적이지만, 더 많은 언어 지원이 추가되기를 바람
