4 điểm bởi GN⁺ 2024-11-10 | 2 bình luận | Chia sẻ qua WhatsApp
  • Công cụ giải quyết Git Merge Conflict, hiểu cây bên trong tệp để dung hòa hợp lý các yêu cầu từ cả hai phía
  • Có thể bổ sung ngôn ngữ mới theo cách khai báo
  • Có thể cấu hình để sử dụng Mergiraf thay cho thuật toán Merge mặc định của Git
    • Cải thiện các lệnh Git như merge, revert, rebase, cherrypick
  • Hoặc có thể giữ nguyên hành vi gốc của Git và gọi Mergiraf thủ công khi xảy ra xung đột.

Mục tiêu của Mergiraf

  • Không che giấu xung đột
    • Các heuristic hợp nhất nhận biết cú pháp đôi khi có thể quá lạc quan và cho rằng xung đột đã được giải quyết
    • Khi còn nghi ngờ, Mergiraf ưu tiên giữ lại dấu đánh dấu xung đột trong tệp để bảo toàn trạng thái tốt nhất
    • Nếu đã tự giải quyết toàn bộ xung đột, công cụ khuyến nghị xem lại phần dàn xếp bằng lệnh mergiraf review
    • Nếu việc hợp nhất có vẻ sai, có thể dễ dàng báo cáo bằng mergiraf report
  • Đủ nhanh để dùng tương tác
    • Hươu cao cổ có thể chạy với tốc độ 60 km/h
    • Việc hợp nhất các phiên bản phân nhánh của tệp thường diễn ra thường xuyên mà không bị nhận ra, miễn là không có xung đột
    • Mergiraf cố gắng đủ nhanh để không cản trở công việc
  • Cởi mở với các phương pháp khác
    • Trong nhiều trường hợp, hợp nhất dựa trên dòng hoạt động tốt và không cần thao tác trên cây
    • Nếu hợp nhất dựa trên dòng không có xung đột, Mergiraf sẽ trả về kết quả đó (rất nhanh)
    • Nếu hợp nhất dựa trên dòng tạo ra khóa trùng lặp, Mergiraf sẽ thực hiện thêm một chút xử lý để giải quyết vấn đề hoặc làm nổi bật bằng dấu đánh dấu xung đột

2 bình luận

 
2147483647 2024-11-11

Hóa ra hươu cao cổ có thể chạy với tốc độ 60 km/h.

 
GN⁺ 2024-11-10
Ý kiến trên Hacker News
  • Đang làm công việc tương tự SemanticDiff và gặp vấn đề khi dùng tree-sitter và GumTree

    • tree-sitter chủ yếu được tạo ra cho mục đích tô sáng cú pháp, nên khó phân tích cú pháp chính xác khi mã nguồn bị chỉnh sửa
    • GumTree cho kết quả nhanh nhưng thường xuyên trả về các cặp khớp sai
    • Đang chuyển sang cách tiếp cận dựa trên Dijkstra để có kết quả tốt hơn
  • Phần kiến trúc của Mergiraf giải thích rất sâu về cách một công cụ phức tạp vận hành

  • Lý do chọn hươu cao cổ là vì nó có thể nhìn xa nhờ chiều cao, và có trái tim lớn nhất trong số các loài động vật có vú trên cạn

  • Tỏ ra hoài nghi với lập luận cho rằng trong một số phép chèn thì thứ tự không quan trọng

    • Ở cấp độ ngôn ngữ, thứ tự có thể không quan trọng, nhưng với con người thì một trật tự cụ thể vẫn có thể quan trọng
    • Ví dụ, giữa Base struct Foo; struct Bar;, Left chèn impl Foo { } còn Right chèn struct Baz;, thì máy tính không nhận ra sự khác biệt
  • Có thiện cảm với việc phát triển merge driver cho Git

    • Cơ chế hợp nhất 3 chiều tiêu chuẩn không nhận biết ngôn ngữ nên có thể gây vấn đề
    • Trong mã Python, nếu hai nhánh khác nhau mỗi nhánh xóa một print khác nhau thì có thể tạo ra mã không hợp lệ
  • Công cụ nhận biết cú pháp gặp khó khăn khi nhóm mở rộng ngôn ngữ cơ sở để phù hợp với bài toán

    • Có nhắc đến macro của Rust và các trường hợp dùng "go generate"
  • Đây có thể là một ý tưởng hữu ích để xử lý xung đột liên quan đến tự động định dạng

    • Có người thắc mắc liệu nó có thể phát hiện các xung đột ngữ nghĩa phát sinh do việc di chuyển mã hay không
  • Dự định sẽ thử Mergiraf, hiện cũng đang dùng cùng với git-absorb

    • Sẽ rất tốt nếu cả hai công cụ hoạt động hoàn hảo hoặc được tích hợp chính thức vào Git
  • Hỗ trợ Python có vẻ sẽ hữu ích

    • AST dựa trên thụt lề của Python có vẻ sẽ hoạt động tốt
  • Hỗ trợ ngôn ngữ còn hạn chế, nhưng hy vọng sẽ được bổ sung thêm nhiều ngôn ngữ hơn