गिट - प्रबंध शाखाओं
शाखा संचालन विकास की एक और पंक्ति बनाने की अनुमति देता है। हम इस प्रक्रिया का उपयोग विकास प्रक्रिया को दो अलग-अलग दिशाओं में बंद करने के लिए कर सकते हैं। उदाहरण के लिए, हमने 6.0 संस्करण के लिए एक उत्पाद जारी किया और हम एक शाखा बनाना चाह सकते हैं ताकि 7.0 सुविधाओं के विकास को 6.0% फिक्स से अलग रखा जा सके।
शाखा बनाएँ
टॉम git शाखा <शाखा का नाम> कमांड का उपयोग करके एक नई शाखा बनाता है। हम एक मौजूदा से एक नई शाखा बना सकते हैं। हम शुरुआती बिंदु के रूप में एक विशिष्ट प्रतिबद्ध या टैग का उपयोग कर सकते हैं। यदि कोई विशिष्ट प्रतिबद्ध आईडी प्रदान नहीं की जाती है, तो शाखा को उसके आरंभिक बिंदु के रूप में हेड बनाया जाएगा।
[jerry@CentOS src]$ git branch new_branch
[jerry@CentOS src]$ git branch
* master
new_branch
एक नई शाखा बनाई जाती है; टॉम ने उपलब्ध शाखाओं को सूचीबद्ध करने के लिए git शाखा कमांड का उपयोग किया। वर्तमान में जाँच की गई शाखा से पहले Git एक तारांकन चिह्न दिखाता है।
शाखा संचालन बनाने का सचित्र प्रतिनिधित्व नीचे दिखाया गया है -
शाखाओं के बीच स्विच करें
जेरी शाखाओं के बीच स्विच करने के लिए git चेकआउट कमांड का उपयोग करता है।
[jerry@CentOS src]$ git checkout new_branch
Switched to branch 'new_branch'
[jerry@CentOS src]$ git branch
master
* new_branch
शाखा बनाने और स्विच करने के लिए शॉर्टकट
उपरोक्त उदाहरण में, हमने क्रमशः शाखाओं को बनाने और स्विच करने के लिए दो आदेशों का उपयोग किया है। गिट प्रदान करता है–bचेकआउट कमांड के साथ विकल्प; यह ऑपरेशन एक नई शाखा बनाता है और तुरंत नई शाखा में बदल जाता है।
[jerry@CentOS src]$ git checkout -b test_branch
Switched to a new branch 'test_branch'
[jerry@CentOS src]$ git branch
master
new_branch
* test_branch
एक शाखा हटाएँ
Git ब्रांच कमांड के साथ –D विकल्प प्रदान करके एक शाखा को हटाया जा सकता है। लेकिन मौजूदा शाखा को हटाने से पहले, दूसरी शाखा पर जाएँ।
जेरी फिलहाल हैं test_branchऔर वह उस शाखा को हटाना चाहता है। इसलिए वह शाखा को स्विच करता है और नीचे दिखाए अनुसार शाखा को हटा देता है।
[jerry@CentOS src]$ git branch
master
new_branch
* test_branch
[jerry@CentOS src]$ git checkout master
Switched to branch 'master'
[jerry@CentOS src]$ git branch -D test_branch
Deleted branch test_branch (was 5776472).
अब, Git केवल दो शाखाओं को दिखाएगा।
[jerry@CentOS src]$ git branch
* master
new_branch
एक शाखा का नाम बदलें
जेरी ने अपने स्ट्रिंग ऑपरेशन प्रोजेक्ट में व्यापक पात्रों के लिए समर्थन जोड़ने का फैसला किया। उसने पहले ही एक नई शाखा बना ली है, लेकिन शाखा का नाम उचित नहीं है। इसलिए वह शाखा का नाम बदलकर उपयोग करता है–m इसके बाद विकल्प old branch name और यह new branch name।
[jerry@CentOS src]$ git branch
* master
new_branch
[jerry@CentOS src]$ git branch -m new_branch wchar_support
अब, git ब्रांच कमांड नई ब्रांच का नाम दिखाएगा।
[jerry@CentOS src]$ git branch
* master
wchar_support
दो शाखाओं को मिलाएं
जेरी व्यापक चरित्र स्ट्रिंग की स्ट्रिंग लंबाई वापस करने के लिए एक फ़ंक्शन को लागू करता है। नया कोड निम्नानुसार दिखाई देगा -
[jerry@CentOS src]$ git branch
master
* wchar_support
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git diff
उपरोक्त आदेश निम्नलिखित परिणाम उत्पन्न करता है -
t a/src/string_operations.c b/src/string_operations.c
index 8ab7f42..8fb4b00 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,4 +1,14 @@
#include <stdio.h>
+#include <wchar.h>
+
+size_t w_strlen(const wchar_t *s)
+
{
+
const wchar_t *p = s;
+
+
while (*p)
+ ++p;
+ return (p - s);
+
}
परीक्षण के बाद, वह नई शाखा में अपने परिवर्तनों को लागू करता है और धक्का देता है।
[jerry@CentOS src]$ git status -s
M string_operations.c
?? string_operations
[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git commit -m 'Added w_strlen function to return string lenght of wchar_t
string'
[wchar_support 64192f9] Added w_strlen function to return string lenght of wchar_t string
1 files changed, 10 insertions(+), 0 deletions(-)
ध्यान दें कि जेरी इन परिवर्तनों को नई शाखा में धकेल रहा है, यही कारण है कि उसने शाखा नाम का उपयोग किया है wchar_support के बजाय master डाली।
[jerry@CentOS src]$ git push origin wchar_support <−−− Observer branch_name
उपरोक्त आदेश निम्नलिखित परिणाम का उत्पादन करेगा।
Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 507 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
* [new branch]
wchar_support -> wchar_support
परिवर्तनों को करने के बाद, नई शाखा इस प्रकार दिखाई देगी -
टॉम इस बारे में उत्सुक है कि जेरी अपनी निजी शाखा में क्या कर रहा है और वह लॉग इन की जाँच करता है wchar_support डाली।
[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
[tom@CentOS src]$ git log origin/wchar_support -2
उपरोक्त आदेश निम्नलिखित परिणाम का उत्पादन करेगा।
commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 16:10:06 2013 +0530
Added w_strlen function to return string lenght of wchar_t string
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
प्रतिबद्ध संदेश देखने से, टॉम को पता चलता है कि जेरी ने व्यापक चरित्र के लिए स्ट्रलेन फ़ंक्शन लागू किया है और वह मास्टर शाखा में समान कार्यक्षमता चाहता है। फिर से लागू करने के बजाय, वह अपनी शाखा को मास्टर शाखा के साथ विलय करके जेरी का कोड लेने का फैसला करता है।
[tom@CentOS project]$ git branch
* master
[tom@CentOS project]$ pwd
/home/tom/top_repo/project
[tom@CentOS project]$ git merge origin/wchar_support
Updating 5776472..64192f9
Fast-forward
src/string_operations.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
मर्ज ऑपरेशन के बाद, मास्टर शाखा निम्नानुसार दिखाई देगी -
अब, शाखा wchar_supportमास्टर शाखा के साथ विलय कर दिया गया है। हम इसे प्रतिबद्ध संदेश देखकर या string_operation.c फ़ाइल में किए गए संशोधनों को देखकर सत्यापित कर सकते हैं।
[tom@CentOS project]$ cd src/
[tom@CentOS src]$ git log -1
commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse
Date: Wed Sep 11 16:10:06 2013 +0530
Added w_strlen function to return string lenght of wchar_t string
[tom@CentOS src]$ head -12 string_operations.c
उपरोक्त आदेश निम्नलिखित परिणाम का उत्पादन करेगा।
#include <stdio.h>
#include <wchar.h>
size_t w_strlen(const wchar_t *s)
{
const wchar_t *p = s;
while (*p)
++p;
return (p - s);
}
परीक्षण के बाद, वह अपने कोड परिवर्तन को मास्टर शाखा में धकेलता है।
[tom@CentOS src]$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:project.git
5776472..64192f9 master −> master
रिबेस शाखाओं
Git rebase कमांड एक ब्रांच मर्ज कमांड है, लेकिन अंतर यह है कि यह कमिट के क्रम को संशोधित करता है।
Git मर्ज कमांड वर्तमान स्थानीय शाखा के HEAD के ऊपर अन्य शाखाओं से कमिट्स लगाने की कोशिश करता है। उदाहरण के लिए, आपकी स्थानीय शाखा ने A−> B−> C D> D और मर्ज शाखा ने A−> B−> X−> Y किया है, तो git मर्ज वर्तमान स्थानीय शाखा को A−> जैसी किसी चीज़ में बदल देगा। बी> सी> डी> एक्स> Y
Git rebase कमांड वर्तमान स्थानीय शाखा और मर्ज शाखा के बीच सामान्य पूर्वजों का पता लगाने की कोशिश करता है। यह वर्तमान स्थानीय शाखा में आवागमन के क्रम को संशोधित करके स्थानीय शाखा में आवागमन को आगे बढ़ाता है। उदाहरण के लिए, यदि आपकी स्थानीय शाखा ने A,> B−> C D> D और मर्ज शाखा ने A−> B−> X−> Y किया है, तो Git rebase वर्तमान स्थानीय शाखा को A− जैसी किसी चीज़ में बदल देगा। > बी> एक्स> Y-> सी> डी।
जब कई डेवलपर एकल दूरस्थ रिपॉजिटरी पर काम करते हैं, तो आप दूरस्थ रिपॉजिटरी में कमिट्स के क्रम को संशोधित नहीं कर सकते। इस स्थिति में, आप दूरस्थ रिपॉजिटरी कमिट्स के शीर्ष पर अपने स्थानीय कमिट्स को डालने के लिए रीबेस ऑपरेशन का उपयोग कर सकते हैं और इन बदलावों को आगे बढ़ा सकते हैं।