4 पॉइंट द्वारा GN⁺ 2024-11-10 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • Git Merge Conflict को हल करने वाला एक टूल, जो फ़ाइल के भीतर के tree को समझकर दोनों पक्षों की ज़रूरतों को संतुलित तरीके से सुलझाता है
  • नई languages को declarative तरीके से जोड़ा जा सकता है
  • Git के default merge algorithm की जगह Mergiraf इस्तेमाल करने के लिए configure किया जा सकता है
    • merge, revert, rebase, cherrypick जैसे Git commands को बेहतर बनाता है
  • या Git के मूल व्यवहार को बनाए रखते हुए conflict होने पर Mergiraf को manually बुलाया जा सकता है.

Mergiraf के लक्ष्य

  • conflicts को छिपाना नहीं
    • syntax-aware merge heuristics कभी-कभी ज़रूरत से ज़्यादा आशावादी होकर मान सकती हैं कि conflict हल हो गया है
    • Mergiraf संदिग्ध स्थिति में फ़ाइल में conflict markers बनाए रखकर सबसे सुरक्षित स्थिति को संरक्षित करता है
    • अगर उसने सभी conflicts खुद हल कर दिए हों, तो mergiraf review command के ज़रिए mediation के काम की समीक्षा करने की सलाह देता है
    • अगर merge गलत लगता है, तो mergiraf report से उसे आसानी से report किया जा सकता है
  • interactive उपयोग के लिए पर्याप्त तेज़
    • giraffe 60 किलोमीटर प्रति घंटा की रफ़्तार से दौड़ सकता है
    • फ़ाइल के branched versions को merge करना अक्सर बिना conflict के रोज़मर्रा में चुपचाप होता रहता है
    • Mergiraf इतना तेज़ बनने की कोशिश करता है कि आपके काम में बाधा न आए
  • दूसरे तरीकों के लिए खुला
    • कई मामलों में line-based merge अच्छी तरह काम करता है और tree manipulation की ज़रूरत नहीं होती
    • अगर line-based merge में conflict नहीं है, तो Mergiraf वही merge लौटाता है (बहुत तेज़)
    • अगर line-based merge से duplicate keys बनती हैं, तो Mergiraf समस्या सुलझाने या conflict markers से उसे उभारने के लिए थोड़ा अतिरिक्त काम करता है

2 टिप्पणियां

 
2147483647 2024-11-11

जिराफ़ 60 किलोमीटर प्रति घंटा की रफ़्तार से दौड़ सकता है।

 
GN⁺ 2024-11-10
Hacker News टिप्पणियाँ
  • यह SemanticDiff जैसा काम कर रहा है, और tree-sitter तथा GumTree के उपयोग में समस्याएँ आ रही हैं

    • tree-sitter मुख्यतः syntax highlighting के लिए बनाया गया था, इसलिए कोड संशोधन के समय सटीक parsing कठिन होती है
    • GumTree तेज़ परिणाम देता है, लेकिन अक्सर गलत matching लौटाता है
    • Dijkstra-आधारित approach पर स्विच करने से बेहतर परिणाम मिल रहे हैं
  • Mergiraf का architecture सेक्शन यह गहराई से समझाता है कि यह जटिल टूल कैसे काम करता है

  • giraffe चुनने का कारण यह है कि वह अपनी ऊँचाई के कारण दूर तक देख सकता है, और स्थलीय स्तनधारियों में उसका दिल सबसे बड़ा होता है

  • कुछ insertions में क्रम महत्वपूर्ण नहीं है, इस दावे को लेकर आलोचनात्मक रुख है

    • language level पर क्रम महत्वपूर्ण न हो, लेकिन इंसानों के लिए एक खास क्रम महत्वपूर्ण हो सकता है
    • उदाहरण के लिए, Base struct Foo; struct Bar; के बीच Left impl Foo { } insert करता है और Right struct Baz; insert करता है, तो कंप्यूटर अंतर को पहचान नहीं पाता
  • Git merge driver के विकास को लेकर सकारात्मक रुख है

    • मानक 3-way merge language-aware नहीं होता, इसलिए समस्याएँ पैदा कर सकता है
    • Python कोड में अगर दो अलग branches अपनी-अपनी तरफ से अलग print हटाएँ, तो कोड अमान्य हो जाता है
  • जब टीमें समस्या के अनुसार base language को extend करती हैं, तो syntax-aware टूल्स को दिक्कत होती है

    • Rust macros या "go generate" use cases का उल्लेख किया गया है
  • यह automatic formatting से जुड़े conflicts सुलझाने में मददगार हो सकता है

    • यह जानने की जिज्ञासा है कि क्या यह code movement से पैदा semantic conflicts को detect कर सकता है
  • Mergiraf को आज़माने की योजना है, और इसे git-absorb के साथ उपयोग किया जा रहा है

    • अच्छा होगा अगर दोनों टूल्स पूरी तरह ठीक से काम करें या Git में आधिकारिक रूप से integrate हो जाएँ
  • Python support उपयोगी लगती है

    • Python का indentation-based AST अच्छी तरह काम करता हुआ लगता है
  • language support सीमित है, लेकिन उम्मीद है कि और भाषाओं का support जोड़ा जाएगा