تعارف جي بدران
سلام! اڄ اسان هڪ ورزن ڪنٽرول سسٽم بابت ڳالهائڻ وارا آهيون، يعني Git.
Git بنياديات
Git اسان جي ڪوڊ لاء ورهايل ورزن ڪنٽرول سسٽم آهي. اسان کي ان جي ضرورت ڇو آهي؟ ورهايل ٽيمن کي انهن جي ڪم کي منظم ڪرڻ لاء ڪجهه قسم جي سسٽم جي ضرورت آهي. اهو ضروري آهي ته تبديلين کي ٽريڪ ڪرڻ لاء جيڪي وقت سان ٿينديون آهن. اهو آهي، اسان کي قدم قدم ڏسڻ جي ضرورت آهي ته ڪهڙيون فائلون تبديل ڪيون ويون آهن ۽ ڪيئن. اهو خاص طور تي اهم آهي جڏهن توهان تحقيق ڪري رهيا آهيو ته هڪ واحد ڪم جي حوالي سان ڪهڙي تبديلي آئي، تبديلين کي واپس ڪرڻ ممڪن بڻائي.Git انسٽال ڪرڻ
اچو ته پنهنجي ڪمپيوٽر تي جاوا انسٽال ڪريون.ونڊوز تي انسٽال ڪرڻ
عام طور تي، توهان کي ڊائون لوڊ ۽ هلائڻ جي ضرورت آهي هڪ exe فائل. هتي سڀ ڪجھ سادو آهي: پهرين گوگل لنڪ تي ڪلڪ ڪريو ، انسٽال ڪريو، ۽ بس. هن کي ڪرڻ لاء، اسان ونڊوز پاران مهيا ڪيل بش ڪنسول استعمال ڪنداسين. ونڊوز تي، توهان کي هلائڻ جي ضرورت آهي Git Bash. ھتي آھي اھو ڪيئن ڏسڻ ۾ اچي ٿو Start Menu ۾:

لينڪس تي انسٽال ڪرڻ
عام طور تي Git لينڪس جي تقسيم جو حصو آهي ۽ اڳ ۾ ئي نصب ٿيل آهي، ڇاڪاڻ ته اهو هڪ اوزار آهي جيڪو اصل ۾ لينڪس ڪنييل ڊولپمينٽ لاء لکيو ويو آهي. پر حالتون آهن جڏهن اهو نه آهي. چيڪ ڪرڻ لاء، توهان کي ٽرمينل کولڻ ۽ لکڻ جي ضرورت آهي: git --version. جيڪڏهن توهان هڪ سمجھڻ وارو جواب حاصل ڪيو، ته پوء ڪجھ به نصب ڪرڻ جي ضرورت ناهي. هڪ ٽرمينل کوليو ۽ Ubuntu تي Git انسٽال ڪريو . مان Ubuntu تي ڪم ڪري رهيو آهيان، تنهنڪري مان توهان کي ٻڌائي سگهان ٿو ته ان لاءِ ڇا لکجي: 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
جيڪڏهن توهان کي ڪنهن خاص منصوبي لاءِ ليکڪ کي تبديل ڪرڻ جي ضرورت آهي، ته توهان "--عالمي" کي ختم ڪري سگهو ٿا. هي اسان کي هيٺيون شيون ڏيندو:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
ٿورڙو نظريو...
موضوع تي غور ڪرڻ لاء، اسان کي توهان کي ڪجهه نوان لفظن ۽ عملن سان متعارف ڪرائڻ گهرجي ...- git مخزن
- انجام ڏيڻ
- شاخ
- ملائڻ
- تڪرار
- ڇڪڻ
- ڌڪ
- ڪجھ فائلن کي ڪيئن نظر انداز ڪجي (.gitignore)
گٽ ۾ اسٽيٽس
گيت ۾ ڪيترائي مجسما آھن جن کي سمجھڻ ۽ ياد ڪرڻ جي ضرورت آھي:- اڻ ٽريڪ ٿيل
- تبديل ٿيل
- اسٽيج ڪيو
- انجام
توهان کي اهو ڪيئن سمجهڻ گهرجي؟
اهي حالتون آهن جيڪي اسان جي ڪوڊ تي مشتمل فائلن تي لاڳو ٿين ٿيون:- ھڪڙي فائل جيڪا ٺاھي وئي آھي پر اڃا تائين مخزن ۾ شامل نه ڪئي وئي آھي "غير ٽريڪ ٿيل" حيثيت رکي ٿي.
- جڏهن اسان فائلن ۾ تبديليون آڻيون ٿا جيڪي اڳ ۾ ئي 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 جيڪو ”اڻ ٽريڪ ٿيل“ آھي، جنھن کي اسان گٽ مخزن ۾ شامل ڪرڻ نٿا چاھيو. هاڻي اسان کي ڏسڻ گهرجي .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 فائل ٻيهر تبديل ڪرڻ جي ضرورت آهي. پر هاڻي هي فائل ماسٽر برانچ ۾ به تبديل ٿي ويندي. ٻين لفظن ۾، اهو متوازي ۾ تبديل ٿيندو. گٽ اهو معلوم ڪرڻ جي قابل نه هوندو ته ڇا ڪجي جڏهن اسان چاهيون ٿا اسان جي نئين ڪوڊ کي ماسٽر برانچ ۾ ضم ڪرڻ. اچو ته هلون! اسان ماسٽر جي بنياد تي هڪ نئين شاخ ٺاهينداسين، 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"
۽ ھاڻي سڀ کان وڌيڪ دلچسپ نقطو: اسان کي تبديلين کي ضم ڪرڻ جي ضرورت آھي فيچر/add-header برانچ مان ماسٽر ڏانھن. اسان ماسٽر برانچ ۾ آهيون، تنهنڪري اسان کي صرف لکڻ جي ضرورت آهي:
git merge feature/add-header
پر نتيجو نتيجو ٿيندو test_resource.txt فائل ۾ تڪرار: 

- ماسٽر برانچ ۾ هن لڪير تي جيڪي تبديليون هيون اهي "<<<<<<< HEAD" ۽ "=======" جي وچ ۾ مليا آهن.
- تبديليون جيڪي فيچر/add-header برانچ ۾ هيون اهي "=======" ۽ ">>>>>> فيچر/add-header" جي وچ ۾ مليون آهن.

git status

git add *.txt

git commit

ريموٽ ريپوزٽريز سان ڪم ڪرڻ
آخري قدم اهو آهي ته ڪجهه وڌيڪ حڪمن کي ڳولڻ لاء جيڪي ريموٽ مخزن سان ڪم ڪرڻ جي ضرورت آهي. جيئن مون چيو، ريموٽ ريپوزٽري ڪجهه هنڌ آهي جتي مخزن کي محفوظ ڪيو ويندو آهي ۽ جتان توهان ان کي ڪلون ڪري سگهو ٿا. ڪهڙي قسم جا ريموٽ ريپوزٽريون آهن؟ مثال:-
GitHub ذخيرو ۽ تعاون جي ترقي لاء سڀ کان وڏو اسٽوريج پليٽ فارم آهي. مون اڳئين مضمونن ۾ اڳ ۾ ئي بيان ڪيو آهي.
مون تي عمل ڪريو GitHub تي . آئون اڪثر اتي پنهنجو ڪم ڏيکاريان ٿو انهن علائقن ۾ جيڪي آئون ڪم لاءِ پڙهندو آهيان. -
GitLab هڪ ويب تي ٻڌل اوزار آهي DevOps لائف سائيڪل لاءِ اوپن سورس سان . اهو هڪ Git -based سسٽم آهي ڪوڊ ريپوزٽريز کي منظم ڪرڻ لاءِ پنهنجي وڪي، بگ ٽريڪنگ سسٽم ، CI/CD پائپ لائن، ۽ ٻين ڪمن سان.
خبرن کان پوء Microsoft خريد ڪيو GitHub، ڪجهه ڊولپرز انهن جي منصوبن کي GitLab ۾ نقل ڪيو. -
BitBucket هڪ ويب سروس آهي پروجيڪٽ جي ميزباني ۽ تعاون واري ترقي لاءِ مرڪيوريل ۽ گٽ ورزن ڪنٽرول سسٽم تي ٻڌل آهي. هڪ دفعي ان کي 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