డిఫ్ అల్గారిథమ్లు ఎలా పనిచేస్తాయి
ఈ పేజీలోని ప్రతి డిఫ్ వ్యూ Myers అల్గారిథమ్ ద్వారా తయారవుతుంది — Eugene W. Myers యొక్క 1986 టెక్నిక్, ఇది O((N+M)D) సమయంలో రెండు టోకెన్ సీక్వెన్సుల మధ్య అత్యల్ప ఎడిట్ స్క్రిప్ట్ కనుగొంటుంది, ఇక్కడ D అనేది ఎడిట్ దూరం. అల్గారిథమ్ Longest Common Subsequence సమస్య చుట్టూ నిర్మించబడింది, మరియు ఇంజిన్ ఓపెన్-సోర్స్ jsdiff లైబ్రరీ ఉపయోగించి పూర్తిగా మీ బ్రౌజర్లో నడుస్తుంది.
- ఇన్పుట్లు టోకెనైజ్ చేయండి — పోల్చే ముందు, అల్గారిథమ్ ప్రతి ఇన్పుట్ను టోకెన్ల సీక్వెన్స్గా విభజిస్తుంది. లైన్ గ్రాన్యులారిటీ న్యూలైన్లపై విభజిస్తుంది; వర్డ్ గ్రాన్యులారిటీ వైట్స్పేస్ మరియు పంక్చుయేషన్ బౌండరీలపై విభజిస్తుంది; అక్షర గ్రాన్యులారిటీ ప్రతి Unicode కోడ్ పాయింట్ను తన స్వంత టోకెన్గా పరిగణిస్తుంది.
- ఎడిట్ గ్రాఫ్ నిర్మించండి — Myers అల్గారిథమ్ పోల్చికను 2D గ్రిడ్ ద్వారా పాత్గా మోడల్ చేస్తుంది, ఇక్కడ కుడివైపు కదలడం అంటే "అసలు నుండి తొలగించు", క్రిందికి కదలడం అంటే "మార్చినదానిపై జోడించు", మరియు వికర్ణంగా కదలడం అంటే "టోకెన్ రెండింటిలో మ్యాచ్ అవుతుంది". అల్గారిథమ్ అత్యంత చిన్న వికర్ణ-భారమైన మార్గం కనుగొంటుంది.
- LCS వెలికి తీయండి — అత్యల్ప మార్గంలో వికర్ణ కదలికలు Longest Common Subsequence ట్రేస్ చేస్తాయి — రెండు ఇన్పుట్లలో అదే సాపేక్ష క్రమంలో కనిపించే టోకెన్లు. LCS లోని ప్రతి టోకెన్ "మార్పు లేనిది"; మిగతా ప్రతిదీ చేర్పు లేదా తొలగింపు.
- ప్రీప్రాసెసింగ్ ఆప్షన్లు వర్తింపజేయండి — మీరు "కేసు విస్మరించండి" ఎనేబుల్ చేస్తే, LCS పాస్ చేయడానికి ముందు రెండు ఇన్పుట్లు లోయర్కేసు చేయబడతాయి, కాబట్టి "HELLO" మరియు "hello" ఒకటే లెక్కించబడతాయి. "వైట్స్పేస్ విస్మరించండి" బహుళ స్పేస్లు ఒక్కదానిలో సంక్షిప్తం చేస్తుంది. "ప్రతి లైన్ ట్రిమ్ చేయండి" పోల్చే ముందు ప్రతి లైన్ నుండి ముందు మరియు వెనక వైట్స్పేస్ తొలగిస్తుంది.
- ఎంచుకున్న వ్యూ రెండర్ చేయండి — అవుట్పుట్ అదే LCS ఫలితం మూడు విధాలుగా ప్రదర్శించబడుతుంది: సైడ్-బై-సైడ్ రెండు-కాలమ్ గ్రిడ్లో ఎడమ వైపు అసలు మరియు కుడి వైపు మార్పు చేసింది చూపిస్తుంది. యూనిఫైడ్
git diffఅవుట్పుట్ వలే − మరియు + ప్రిఫిక్స్ లైన్లతో ఒక్క కాలమ్ చూపిస్తుంది. ఇన్లైన్ తొలగింపులు ఎరుపు స్ట్రైక్త్రూగా మరియు చేర్పులు అదే టెక్స్ట్ ఫ్లోలో ఆకుపచ్చ అండర్లైన్గా చూపిస్తుంది. - సారాంశ స్ట్రిప్ లెక్కించండి — రెండర్ చేసిన తర్వాత, టూల్ జోడించిన, తొలగించిన, మరియు మార్పు లేని టోకెన్లు ఎన్ని ఉన్నాయో లెక్కిస్తుంది, తర్వాత మార్పు లేని టోకెన్ల నిష్పత్తిని రెండు ఇన్పుట్ పొడవుల పెద్దదానికి సారూప్యతగా లెక్కిస్తుంది. 100% సారూప్యత అంటే ప్రీప్రాసెసింగ్ తర్వాత ఇన్పుట్లు ఒకటే.
డిఫ్ చెకర్ ఎందుకు ఉపయోగించాలి
- Git క్లయింట్ లేకుండా కోడ్ రివ్యూ — కాన్ఫిగ్ ఫైల్, SQL మైగ్రేషన్, లేదా షెల్ స్క్రిప్ట్ యొక్క రెండు వెర్షన్లు పేస్ట్ చేయండి మరియు రెపో క్లోన్ చేయకుండా, బ్రాంచ్లు మార్చకుండా, లేదా CI పైప్లైన్ కోసం వేచి ఉండకుండా ఏమి మారిందో చూడండి. పెయిర్ ప్రోగ్రామింగ్ సమయంలో త్వరిత రివ్యూలకు, కాంట్రాక్టర్ హ్యాండ్ఆఫ్లకు, మరియు పూర్తిగా వెర్షన్ కంట్రోల్ కంటే ముందున్న లెగసీ కోడ్బేస్లకు ఉపయోగకరం.
- కాంట్రాక్ట్ మరియు డాక్యుమెంట్ రెడ్లైన్లు — వర్డ్-లెవల్ డిఫ్ Word యొక్క ట్రాక్ చేంజెస్ ప్యానెల్ కంటే వేగంగా కాంట్రాక్ట్ డ్రాఫ్ట్ల మధ్య ఏ పదాలు మారాయో చూపిస్తుంది. మొదటి డ్రాఫ్ట్ నుండి A క్లాజ్ మరియు ఎగ్జిక్యూట్ చేసిన కాపీ నుండి B క్లాజ్ పేస్ట్ చేయండి మరియు మారిన సరైన ఫ్రేజ్ వద్ద సబ్స్టిట్యూషన్ రెడ్-ఆన్-గ్రీన్లో వెలిగిపోతుంది.
- వ్యాసం మరియు డ్రాఫ్ట్ రివిజన్లు — ఒక మొదటి డ్రాఫ్ట్ను ఎడిట్ చేసిన వెర్షన్తో పోల్చే రచయితలు ప్రతి సబ్స్టిట్యూషన్, ఇన్సర్షన్, మరియు కట్ చూడడానికి వర్డ్ గ్రాన్యులారిటీకి మారవచ్చు, రెండు కాపీలు మళ్ళీ చదవకుండా. అదే వర్క్ఫ్లో అనువాదకులకు, ఎడిటర్లకు, మరియు జర్నలిజం టీమ్లకు పనిచేస్తుంది.
- లాగ్ మరియు కాన్ఫిగ్ పోల్చిక — రెండు సర్వర్ కాన్ఫిగ్ స్నాప్షాట్లు, రెండు cron షెడ్యూల్లు, లేదా రెండు
ps auxఅవుట్పుట్లు పోల్చే సిసాడ్మిన్లు 200-లైన్ ఫైల్లో మార్చిన ఒక్క పరామీటర్ సెకన్లలో కనుగొనడానికి లైన్ గ్రాన్యులారిటీ ఉపయోగించవచ్చు.
సాధారణ అప్లికేషన్లు
టెక్స్ట్ డిఫ్ రైటింగ్, డెవలప్మెంట్, మరియు ఆపరేషన్స్ పనిలో ప్రతి ఎడిట్ సైకిల్ చివరలో కనిపిస్తుంది.
- పుల్ రిక్వెస్ట్ రివ్యూ: బ్రాంచ్ చెకవుట్ చేసే ఓవర్హెడ్ లేకుండా, అప్రూవ్ చేయడానికి ముందు లాజిక్ మార్పు అర్థం చేసుకోవడానికి రెండు ఫంక్షన్ ఇంప్లిమెంటేషన్లు సైడ్ బై సైడ్ పేస్ట్ చేయండి.
- ఇంటర్నేషనలైజేషన్ QA: అనువాదకుడు ప్రవేశపెట్టిన ఇన్సర్షన్లు, ఒమిషన్లు, లేదా టర్మినాలజీ స్వాప్లు కనుగొనడానికి వర్డ్ లెవల్ వద్ద ఇంగ్లీష్ సోర్స్ స్ట్రింగ్ను దాని అనువాదిత సమానంతో పోల్చండి.
- ఇంసిడెంట్ అనాలిసిస్: అవుటేజ్కు ముందున్న కాన్ఫిగరేషన్ మార్పు వేరు చేయడానికి లైన్ లెవల్ వద్ద రెండు Kubernetes మానిఫెస్ట్ స్నాప్షాట్లు లేదా రెండు "docker inspect" అవుట్పుట్లు డిఫ్ చేయండి.
పని చేసిన ఉదాహరణ
ఐదు-లైన్ సర్వర్ కాన్ఫిగ్ తీసుకోండి. అసలు: host=localhost, port=5432, dbname=app_db, user=app, password=secret. మార్పు చేసినది: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. లైన్ గ్రాన్యులారిటీ మరియు సైడ్-బై-సైడ్ వ్యూతో, లైన్ 1 ఎడమ వైపు ఎరుపు (host=localhost) మరియు కుడి వైపు ఆకుపచ్చ (host=db.prod.example.com) చూపిస్తుంది, లైన్ 4 ఎరుపు (user=app) మరియు ఆకుపచ్చ (user=app_prod) చూపిస్తుంది, మరియు లైన్లు 2, 3, మరియు 5 రెండు వైపుల మారకుండా ఉంటాయి. సారాంశ స్ట్రిప్ 2 చేర్పులు, 2 తొలగింపులు, 3 మారనివి, మరియు 60% సారూప్యత రిపోర్ట్ చేస్తుంది.
ఇది నా బ్రౌజర్లో నడుస్తుందా?
అవును. పూర్తి డిఫ్ కంప్యుటేషన్ పేజీతో లోడ్ అయిన ఓపెన్-సోర్స్ jsdiff లైబ్రరీ ఉపయోగించి క్లయింట్-సైడ్లో నడుస్తుంది. మీరు టైప్ చేసేది, పేస్ట్ చేసేది, లేదా పోల్చేది ఏ సర్వర్కూ పంపబడదు. మీరే వెరిఫై చేయవచ్చు: బ్రౌజర్ DevTools తెరవండి, నెట్వర్క్ ట్యాబ్ కి మారండి, లాగ్ క్లియర్ చేయండి, పోల్చండి క్లిక్ చేయండి, మరియు పోల్చిక దశకు శూన్య నెట్వర్క్ రిక్వెస్ట్లు ఫైర్ అవుతాయని నిర్ధారించండి.
సారూప్యత శాతం అంటే ఏమిటి?
సారూప్యత మారని టోకెన్లు / max(అసలు మొత్తం టోకెన్లు, మార్పు చేసిన మొత్తం టోకెన్లు) గా లెక్కించబడుతుంది. 100% స్కోర్ అంటే మీ ప్రీప్రాసెసింగ్ ఆప్షన్లు వర్తింపజేసిన తర్వాత రెండు ఇన్పుట్లు ఒకటే. 0% స్కోర్ అంటే ఇన్పుట్ల మధ్య ఒక్క టోకెన్ కూడా షేర్ కాలేదు.
నేను JSON / YAML / XML సెమాంటిక్గా డిఫ్ చేయగలనా?
ఈ టూల్లో కాదు. ఇది టెక్స్ట్-లెవల్ డిఫ్, కాబట్టి JSON లేదా XML యొక్క వైట్స్పేస్-మాత్రమే రీఫార్మాటింగ్ డేటా లాజికల్గా ఒకటే అయినప్పటికీ చాలా మార్పులు చూపిస్తుంది. JSON లో ఆబ్జెక్ట్ కీలు రీఆర్డర్ చేయడం కూడా మార్పులుగా చూపిస్తుంది. నిజమైన సెమాంటిక్ డిఫ్ కోసం, ఇక్కడ పేస్ట్ చేయడానికి ముందు రెండు ఇన్పుట్లను అదే ఇండెంటేషన్ మరియు కీ ఆర్డర్ కి నార్మలైజ్ చేయండి.
యూనిఫైడ్ మరియు సైడ్-బై-సైడ్ వ్యూలు ఎలా భిన్నంగా ఉంటాయి?
సైడ్-బై-సైడ్ రెండు కాలమ్లు రెండర్ చేస్తుంది: ఎడమ వైపు అసలు మరియు కుడి వైపు మార్పు చేసిన వెర్షన్, ఎడమ వైపు తొలగించిన లైన్లు ఎరుపులో మరియు కుడి వైపు జోడించిన లైన్లు ఆకుపచ్చలో. యూనిఫైడ్ తొలగించిన లైన్లకు − ప్రిఫిక్స్ మరియు ఎరుపు నేపథ్యంతో, జోడించిన లైన్లకు + ప్రిఫిక్స్ మరియు ఆకుపచ్చ నేపథ్యంతో ఒక్క కాలమ్ రెండర్ చేస్తుంది — git diff మీ టెర్మినల్కు ప్రింట్ చేసే అదే లేఅవుట్. ఫలితాన్ని పాచ్ ఫైల్గా కాపీ చేయాలంటే యూనిఫైడ్ ఉపయోగించండి.
ఎడమ వైపు అసలు, కుడి వైపు మార్పు చేసిన వెర్షన్ పేస్ట్ చేయండి, వ్యూ మరియు గ్రాన్యులారిటీ ఎంచుకోండి, మరియు పోల్చిక మిల్లీసెకన్లలో కనిపిస్తుంది. లైవ్ మోడ్ ఆన్ చేయండి మరియు మీరు ఏ వైపు అయినా ఎడిట్ చేస్తున్నప్పుడు ప్రతి కీస్ట్రోక్పై డిఫ్ మళ్ళీ నడుస్తుంది. ఫలితాన్ని స్టాండర్డ్ యూనిఫైడ్ .patch ఫైల్గా డౌన్లోడ్ చేయండి. అప్లోడ్ లేదు, అకౌంట్ లేదు, వెండర్ API కీ లేదు, కోటా లేదు.