4P by neo 26일전 | favorite | 댓글 2개
  • Git Merge Conflict를 해결하는 도구로, 파일 내 트리를 이해하여 양측의 요구를 조화롭게 해결
  • 새로운 언어를 선언적으로 추가할 수 있음
  • Git의 기본 Merge 알고리듬 대신 Mergiraf를 사용하도록 설정 가능
    • merge, revert, rebase, cherrypick 등의 Git 명령어를 향상시킴
  • 또는 Git의 원래 동작을 유지하면서 충돌 발생 시 수동으로 Mergiraf를 호출할 수 있음.

Mergiraf의 목표

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

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

Hacker News 의견
  • 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가 잘 작동할 것으로 보임
  • 언어 지원이 제한적이지만, 더 많은 언어 지원이 추가되기를 바람