Git bisect: మీ కోడ్‌లోని బగ్‌ను ఎలా గుర్తించాలి?



Git bisect పై ఈ వ్యాసం, బైనరీ సెర్చ్ అల్గోరిథం ఉపయోగించి బగ్‌ను పరిచయం చేసే మొదటి చెడు కమిట్‌ను గుర్తించడంలో ‘git bisect’ ఆదేశం ఎలా సహాయపడుతుందో తెలుసుకోండి.

నా కోడ్ నిన్నటి వరకు బాగా పనిచేస్తోంది, కాని రిమోట్ రిపోజిటరీ నుండి ఇటీవల లాగడం ద్వారా కోడ్ విచ్ఛిన్నమైంది !!!

మీరు ఇలాంటి పరిస్థితిలో ఉంటే మరియు తెలియదు ఏమి మార్పు కోడ్ విరిగింది లేదా who చాలా మంది సహాయకులలో కలిగి ఉంది ఇది బగ్ / ఫీచర్ , అప్పుడు git bisect మీ మార్గం. కాబట్టి, జిట్ బైసెక్ట్‌పై ఈ వ్యాసంలో మీరు ఎలా నేర్చుకుంటారు ‘git bisect‘కమాండ్ వస్తుంది బైనరీ సెర్చ్ అల్గోరిథం ఉపయోగించి బగ్‌ను పరిచయం చేసే మొదటి చెడు కమిట్‌ను గుర్తించడంలో రెస్క్యూ.

ఈ వ్యాసంలో పొందుపరిచిన అంశాలు ఈ క్రింది విధంగా ఉన్నాయి:





Git bisect ను ఎందుకు ఉపయోగించాలి?

ప్రతి చిన్న మార్పుకు మీరు అనేక కమిట్‌లను సృష్టించేటట్లు ఎటువంటి సందేహం లేదు . అటువంటి దృష్టాంతంలో, కోడ్‌ను డీబగ్ చేయడం చాలా శ్రమతో కూడుకున్న పని అవుతుంది, ఎందుకంటే మీరు వర్కింగ్ కోడ్‌ను పరీక్షించడానికి మరియు బగ్‌ను గుర్తించడానికి ప్రాజెక్ట్ స్నాప్‌షాట్ యొక్క ప్రతి పునర్విమర్శకు మానవీయంగా తిరిగి వెళ్లాలి. ఇప్పుడు, ఇది మరింత ఎక్కువ అవుతుంది క్లిష్టమైన లీడ్ పాయింట్ లేకుండా తనిఖీ చేయడానికి మీకు ఇతరుల పని ఉన్నప్పుడు, ప్రతి ఒక్కరూ తమ తప్పులను శుభ్రం చేయమని అభ్యర్థించడం కూడా చాలా సాధ్యమయ్యేది కాదు.
అలాగే, మీరు ఈ ప్రక్రియలో అనేక ‘ఫీచర్’ (లేదా హాట్‌ఫిక్స్) శాఖలను కూడా సృష్టించవచ్చు మరియు విస్మరించవచ్చు మరియు అభివృద్ధి యొక్క ప్రధాన మార్గం నుండి తప్పుకునేటప్పుడు సమయం మరియు కృషిని వృధా చేయవచ్చు.



కాబట్టి, అటువంటి దృశ్యాలను నివారించడానికి, మీరు వీటిని ఉపయోగించవచ్చుgit bisectచెడ్డ ప్రాజెక్ట్ పునర్విమర్శ (లేదా స్నాప్‌షాట్) ను కనుగొని చివరికి దాన్ని పరిష్కరించడానికి ఆదేశించండిgit రివర్ట్ఆదేశం.

‘గిట్ బైసెక్ట్’ శోధన ఎలా ఉంటుంది?



ఈ ఆదేశం విభజిస్తుంది (విభజిస్తుంది) మధ్య మీ చరిత్ర మంచిది ఇంకా చెడు నిబద్ధత పరిధి. ఇది మీ చూపుతుంది ప్రస్తుత ప్రాజెక్ట్ రాష్ట్రం ఒక మధ్య శ్రేణి నిబద్ధత స్నాప్‌షాట్. Git bisect ఆదేశం అప్పుడు కదులుతుంది ప్రతి కమిట్ ఐడి ఈ పరిధి మధ్య విరామం మిమ్మల్ని అనుమతించడానికి ప్రతి స్నాప్‌షాట్ వద్ద కోడ్‌ను పరీక్షించండి . బగ్ ఉన్నట్లయితే, మీరు నిబద్ధతను ఇలా ప్రకటిస్తారు చెడు, కాకపోతే మంచిది శోధన ముగియకపోతే.

సింటాక్స్

git bisect

Git bisect ను బాగా అర్థం చేసుకోవడానికి, కారులో ఉపయోగించడానికి సాధారణ నావిగేషన్ అనువర్తనం కోసం కోడ్‌ను అభివృద్ధి చేసే ప్రాజెక్ట్‌ను సృష్టించండి.

ప్రారంభ ప్రాజెక్ట్ సెటప్

కారులో ఉపయోగించడానికి సాధారణ నావిగేషన్ అనువర్తనం కోసం కోడ్‌ను అభివృద్ధి చేసే ప్రాజెక్ట్‌ను సృష్టించడానికి, మీరు ఈ క్రింది దశలను అనుసరించవచ్చు:

దశ 1: మీ $ HOME ఫోల్డర్‌లో క్రొత్త డైరెక్టరీని సృష్టించండి:

cd $ HOME mkdir my_nav_app

దశ 2: క్రొత్త డైరెక్టరీకి నావిగేట్ చేయండి:

cd $ my_nav_app

దశ 3: నా గిట్‌హబ్ పేజీ నుండి ప్రాజెక్ట్‌ను డౌన్‌లోడ్ చేయడానికి క్లోన్ చేయండి:

git clone https://github.com/divyabhushan/my_nav_app.git

ఇప్పుడు, కమాండ్ ముద్రించినట్లుగా ప్రాజెక్ట్ డైరెక్టరీలు మరియు ఫైల్స్ లేఅవుట్ను అర్థం చేసుకుందాం:ls -lTR

సోర్స్ కోడ్ లేఅవుట్ - Git Bisect - Edureka

తరువాత, ఈ కోడ్‌ను రూపొందించడానికి నేను చేసిన కమిట్‌లను వీక్షించడానికి ప్రాజెక్ట్ హిస్టరీ జర్నల్‌ను చూద్దాం-

ఉదాహరణకు, ఒక సాధారణ జిట్ లాగ్ కమాండ్ చరిత్రను వివరంగా ముద్రిస్తుంది, అయినప్పటికీ, చరిత్రను అందంగా ఫార్మాట్ చేయడానికి మరియు అనుకూలీకరించడానికి నేను ఇష్టపడుతున్నాను. తద్వారా, మనం చేద్దాం అలియాస్ పేరును సెట్ చేయండి - ‘హిస్ట్’ ఉపయోగించి git అలియాస్ క్రింద చూపిన విధంగా ఆదేశం:

git alias.hist 'log --pretty = format:'% C (పసుపు)% h% Creset% ad | % C (ఆకుపచ్చ)% s% క్రెడిట్% C (ఎరుపు)% d% క్రెడిట్% C (నీలం) [% an] '--graph --decorate --date = short'

ఇప్పుడు, ‘మాస్టర్’ బ్రాంచ్‌లోని ప్రధాన అభివృద్ధికి అంతరాయం కలిగించకుండా ఉండటానికి, నేను ఈ బగ్ పరిష్కార లక్షణాన్ని ప్రత్యేక శాఖలో నిర్వహించబోతున్నాను. అలా చేయడానికి, కింది ఆదేశాల సమితిని అనుసరించండి:

  • శాఖను సృష్టించండి ‘దేవ్’: [మాస్టర్] $git branch dev
  • శాఖ ‘దేవ్’ కి మారండి: $git checkout dev
  • చరిత్ర లాగ్లను జాబితా చేయండి: [dev] $గో హిస్ట్[గమనిక: ‘అలియాస్’ ఆదేశం ఇక్కడ ఉపయోగించబడింది]

ఇంకా, నేను తెలిసిన చివరి మంచి నిబద్ధతను హైలైట్ చేసాను, దీనిలో నా స్క్రిప్ట్ test హించిన పరీక్ష కేసు ఫలితాలతో బాగా పనిచేసింది, ఈ కమిట్ స్నాప్‌షాట్ ట్యాగ్ చేయబడింది v1.0 గా.

కాబట్టి, ఇప్పుడు మన చివరి మంచి నిబద్ధత మనకు తెలుసు కాబట్టి, ‘గిట్ బైసెక్ట్’ పై ఈ వ్యాసంలో ముందుకు వెళ్లి, అప్లికేషన్‌ను పరీక్షిద్దాం.

అప్లికేషన్ పరీక్షించండి

స్క్రిప్ట్‌ను ఇలా అమలు చేయండి - $./scripts/myApplication.sh[మొదటిసారి పరీక్షించడం]



స్పష్టంగా, నా ప్రస్తుత ప్రాజెక్ట్ స్థితి ఉంది లోపం , మరియు ఈ మార్పును ప్రవేశపెట్టిన కమిట్‌లో నేను ఏ మార్పు చేశానో నాకు తెలియదు. కాబట్టి, git bisect పై ఈ వ్యాసంలో, చెడు నిబద్ధతను ఎలా గుర్తించాలో చూద్దాం.

చెడు కమిట్ యొక్క గుర్తింపు

చెడు కమిట్ కోసం తనిఖీ ప్రారంభించడానికి, మీరు ఈ క్రింది దశలను అనుసరిస్తారు:

  • Bisect ఆదేశాన్ని ప్రారంభించండి :git bisect start
  • చెడు కమిట్ ఐడిని పేర్కొనండి: git bisect bad HEADలేదాgit bisect c5b3ca8
  • చివరిగా తెలిసిన-మంచి-కమిట్ ఐడిని పేర్కొనండి: git bisect good v1.0లేదాgit bisect 93859d8

ఇది కమిట్ ఐడికి మమ్మల్ని తీసుకువచ్చే మంచి మరియు చెడు కమిట్‌ల మధ్య కట్టుబడి చరిత్ర పరిధిని విభజిస్తుంది: f61a7e8

అందువల్ల, కమాండ్ ఈ కమిట్ ఐడిలో ఉన్నట్లుగా ప్రాజెక్ట్ వెర్షన్‌ను తనిఖీ చేసింది. ఇప్పుడు, మనము ముందుకు వెళ్లి మన దరఖాస్తును మళ్ళీ పరీక్షించుకుందాం.

అనువర్తనాన్ని అమలు చేయడానికి ఆదేశం : $./scripts/myApplication.sh[రెండవసారి పరీక్షించడం]


అప్లికేషన్ నుండి ఆమోదించింది ఈ నిబద్ధతలో, ఈ నిబద్ధత ఖచ్చితంగా చెడ్డ నిబద్ధత కాదు. కాబట్టి, తరువాత, మీరు అదే విధంగా bisect ఆదేశానికి తెలియజేయాలి - $git bisect మంచిది


ఇప్పుడు, ఇది చూపిన విధంగా శోధన ఫలితాన్ని శ్రేణి యొక్క మొదటి భాగంలో మరింత తగ్గిస్తుంది -


మీ దరఖాస్తును మళ్లీ పరీక్షించండి - ఆదేశం: $./scripts/myApplication.sh[మూడవసారి పరీక్షించడం]


కాబట్టి, మేము పైన చెప్పినట్లుగా లోపం చూస్తున్నందున, ఇది చెడ్డ కమిట్.

Bisect ఆదేశాన్ని తెలియజేయండి, run రన్ చేయండిgit bisect చెడు


ఇది శోధనను మరింత తగ్గిస్తుంది మరియు చివరి నీలం చుట్టుముట్టిన మధ్య పునర్విమర్శకు మిమ్మల్ని తీసుకువస్తుంది: a6ac769

జావాలో సింగిల్టన్ క్లాస్ ఎలా వ్రాయాలి

కాబట్టి, అదే ఆదేశాన్ని ఉపయోగించి చివరిసారిగా నా దరఖాస్తును పరీక్షిస్తాను: $./scripts/myApplication.sh[నాల్గవసారి పరీక్షించడం]

ఇప్పుడు, అప్లికేషన్ మళ్లీ విఫలమైనందున, ఇది ఇప్పటికీ చెడ్డ కమిట్. కాబట్టి, కింది ఆదేశాన్ని అమలు చేద్దాం:

ఆదేశాన్ని అమలు చేయండి: git bisect చెడు

చెడు కమిట్ కనుగొనబడింది

ఇది చెడుగా మిగిలి ఉన్న చివరి నిబద్ధతను మాత్రమే ముగించింది-


కాబట్టి కోడ్ విరిగిపోయిన చోట మీకు తెలుసు. తర్వాత ఏంటి?

ఏ ఫైల్‌లో బగ్ ఉందో అర్థం చేసుకోండి

ఈ సందర్భంలో, అవుట్పుట్ మీకు కనీస సమాచారాన్ని ఇస్తుంది కమిట్ ఐడి , రచయిత పేరు , ఇంకా రచించిన తేదీ తో పాటు సందేశానికి పాల్పడండి ఇంకా మార్గం అది సవరించబడింది.

మీరు మరింత డీబగ్ చేయాలనుకుంటే మీరు అవసరం చదవండి ది ఐడి ఆబ్జెక్ట్‌కు పాల్పడండి .

ఆదేశం: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

ఇది కమిట్ ఆబ్జెక్ట్‌ను చదివి లాగ్ సందేశాన్ని మరియు వచన తేడాను ముద్రిస్తుంది.

ప్రతి పంక్తిని ఏ రచయిత ఎలా మార్చారు మరియు ఏ రచయిత చేత మార్చబడిందో విశ్లేషించడానికి మీరు ‘జిట్ బ్లేమ్’ ఆదేశాన్ని ఉపయోగించవచ్చు, ఆదేశాన్ని ఇలా అమలు చేయండి:git నింద కోడ్ / develop_nav.sh

శోధనను ఆపండి

శోధనను ఆపడానికి, కింది ఆదేశాన్ని ఉపయోగించండి:

ఆదేశం: git bisect reset


అందువల్ల, బైసెక్షన్ ప్రక్రియ ఆగిపోయింది మరియు మీరు శోధనను ప్రారంభించిన శాఖకు తిరిగి వచ్చారు. ఇప్పుడు, తదుపరి దశ కోడ్‌ను పరిష్కరించడం లేదా డీబగ్ చేయడం.

కోడ్‌ను ఎలా పరిష్కరించాలి / డీబగ్ చేయాలి?

సరే, ప్రాజెక్ట్ యొక్క ప్రస్తుత స్థితిని పరిష్కరించడానికి మీరు చేయగలిగే కొన్ని పరిష్కారాలు ఉన్నాయి, ఇప్పుడు మీరు బగ్‌ను మొదటి స్థానంలో తీసుకువచ్చిన నిబద్ధతను గుర్తించారు.
అయితే, మీరు a పై నిబద్ధతను మార్చుకుంటే భాగస్వామ్య రిపోజిటరీ ఇది ఉత్తమం తిరిగి ‘ఉపయోగించి మార్పు git రివర్ట్ ‘ఆదేశం.

టాస్క్: పేర్కొన్న చెడు కమిట్ చేసిన మార్పులను తిరిగి మార్చండి

ఆదేశం: git రివర్ట్ a6ac769

ఫలితంగా, ఈ కమిట్ చేసిన మార్పులను తిరిగి మార్చడం 2 పనులు చేసింది:

  • ఇది చివరి 3 జోడించిన పంక్తులను తొలగించింది (ఆకుపచ్చ రంగులో సూచించబడింది) మరియు తొలగించిన పంక్తిని (ఎరుపు రంగులో సూచించబడింది) తిరిగి జోడించింది. (a6ac769 యొక్క రివర్స్)
  • రివర్ట్ సందేశ సమాచారంతో అదనపు నిబద్ధతను సృష్టించారు

'రివర్ట్ కమాండ్ మీరు అసలు కమిట్ నుండి తిరిగి వచ్చిన మార్పును ట్రాక్ చేయడాన్ని కూడా సులభతరం చేస్తుంది'

ఉపయోగించడానికి ‘చూపించు’ ఆబ్జెక్ట్ ఐడిని చదవడానికి మళ్ళీ ఆదేశించండి,

ఆదేశం: git show 801f029

ఇప్పుడు, ముందుకు వెళ్లి అప్లికేషన్ పరీక్షించండి. ఇది సరిగ్గా అమలు అవుతుంది.

ఆదేశం: $./scripts/myApplication.sh

దీనికి విరుద్ధంగా, మీరు చరిత్ర నుండి చెడు నిబద్ధతను తొలగించాలనుకుంటే:

  • మీరు ‘ git రీసెట్ ‘తో ఆదేశించండి“- హార్డ్”ఎంపిక (భాగస్వామ్య రిపోజిటరీలో సిఫారసు చేయనప్పటికీ).

  • ‘ఉపయోగించి ఒకే ఫైల్ యొక్క మునుపటి సంస్కరణను చూడండిgit చెక్అవుట్‘తో ఆదేశించండి‘-' ఎంపిక.

ఇది గమనించాలి, మీరు మార్పులను రిమోట్ రిపోజిటరీకి నెట్టే వరకు ఇది మీ స్థానిక రిపోజిటరీలో మాత్రమే మార్పులు చేస్తుంది. కొన్ని మార్పులు కొత్త కమిట్ ఆబ్జెక్ట్ ఐడిని సృష్టిస్తాయి కాబట్టి, అటువంటి సందర్భాలలో రిమోట్ రిపోజిటరీకి సాధారణ పుష్ తిరస్కరించబడుతుంది, ఎందుకంటే చరిత్ర భిన్నంగా ఉంటుంది. మీరు తప్పనిసరిగా ‘ git push ‘తో ఆదేశించండి‘--force' ఎంపిక.

‘మాస్టర్’ శాఖను నవీకరించండి

నేను నా ‘దేవ్’ బ్రాంచ్‌లో బగ్‌ను పరిష్కరించినప్పుడు, నేను ఇప్పుడు ఈ మార్పును ‘మాస్టర్’ బ్రాంచ్‌లో కూడా విలీనం చేయవచ్చు-

  • ‘మాస్టర్’ కి మారండి, ఆదేశం:git చెక్అవుట్ మాస్టర్
  • ఇటీవలి నవీకరణలను ‘మూలం / మాస్టర్’ నుండి ‘మాస్టర్’, ఆదేశం:git పుల్ మూలం
  • ‘dev’ మార్పులను విలీనం చేయండి, ఆదేశం:git విలీనం జెయింట్

ఏదేమైనా, రిమోట్ రిపోజిటరీ నుండి ఎక్కువ కమిట్లు ఉంటే మీ విలీనం విభేదాలను సృష్టించవచ్చు. విభేదాలను పరిష్కరించండి మరియు విలీనంతో కొనసాగండి.
చివరగా, ఈ ఉదాహరణలో ‘దేవ్’ వంటి ఫీచర్ బ్రాంచ్‌లలో మాత్రమే మీ మురికి పనిని (బగ్, ఫీచర్స్, మెరుగుదలలు) పూర్తిచేసేటప్పుడు స్థిరమైన ‘మాస్టర్’ బ్రాంచ్ రిమోట్ రిపోజిటరీకి మాత్రమే నెట్టండి.
అంతేకాక, తార్కికతను అవలంబించడం మంచిది శాఖల వ్యూహం మీ జిట్ వర్క్‌ఫ్లో ప్రాసెస్‌ను క్రమబద్ధీకరించడానికి మరియు భద్రపరచడానికి.

సంగ్రహంగా చెప్పాలంటే, ‘git bisect’ అనేది త్వరగా ఉపయోగపడే మరియు ఉపయోగకరమైన ఆదేశం గుర్తించండి ది కమిట్ ఐడి అది పరిచయం చేయబడింది కు తప్పు మీ రన్నింగ్ కోడ్‌లో విస్తృతమైన సహాయంతో బైనరీ శోధన తార్కికంగా విభజన కమిట్ లాగ్స్ మధ్య సగం మంచిది మరియు చెడు నిబద్ధత పరిధి . ముగించడానికి, మీరు నేర్చుకున్నారు గుర్తించడం తప్పు కమిట్ మరియు తిరిగి దాని ద్వారా చేసిన మార్పు.

అదనంగా, ‘మంచి’ మరియు ‘చెడు’ అనే ఉపకమాండ్‌లకు మీరు పునర్విమర్శ స్థితిని వివరించడానికి కొత్త మరియు పాత వంటి పదాలను కూడా ఉపయోగించవచ్చు. వేర్వేరు కమిట్ (షీ -1) ఐడిలను గుర్తించడానికి మీరు వేర్వేరు ఉపకమాండ్లను మరియు రివిజన్ / కమిట్ ఐడిలను దాటి పలుసార్లు ఆదేశాన్ని అమలు చేయవచ్చు. ప్రత్యామ్నాయంగా, ఈ ఆదేశాన్ని ఉపయోగించి విరిగిన కోడ్‌ను రూపొందించడానికి ఆటోమేటెడ్ టెస్ట్ స్క్రిప్ట్‌ను కూడా అమలు చేయవచ్చు. అలాగే, ఈ ఆదేశం యొక్క వివరణాత్మక వర్ణనను అమలు చేయడం ద్వారా కనుగొనండిgit bisect --helpటెర్మినల్ మీద. కాబట్టి, దీనితో మనం Git Bisect పై ఈ కథనాన్ని ముగించాము.

DevOps యొక్క ఉద్దేశ్యం ఏమిటంటే, మంచి-నాణ్యమైన సాఫ్ట్‌వేర్‌ను మరింత త్వరగా మరియు మరింత విశ్వసనీయతతో సృష్టించడం, జట్ల మధ్య ఎక్కువ కమ్యూనికేషన్ మరియు సహకారాన్ని ఆహ్వానించడం. మీరు ఈ వ్యాసం ద్వారా ఆసక్తి కలిగి ఉంటే, సి హెక్ అవుట్ ప్రపంచవ్యాప్తంగా విస్తరించి ఉన్న 250,000 మందికి పైగా సంతృప్తికరమైన అభ్యాసకుల నెట్‌వర్క్‌తో విశ్వసనీయ ఆన్‌లైన్ లెర్నింగ్ సంస్థ ఎడురేకా చేత. ఎడ్యురేకా డెవొప్స్ సర్టిఫికేషన్ ట్రైనింగ్ కోర్సు, డివిఓప్స్ అంటే ఏమిటో అర్థం చేసుకోవడానికి మరియు ఎస్‌డిఎల్‌సిలో బహుళ దశలను ఆటోమేట్ చేయడానికి పప్పెట్, జెంకిన్స్, నాగియోస్, అన్సిబుల్, చెఫ్, సాల్ట్‌స్టాక్ మరియు జిఐటి వంటి వివిధ డెవొప్స్ ప్రాసెస్‌లు మరియు సాధనాలలో నైపుణ్యాన్ని పొందడానికి అభ్యాసకులకు సహాయపడుతుంది.

మాకు ప్రశ్న ఉందా? దయచేసి దీనిని “Git Bisect” వ్యాసం యొక్క వ్యాఖ్యల విభాగంలో ప్రస్తావించండి మరియు మేము మీ వద్దకు తిరిగి వస్తాము.