పరిచయానికి బదులుగా
హలో! ఈ రోజు మనం Git అనే వెర్షన్ కంట్రోల్ సిస్టమ్ గురించి మాట్లాడబోతున్నాం.
Git బేసిక్స్
Git అనేది మా కోడ్ కోసం పంపిణీ చేయబడిన సంస్కరణ నియంత్రణ వ్యవస్థ. మనకు అది ఎందుకు అవసరం? పంపిణీ చేయబడిన బృందాలకు వారి పనిని నిర్వహించడానికి ఒక రకమైన వ్యవస్థ అవసరం. కాలానుగుణంగా సంభవించే మార్పులను ట్రాక్ చేయడం అవసరం. అంటే ఏయే ఫైల్స్ ఎలా మారాయి, ఎలా మారాయి అనే విషయాలను మనం దశల వారీగా చూడగలగాలి. మీరు ఒకే పని సందర్భంలో ఏమి మారిందో పరిశోధిస్తున్నప్పుడు ఇది చాలా ముఖ్యమైనది, మార్పులను తిరిగి పొందడం సాధ్యమవుతుంది.Gitని ఇన్స్టాల్ చేస్తోంది
మీ కంప్యూటర్లో జావాను ఇన్స్టాల్ చేద్దాం.విండోస్లో ఇన్స్టాల్ చేస్తోంది
ఎప్పటిలాగే, మీరు exe ఫైల్ను డౌన్లోడ్ చేసి, అమలు చేయాలి. ఇక్కడ ప్రతిదీ చాలా సులభం: మొదటి Google లింక్పై క్లిక్ చేసి , ఇన్స్టాల్ చేయండి మరియు అంతే. దీన్ని చేయడానికి, మేము Windows అందించిన బాష్ కన్సోల్ను ఉపయోగిస్తాము. విండోస్లో, మీరు Git Bashని అమలు చేయాలి. ప్రారంభ మెనులో ఇది ఎలా కనిపిస్తుందో ఇక్కడ ఉంది:

Linuxలో ఇన్స్టాల్ చేస్తోంది
సాధారణంగా Git Linux పంపిణీలలో భాగం మరియు ఇది ఇప్పటికే ఇన్స్టాల్ చేయబడింది, ఎందుకంటే ఇది మొదట Linux కెర్నల్ అభివృద్ధి కోసం వ్రాయబడిన సాధనం. కానీ అది లేనప్పుడు పరిస్థితులు ఉన్నాయి. తనిఖీ చేయడానికి, మీరు టెర్మినల్ని తెరిచి వ్రాయాలి: git --version. మీకు అర్థమయ్యే సమాధానం వస్తే, ఏదీ ఇన్స్టాల్ చేయాల్సిన అవసరం లేదు. ఒక టెర్మినల్ తెరిచి ఉబుంటులో Gitని ఇన్స్టాల్ చేయండి . నేను ఉబుంటులో పని చేస్తున్నాను, కాబట్టి దాని కోసం ఏమి వ్రాయాలో నేను మీకు చెప్పగలను: sudo apt-get install git.MacOSలో ఇన్స్టాల్ చేస్తోంది
ఇక్కడ కూడా, మీరు ముందుగా Git ఇప్పటికే ఉందో లేదో తనిఖీ చేయాలి. మీ వద్ద అది లేకుంటే, దాన్ని పొందడానికి సులభమైన మార్గం ఇక్కడ తాజా సంస్కరణను డౌన్లోడ్ చేయడం . Xcode ఇన్స్టాల్ చేయబడితే, Git ఖచ్చితంగా స్వయంచాలకంగా ఇన్స్టాల్ చేయబడుతుంది.Git సెట్టింగ్లు
పనిని సమర్పించే వినియోగదారు కోసం Git వినియోగదారు సెట్టింగ్లను కలిగి ఉంది. ఇది అర్ధవంతం మరియు అవసరం, ఎందుకంటే కమిట్ సృష్టించబడినప్పుడు రచయిత ఫీల్డ్ కోసం Git ఈ సమాచారాన్ని తీసుకుంటుంది. కింది ఆదేశాలను అమలు చేయడం ద్వారా మీ అన్ని ప్రాజెక్ట్లకు వినియోగదారు పేరు మరియు పాస్వర్డ్ను సెటప్ చేయండి:
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com
మీరు నిర్దిష్ట ప్రాజెక్ట్ కోసం రచయితను మార్చవలసి వస్తే, మీరు "--గ్లోబల్"ని తీసివేయవచ్చు. ఇది మాకు ఈ క్రింది వాటిని ఇస్తుంది:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
కొంచెం సిద్ధాంతం...
టాపిక్లోకి ప్రవేశించడానికి, మేము మీకు కొన్ని కొత్త పదాలు మరియు చర్యలను పరిచయం చేయాలి...- git రిపోజిటరీ
- కట్టుబడి
- శాఖ
- విలీనం
- గొడవలు
- లాగండి
- పుష్
- కొన్ని ఫైల్లను ఎలా విస్మరించాలి (.gitignore)
Gitలో స్థితిగతులు
Git అనేక విగ్రహాలను కలిగి ఉంది, వాటిని అర్థం చేసుకోవాలి మరియు గుర్తుంచుకోవాలి:- ట్రాక్ చేయబడలేదు
- సవరించబడింది
- రంగస్థలం
- కట్టుబడి
మీరు దీన్ని ఎలా అర్థం చేసుకోవాలి?
ఇవి మా కోడ్ను కలిగి ఉన్న ఫైల్లకు వర్తించే స్థితిగతులు:- రిపోజిటరీకి సృష్టించబడిన కానీ ఇంకా జోడించబడని ఫైల్ "ట్రాక్ చేయని" స్థితిని కలిగి ఉంటుంది.
- మేము ఇప్పటికే Git రిపోజిటరీకి జోడించిన ఫైల్లకు మార్పులు చేసినప్పుడు, వాటి స్థితి "సవరించినది" అవుతుంది.
- మేము మార్చిన ఫైల్లలో, మనకు అవసరమైన వాటిని ఎంచుకుంటాము మరియు ఈ తరగతులు "స్టేజ్డ్" స్థితికి మార్చబడతాయి.
- స్టేజ్డ్ స్టేట్లో సిద్ధం చేసిన ఫైల్ల నుండి కమిట్ సృష్టించబడుతుంది మరియు Git రిపోజిటరీలోకి వెళుతుంది. ఆ తర్వాత, "స్టేజ్డ్" స్టేటస్తో ఫైల్లు లేవు. కానీ ఇప్పటికీ "సవరించిన" స్థితి ఉన్న ఫైల్లు ఉండవచ్చు.

నిబద్ధత అంటే ఏమిటి?
సంస్కరణ నియంత్రణ విషయానికి వస్తే కమిట్ అనేది ప్రధాన కార్యక్రమం. నిబద్ధత ప్రారంభమైనప్పటి నుండి చేసిన అన్ని మార్పులు ఇందులో ఉన్నాయి. కమిట్లు ఏకంగా లింక్ చేయబడిన జాబితా వలె ఒకదానితో ఒకటి అనుసంధానించబడి ఉంటాయి. మరింత ప్రత్యేకంగా: మొదటి నిబద్ధత ఉంది. రెండవ కమిట్ సృష్టించబడినప్పుడు, మొదటిదాని తర్వాత ఏమి వస్తుందో దానికి తెలుస్తుంది. మరియు ఈ పద్ధతిలో, సమాచారాన్ని ట్రాక్ చేయవచ్చు. ఒక కమిట్ దాని స్వంత సమాచారాన్ని కూడా కలిగి ఉంటుంది, దీనిని మెటాడేటా అని పిలుస్తారు:- కమిట్ యొక్క ఏకైక ఐడెంటిఫైయర్, దానిని కనుగొనడానికి ఉపయోగించవచ్చు
- దానిని సృష్టించిన కమిట్ రచయిత పేరు
- కమిట్ సృష్టించబడిన తేదీ
- నిబద్ధత సమయంలో ఏమి జరిగిందో వివరించే వ్యాఖ్య

శాఖ అంటే ఏమిటి?
కొందరి నిబద్ధతకు బ్రాంచ్ ఒక పాయింటర్. ఒక కమిట్కు దాని కంటే ముందు ఏ కమిట్ ఉంటుందో తెలుసు కాబట్టి, ఒక శాఖ ఒక కమిట్ని సూచించినప్పుడు, ఆ మునుపటి కమిట్లన్నీ దానికి కూడా వర్తిస్తాయి. దీని ప్రకారం, మీరు ఒకే కమిట్ని సూచిస్తూ మీకు కావలసినన్ని శాఖలను కలిగి ఉండవచ్చని మేము చెప్పగలము. పని శాఖలలో జరుగుతుంది, కాబట్టి కొత్త కమిట్ సృష్టించబడినప్పుడు, శాఖ దాని పాయింటర్ను ఇటీవలి కమిట్కి తరలిస్తుంది.Gitతో ప్రారంభించడం
మీరు స్థానిక రిపోజిటరీతో పాటు రిమోట్తో కూడా పని చేయవచ్చు. అవసరమైన ఆదేశాలను సాధన చేయడానికి, మీరు స్థానిక రిపోజిటరీకి మిమ్మల్ని పరిమితం చేసుకోవచ్చు. ఇది ప్రాజెక్ట్ యొక్క మొత్తం సమాచారాన్ని స్థానికంగా .git ఫోల్డర్లో మాత్రమే నిల్వ చేస్తుంది. మేము రిమోట్ రిపోజిటరీ గురించి మాట్లాడుతున్నట్లయితే, మొత్తం సమాచారం రిమోట్ సర్వర్లో ఎక్కడో నిల్వ చేయబడుతుంది: ప్రాజెక్ట్ యొక్క కాపీ మాత్రమే స్థానికంగా నిల్వ చేయబడుతుంది. మీ స్థానిక కాపీకి చేసిన మార్పులు రిమోట్ రిపోజిటరీకి నెట్టబడతాయి (git పుష్). ఇక్కడ మరియు దిగువ మా చర్చలో, మేము కన్సోల్లో Gitతో పని చేయడం గురించి మాట్లాడుతున్నాము. వాస్తవానికి, మీరు ఒక విధమైన GUI-ఆధారిత పరిష్కారాన్ని ఉపయోగించవచ్చు (ఉదాహరణకు, IntelliJ IDEA), కానీ ముందుగా మీరు ఏ ఆదేశాలను అమలు చేస్తున్నారో మరియు వాటి అర్థం ఏమిటో గుర్తించాలి.స్థానిక రిపోజిటరీలో Gitతో పని చేస్తోంది
తర్వాత, మీరు కథనాన్ని చదివేటప్పుడు నేను చేసిన అన్ని దశలను అనుసరించి, పూర్తి చేయాలని నేను సూచిస్తున్నాను. ఇది పదార్థంపై మీ అవగాహన మరియు నైపుణ్యాన్ని మెరుగుపరుస్తుంది. బాగా, బాన్ అపెటిట్! :) స్థానిక రిపోజిటరీని సృష్టించడానికి, మీరు వ్రాయాలి:
git init

git status

- git add -A — అన్ని ఫైళ్లను "స్టేజ్డ్" స్థితికి జోడించండి
- git add. — ఈ ఫోల్డర్ నుండి అన్ని ఫైల్లను మరియు అన్ని సబ్ఫోల్డర్లను జోడించండి. ముఖ్యంగా, ఇది మునుపటి మాదిరిగానే ఉంటుంది
- git add <file name> — నిర్దిష్ట ఫైల్ను జోడిస్తుంది. ఇక్కడ మీరు కొన్ని నమూనా ప్రకారం ఫైల్లను జోడించడానికి సాధారణ వ్యక్తీకరణలను ఉపయోగించవచ్చు. ఉదాహరణకు, git add *.java: అంటే మీరు java పొడిగింపుతో మాత్రమే ఫైల్లను జోడించాలనుకుంటున్నారు.
git add *.txt
స్థితిని తనిఖీ చేయడానికి, మేము ఇప్పటికే మనకు తెలిసిన ఆదేశాన్ని ఉపయోగిస్తాము:
git status

git commit -m "all txt files were added to the project"

git log

git status

git status

git diff

git add test_resource.txt
git commit -m "added hello word! to test_resource.txt"
అన్ని కమిట్లను చూడటానికి, వ్రాయండి:
git log

git add GitTest.java
git commit -m "added GitTest.java"
git status

.gitignoreతో పని చేస్తున్నారు
స్పష్టంగా, మేము రిపోజిటరీలో సోర్స్ కోడ్ మాత్రమే ఉంచాలనుకుంటున్నాము మరియు మరేమీ లేదు. కాబట్టి ఇంకా ఏమి ఉండవచ్చు? కనిష్టంగా, సంకలనం చేయబడిన తరగతులు మరియు/లేదా డెవలప్మెంట్ పరిసరాల ద్వారా రూపొందించబడిన ఫైల్లు. వాటిని విస్మరించమని Gitకి చెప్పడానికి, మనం ఒక ప్రత్యేక ఫైల్ని సృష్టించాలి. ఇలా చేయండి: ప్రాజెక్ట్ యొక్క రూట్లో .gitignore అనే ఫైల్ను సృష్టించండి. ఈ ఫైల్లోని ప్రతి పంక్తి విస్మరించాల్సిన నమూనాను సూచిస్తుంది. ఈ ఉదాహరణలో, .gitignore ఫైల్ ఇలా కనిపిస్తుంది:
```
*.class
target/
*.iml
.idea/
```
ఒకసారి చూద్దాము:
- .class పొడిగింపుతో అన్ని ఫైల్లను విస్మరించడమే మొదటి పంక్తి
- రెండవ పంక్తి "టార్గెట్" ఫోల్డర్ మరియు అది కలిగి ఉన్న ప్రతిదాన్ని విస్మరించడం
- మూడవ పంక్తి .iml పొడిగింపుతో అన్ని ఫైల్లను విస్మరించడం
- నాల్గవ పంక్తి .idea ఫోల్డర్ను విస్మరించడమే
git status


git add .gitignore
git commit -m "added .gitignore file"
మరియు ఇప్పుడు నిజం యొక్క క్షణం: మేము Git రిపోజిటరీకి జోడించదలచుకోని "ట్రాక్ చేయని" GitTest.class అనే సంకలన తరగతిని కలిగి ఉన్నాము. ఇప్పుడు మనం .gitignore ఫైల్ యొక్క ప్రభావాలను చూడాలి:
git status

శాఖలతో పని చేయడం మొదలైనవి
సహజంగానే, కేవలం ఒక శాఖలో పని చేయడం ఒంటరి డెవలపర్లకు అసౌకర్యంగా ఉంటుంది మరియు ఒక బృందంలో ఒకటి కంటే ఎక్కువ మంది వ్యక్తులు ఉన్నప్పుడు అది అసాధ్యం. అందుకే మాకు శాఖలు ఉన్నాయి. నేను ఇంతకు ముందు చెప్పినట్లుగా, ఒక శాఖ అనేది కమిట్ చేయడానికి ఒక కదిలే పాయింటర్. ఈ భాగంలో, మేము వివిధ శాఖలలో పని చేయడం గురించి అన్వేషిస్తాము: మార్పులను ఒక శాఖ నుండి మరొక శాఖలోకి ఎలా విలీనం చేయాలి, ఎలాంటి వైరుధ్యాలు తలెత్తవచ్చు మరియు మరెన్నో. రిపోజిటరీలోని అన్ని శాఖల జాబితాను చూడటానికి మరియు మీరు దేనిలో ఉన్నారో అర్థం చేసుకోవడానికి, మీరు వ్రాయాలి:
git branch -a

- మేము ఉన్న శాఖ ఆధారంగా కొత్త శాఖను సృష్టించండి (99% కేసులు)
- నిర్దిష్ట కమిట్ (1% కేసులు) ఆధారంగా శాఖను సృష్టించండి
నిర్దిష్ట నిబద్ధత ఆధారంగా ఒక శాఖను క్రియేట్ చేద్దాం
మేము కమిట్ యొక్క ప్రత్యేక ఐడెంటిఫైయర్పై ఆధారపడతాము. దానిని కనుగొనడానికి, మేము వ్రాస్తాము:
git log

git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
మాస్టర్ బ్రాంచ్ నుండి మొదటి రెండు కమిట్లతో మాత్రమే ఒక శాఖ సృష్టించబడుతుంది. దీన్ని ధృవీకరించడానికి, మేము ముందుగా వేరే బ్రాంచ్కి మారాలని నిర్ధారిస్తాము మరియు అక్కడ కమిట్ల సంఖ్యను పరిశీలిస్తాము:
git status
git log

git branch -a

ప్రస్తుత శాఖ ఆధారంగా ఒక శాఖను సృష్టిద్దాం
ఒక శాఖను సృష్టించడానికి రెండవ మార్గం దానిని మరొక దాని నుండి సృష్టించడం. నేను మాస్టర్ బ్రాంచ్ ఆధారంగా ఒక శాఖను సృష్టించాలనుకుంటున్నాను. మొదట, నేను దానికి మారాలి మరియు తదుపరి దశ కొత్తదాన్ని సృష్టించడం. ఒకసారి చూద్దాము:- git చెక్అవుట్ మాస్టర్ — మాస్టర్ బ్రాంచ్కి మారండి
- git స్థితి — మేము నిజానికి మాస్టర్ బ్రాంచ్లో ఉన్నామని ధృవీకరించండి

git checkout -b feature/update-txt-files

సంఘర్షణ పరిష్కారం
సంఘర్షణ అంటే ఏమిటో అన్వేషించే ముందు, ఒక శాఖను మరొక శాఖలో విలీనం చేయడం గురించి మాట్లాడాలి. ఈ చిత్రం ఒక శాఖను మరొక శాఖలో విలీనం చేసే ప్రక్రియను వర్ణిస్తుంది:

git add *.txt
git commit -m "updated txt files"
git log

git checkout master
git merge feature/update-txt-files
git log

git branch -D feature/update-txt-files
ఇప్పటివరకు ప్రతిదీ స్పష్టంగా ఉంది, అవునా? పరిస్థితిని క్లిష్టతరం చేద్దాం: ఇప్పుడు మీరు txt ఫైల్ను మళ్లీ మార్చాల్సిన అవసరం ఉందని చెప్పండి. అయితే ఇప్పుడు మాస్టర్ బ్రాంచ్లోనూ ఈ ఫైల్ను మార్చనున్నారు. మరో మాటలో చెప్పాలంటే, ఇది సమాంతరంగా మారుతుంది. మేము మా కొత్త కోడ్ను మాస్టర్ బ్రాంచ్లో విలీనం చేయాలనుకున్నప్పుడు ఏమి చేయాలో Git గుర్తించలేకపోతుంది. వెళ్దాం! మేము మాస్టర్ ఆధారంగా కొత్త బ్రాంచ్ని సృష్టిస్తాము, text_resource.txtకి మార్పులు చేస్తాము మరియు ఈ పని కోసం నిబద్ధతను సృష్టిస్తాము:
git checkout -b feature/add-header
... we make changes to the file

git add *.txt
git commit -m "added header to txt"

git checkout master
… we updated test_resource.txt

git add test_resource.txt
git commit -m "added master header to txt"
మరియు ఇప్పుడు అత్యంత ఆసక్తికరమైన అంశం: మేము ఫీచర్/యాడ్-హెడర్ బ్రాంచ్ నుండి మాస్టర్కు మార్పులను విలీనం చేయాలి. మేము మాస్టర్ బ్రాంచ్లో ఉన్నాము, కాబట్టి మేము మాత్రమే వ్రాయాలి:
git merge feature/add-header
కానీ ఫలితం test_resource.txt ఫైల్లో వైరుధ్యంగా ఉంటుంది: 

- మాస్టర్ బ్రాంచ్లో ఈ లైన్లో ఉన్న మార్పులు "<<<<<<< HEAD" మరియు "=======" మధ్య కనుగొనబడ్డాయి.
- ఫీచర్/యాడ్-హెడర్ బ్రాంచ్లో ఉన్న మార్పులు "========" మరియు ">>>>>>> ఫీచర్/యాడ్-హెడర్" మధ్య కనుగొనబడ్డాయి.

git status

git add *.txt

git commit

రిమోట్ రిపోజిటరీలతో పని చేస్తోంది
రిమోట్ రిపోజిటరీతో పని చేయడానికి అవసరమైన మరికొన్ని ఆదేశాలను గుర్తించడం చివరి దశ. నేను చెప్పినట్లుగా, రిమోట్ రిపోజిటరీ అనేది రిపోజిటరీ నిల్వ చేయబడిన ప్రదేశం మరియు దాని నుండి మీరు దానిని క్లోన్ చేయవచ్చు. ఎలాంటి రిమోట్ రిపోజిటరీలు ఉన్నాయి? ఉదాహరణలు:-
GitHub అనేది రిపోజిటరీలు మరియు సహకార అభివృద్ధి కోసం అతిపెద్ద నిల్వ వేదిక. నేను ఇప్పటికే మునుపటి వ్యాసాలలో వివరించాను. GitHub
లో నన్ను అనుసరించండి . నేను పని కోసం చదువుతున్న ప్రాంతాలలో తరచుగా నా పనిని ప్రదర్శిస్తాను. -
GitLab అనేది ఓపెన్ సోర్స్తో DevOps జీవితచక్రం కోసం వెబ్ ఆధారిత సాధనం . ఇది దాని స్వంత వికీ, బగ్ ట్రాకింగ్ సిస్టమ్ , CI/CD పైప్లైన్ మరియు ఇతర ఫంక్షన్లతో కోడ్ రిపోజిటరీలను నిర్వహించడానికి Git- ఆధారిత సిస్టమ్. మైక్రోసాఫ్ట్ గిట్హబ్ను కొనుగోలు చేసిన వార్త తర్వాత, కొంతమంది డెవలపర్లు తమ ప్రాజెక్ట్లను గిట్ల్యాబ్లో నకిలీ చేశారు.
-
BitBucket అనేది మెర్క్యురియల్ మరియు Git వెర్షన్ నియంత్రణ వ్యవస్థల ఆధారంగా ప్రాజెక్ట్ హోస్టింగ్ మరియు సహకార అభివృద్ధి కోసం ఒక వెబ్ సేవ. ఒక సమయంలో ఇది ఉచిత ప్రైవేట్ రిపోజిటరీలను అందించడంలో GitHub కంటే పెద్ద ప్రయోజనాన్ని కలిగి ఉంది. గత సంవత్సరం, GitHub కూడా ఈ సామర్థ్యాన్ని అందరికీ ఉచితంగా పరిచయం చేసింది.
-
మరియు అందువలన న…
git clone https://github.com/romankh3/git-demo
ప్రాజెక్ట్ యొక్క పూర్తి స్థానిక కాపీ ఇప్పుడు ఉంది. ప్రాజెక్ట్ యొక్క స్థానిక కాపీ తాజాదని నిర్ధారించుకోవడానికి, మీరు వ్రాయడం ద్వారా ప్రాజెక్ట్ను తీసివేయాలి:
git pull


git add test_resource.txt
git commit -m "prepared txt for pushing"
దీన్ని రిమోట్ రిపోజిటరీకి నెట్టడానికి ఆదేశం:
git push

ఉపయోగకరమైన లింక్
- అధికారిక Git డాక్యుమెంటేషన్ . నేను దానిని సూచనగా సిఫార్సు చేస్తున్నాను.
GO TO FULL VERSION