परिचयाऐवजी
नमस्कार! आज आपण Git नावाच्या आवृत्ती नियंत्रण प्रणालीबद्दल बोलणार आहोत.
Git मूलभूत
आमच्या कोडसाठी गिट ही वितरित आवृत्ती नियंत्रण प्रणाली आहे. आम्हाला त्याची गरज का आहे? वितरित संघांना त्यांचे कार्य व्यवस्थापित करण्यासाठी काही प्रकारच्या प्रणालीची आवश्यकता असते. कालांतराने होणाऱ्या बदलांचा मागोवा घेणे आवश्यक आहे. म्हणजेच, कोणत्या फायली बदलल्या आहेत आणि कशा बदलल्या आहेत हे आपल्याला चरण-दर-चरण पाहण्यास सक्षम असणे आवश्यक आहे. हे विशेषतः महत्वाचे आहे जेव्हा तुम्ही एका कार्याच्या संदर्भात काय बदलले आहे ते तपासत आहात, बदल परत करणे शक्य करते.Git स्थापित करत आहे
चला तुमच्या संगणकावर Java इंस्टॉल करू.विंडोजवर इन्स्टॉल करत आहे
नेहमीप्रमाणे, तुम्हाला exe फाइल डाउनलोड करून चालवावी लागेल. येथे सर्व काही सोपे आहे: पहिल्या Google दुव्यावर क्लिक करा , स्थापित करा आणि तेच झाले. हे करण्यासाठी, आम्ही विंडोजद्वारे प्रदान केलेले बॅश कन्सोल वापरू. विंडोजवर, तुम्हाला गिट बॅश चालवावी लागेल. स्टार्ट मेनूमध्ये ते कसे दिसते ते येथे आहे:

लिनक्सवर इन्स्टॉल करत आहे
सहसा Git हा लिनक्स वितरणाचा भाग असतो आणि तो आधीपासूनच स्थापित केलेला असतो, कारण ते मूळतः लिनक्स कर्नल विकासासाठी लिहिलेले साधन आहे. परंतु अशी परिस्थिती असते जेव्हा ती नसते. तपासण्यासाठी, तुम्हाला टर्मिनल उघडावे लागेल आणि लिहावे लागेल: git --version. जर तुम्हाला समजण्याजोगे उत्तर मिळाले तर काहीही स्थापित करण्याची गरज नाही. टर्मिनल उघडा आणि उबंटूवर Git स्थापित करा . मी उबंटू वर काम करत आहे, त्यामुळे त्यासाठी काय लिहायचे ते मी सांगू शकतो: sudo apt-get install git.macOS वर स्थापित करत आहे
येथे देखील, आपल्याला प्रथम Git तेथे आहे की नाही हे तपासण्याची आवश्यकता आहे. तुमच्याकडे ते नसल्यास, ते मिळवण्याचा सर्वात सोपा मार्ग म्हणजे नवीनतम आवृत्ती येथे डाउनलोड करणे . जर Xcode स्थापित केले असेल, तर Git निश्चितपणे स्वयंचलितपणे स्थापित होईल.Git सेटिंग्ज
Git मध्ये वापरकर्त्यासाठी वापरकर्ता सेटिंग्ज आहेत जे काम सबमिट करतील. हे अर्थपूर्ण आणि आवश्यक आहे, कारण कमिट तयार केल्यावर गिट ही माहिती लेखक फील्डसाठी घेते. खालील आदेश चालवून तुमच्या सर्व प्रकल्पांसाठी वापरकर्तानाव आणि पासवर्ड सेट करा:
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com
तुम्हाला एखाद्या विशिष्ट प्रकल्पासाठी लेखक बदलण्याची आवश्यकता असल्यास, तुम्ही "--global" काढू शकता. हे आम्हाला पुढील गोष्टी देईल:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
थोडा सिद्धांत...
विषयात जाण्यासाठी, आम्ही तुम्हाला काही नवीन शब्द आणि कृतींशी ओळख करून द्यायला हवी...- git भांडार
- वचनबद्ध
- शाखा
- विलीन
- संघर्ष
- खेचणे
- ढकलणे
- काही फाइल्सकडे दुर्लक्ष कसे करावे (.gitignore)
Git मधील स्थिती
गिटमध्ये अनेक पुतळे आहेत ज्यांना समजून घेणे आणि लक्षात ठेवणे आवश्यक आहे:- अनट्रॅक केलेले
- सुधारित
- मंचित
- वचनबद्ध
हे कसे समजून घ्यावे?
आमच्या कोड असलेल्या फायलींवर लागू होणारी ही स्थिती आहेत:- फाइल जी तयार केली गेली आहे परंतु अद्याप रिपॉजिटरीमध्ये जोडली गेली नाही तिला "ट्रॅक न केलेले" स्थिती आहे.
- Git रिपॉझिटरीमध्ये आधीच जोडलेल्या फाईल्समध्ये आम्ही बदल करतो तेव्हा त्यांची स्थिती "सुधारित" केली जाते.
- आम्ही बदललेल्या फायलींपैकी, आम्ही आवश्यक असलेल्या फाइल्स निवडतो आणि हे वर्ग "स्टेज्ड" स्थितीत बदलले जातात.
- स्टेज केलेल्या स्थितीत तयार केलेल्या फाइल्समधून कमिट तयार केले जाते आणि Git रेपॉजिटरीमध्ये जाते. त्यानंतर, "स्टेज्ड" स्थिती असलेल्या कोणत्याही फायली नाहीत. परंतु तरीही अशा फाइल्स असू शकतात ज्यांची स्थिती "सुधारित" आहे.

कमिट म्हणजे काय?
जेव्हा आवृत्ती नियंत्रण येते तेव्हा कमिट ही मुख्य घटना असते. कमिट सुरू झाल्यापासून केलेले सर्व बदल त्यात समाविष्ट आहेत. कमिट एकल लिंक केलेल्या सूचीप्रमाणे एकत्र जोडलेले आहेत. अधिक विशेषतः: प्रथम वचनबद्धता आहे. जेव्हा दुसरी कमिट तयार केली जाते, तेव्हा पहिल्या नंतर काय येते हे माहित असते. आणि या पद्धतीने माहितीचा मागोवा घेता येतो. कमिटची स्वतःची माहिती देखील असते, तथाकथित मेटाडेटा:- कमिटचा युनिक आयडेंटिफायर, जो तो शोधण्यासाठी वापरला जाऊ शकतो
- कमिटच्या लेखकाचे नाव, ज्याने ते तयार केले
- कमिट तयार केल्याची तारीख
- कमिट दरम्यान काय केले गेले याचे वर्णन करणारी टिप्पणी

शाखा म्हणजे काय?
शाखा ही काही कमिटसाठी सूचक असते. कारण कमिटला माहित असते की त्याच्या आधी कोणती कमिट आहे, जेव्हा एखादी शाखा कमिटकडे निर्देश करते, तेव्हा त्या आधीच्या सर्व कमिट देखील त्यावर लागू होतात. त्यानुसार, आम्ही असे म्हणू शकतो की समान कमिटकडे निर्देश करून तुम्हाला पाहिजे तितक्या शाखा असू शकतात. काम शाखांमध्ये होते, म्हणून जेव्हा नवीन कमिट तयार होते, तेव्हा शाखा त्याचे पॉइंटर अगदी अलीकडील कमिटकडे हलवते.Git सह प्रारंभ करणे
तुम्ही स्थानिक रेपॉजिटरीसह तसेच रिमोटसह काम करू शकता. आवश्यक आदेशांचा सराव करण्यासाठी, तुम्ही स्वतःला स्थानिक भांडारात मर्यादित करू शकता. हे फक्त .git फोल्डरमध्ये स्थानिक पातळीवर प्रकल्पाची सर्व माहिती संग्रहित करते. जर आपण रिमोट रेपॉजिटरीबद्दल बोलत असाल तर सर्व माहिती रिमोट सर्व्हरवर कुठेतरी संग्रहित केली जाते: प्रकल्पाची फक्त एक प्रत स्थानिकरित्या संग्रहित केली जाते. तुमच्या स्थानिक प्रतीमध्ये केलेले बदल रिमोट रिपॉझिटरीमध्ये (गिट पुश) ढकलले जाऊ शकतात. येथे आणि खाली आमच्या चर्चेत, आम्ही कन्सोलमध्ये Git सह काम करण्याबद्दल बोलत आहोत. अर्थात, तुम्ही काही प्रकारचे GUI-आधारित सोल्यूशन वापरू शकता (उदाहरणार्थ, IntelliJ IDEA), परंतु प्रथम तुम्ही कोणते आदेश कार्यान्वित केले जात आहेत आणि त्यांचा अर्थ काय हे शोधून काढले पाहिजे.स्थानिक भांडारात Git सह कार्य करणे
पुढे, मी सुचवितो की तुम्ही सोबत अनुसरण करा आणि तुम्ही लेख वाचल्याप्रमाणे मी केलेल्या सर्व चरणांचे पालन करा. हे तुमची समज आणि सामग्रीचे प्रभुत्व सुधारेल. बरं, बोन एपेटिट! :) स्थानिक भांडार तयार करण्यासाठी, तुम्हाला लिहावे लागेल:
git init

git status

- git add -A — सर्व फायली "स्टेज्ड" स्थितीत जोडा
- git जोडा. - या फोल्डरमधील सर्व फायली आणि सर्व सबफोल्डर्स जोडा. मूलत:, हे मागील सारखेच आहे
- git add <file name> — विशिष्ट फाइल जोडते. येथे तुम्ही काही पॅटर्ननुसार फाइल्स जोडण्यासाठी रेग्युलर एक्सप्रेशन वापरू शकता. उदाहरणार्थ, git add *.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 सह काम करत आहे
स्पष्टपणे, आम्ही फक्त स्त्रोत कोड ठेवू इच्छितो, आणि इतर काहीही नाही, रेपॉजिटरीमध्ये. मग आणखी काय असू शकते? कमीत कमी, संकलित वर्ग आणि/किंवा विकास वातावरणाद्वारे व्युत्पन्न केलेल्या फाइल्स. गिटला त्यांच्याकडे दुर्लक्ष करण्यास सांगण्यासाठी, आम्हाला एक विशेष फाइल तयार करावी लागेल. हे करा: प्रोजेक्टच्या रूटमध्ये .gitignore नावाची फाईल तयार करा. या फाईलमधील प्रत्येक ओळ दुर्लक्ष करण्यासाठी नमुना दर्शवते. या उदाहरणात, .gitignore फाइल यासारखी दिसेल:
```
*.class
target/
*.iml
.idea/
```
चला पाहुया:
- पहिली ओळ म्हणजे .class एक्स्टेंशन असलेल्या सर्व फाईल्सकडे दुर्लक्ष करणे
- दुसरी ओळ म्हणजे "लक्ष्य" फोल्डर आणि त्यात असलेल्या सर्व गोष्टींकडे दुर्लक्ष करणे
- तिसरी ओळ म्हणजे .iml एक्स्टेंशन असलेल्या सर्व फाइल्सकडे दुर्लक्ष करणे
- चौथी ओळ म्हणजे .idea फोल्डरकडे दुर्लक्ष करणे
git status


git add .gitignore
git commit -m "added .gitignore file"
आणि आता सत्याचा क्षण: आमच्याकडे एक संकलित वर्ग GitTest.class आहे जो "अनट्रॅक केलेला" आहे, जो आम्हाला Git भांडारात जोडायचा नव्हता. आता आपण .gitignore फाईलचे इफेक्ट पाहावे:
git status

शाखांसह कार्य करणे आणि अशा
साहजिकच, फक्त एका शाखेत काम करणे एकाकी विकसकांसाठी गैरसोयीचे असते आणि जेव्हा एका संघात एकापेक्षा जास्त व्यक्ती असतात तेव्हा ते अशक्य असते. त्यामुळे आमच्या शाखा आहेत. मी आधी म्हटल्याप्रमाणे, शाखा ही कमिटसाठी फक्त एक जंगम पॉइंटर आहे. या भागात, आम्ही वेगवेगळ्या शाखांमध्ये काम करणार आहोत: एका शाखेतून दुसऱ्या शाखेत बदल कसे विलीन करायचे, कोणते विवाद उद्भवू शकतात आणि बरेच काही. रेपॉजिटरीमधील सर्व शाखांची सूची पाहण्यासाठी आणि तुम्ही कोणत्या शाखेत आहात हे समजून घेण्यासाठी, तुम्हाला लिहावे लागेल:
git branch -a

- आम्ही ज्यामध्ये आहोत त्यावर आधारित नवीन शाखा तयार करा (९९% प्रकरणे)
- विशिष्ट वचनबद्धतेवर आधारित शाखा तयार करा (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 फाइल पुन्हा बदलण्याची आवश्यकता आहे. मात्र आता मास्टर ब्रँचमध्येही ही फाइल बदलण्यात येणार आहे. दुसऱ्या शब्दांत, ते समांतर बदलेल. जेव्हा आम्हाला आमचा नवीन कोड मास्टर ब्रँचमध्ये विलीन करायचा असेल तेव्हा काय करावे हे गिट समजू शकणार नाही. चल जाऊया! आम्ही मास्टरवर आधारित नवीन शाखा तयार करू, 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 लाइफसायकलसाठी वेब-आधारित साधन आहे . ही एक Git- आधारित प्रणाली आहे जी स्वतःच्या विकी, बग ट्रॅकिंग सिस्टीम , CI/CD पाइपलाइन आणि इतर फंक्शन्ससह कोड रिपॉझिटरीज व्यवस्थापित करते . मायक्रोसॉफ्टने गिटहब विकत घेतल्याच्या बातमीनंतर, काही विकासकांनी त्यांचे प्रोजेक्ट गिटलॅबमध्ये डुप्लिकेट केले.
-
बिटबकेट ही मर्क्युरियल आणि गिट आवृत्ती नियंत्रण प्रणालीवर आधारित प्रोजेक्ट होस्टिंग आणि सहयोगी विकासासाठी वेब सेवा आहे. एकेकाळी त्याचा गिटहबपेक्षा मोठा फायदा होता कारण तो विनामूल्य खाजगी भांडार देऊ करत होता. गेल्या वर्षी 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