در این مقاله تمام سعی ما بر این است که بتوانیم خلاصه و چکیده ای از مهمترین مطالب و دستوراتی که بایستی در رابطه با کار با نرم افزار گیت بدانید بیان کنیم و در عمل آموزش مختصر و مفید git را داشته باشیم.


همانطور که میدانید گیت را میتوان یک سیستم کنترل نسخه برای مدیریت کدنویسی و تغییرات احتمالی برنامه نویسان در یک تیم دانست.
به بیان دیگر مسئولیت هماهنگی و کنترل عملکرد تمام اعضای یک تیم برنامه نویسی را دارد تا بتوان از آن برای ردیابی تغییرات در مجموعه فایل ها استفاده کرد.
اهدافی را برای خود دنبال می کند که از مهمترین آنها می توان به سرعت بخشیدن به مدیریت یک پروژه و یکپارچگی داده های پروژه اشاره کرد.
گیت مانند سایر سیستمهای کنترل نسخه از قبیل سابورژن، CVS و مرکوریال است.
Git توسط لینوس توروالدز در سال ۲۰۰۵ برای توسعه هسته لینوکس ایجاد شد.
منظور از کنترل نسخه ، سیستمی است که در طول زمان تغییرات هر کدام از فایل های پروژه را ذخیره و ثبت می کند تا بتوانیم بعداً ورژن های متفاوت پروژه را به خاطر بیاوریم.
تفاوت GIT با GITHUB و GITLAB
اما در اینجا ما با سه مفهوم گیت ، گیت هاب و گیت لب مواجه هستیم فهمیدن تفاوت بین آنها بایستی ابتدا کاربرد هر کدام را بدانیم.
گیت یک سیستم کنترل ورژن پروژه (vcs) می باشد. این سرویس به صورت متن باز می باشد و یک سرویس میزبان تحت وب محسوب می شود. توسط سیستم های کنترل ورژن پروژه شما می تونید به راحتی تمامی تغییراتی که روی پروژه اعمال میشه رو نگهداری کنید و همچنین سوابق تغییرات رو هم داشته باشید.
سایت اصلی : https://git-scm.com
با مراجعه به این صفحه به راحتی میتوانید آخرین ورژن این نرم افزار را مطابق با سیستم عامل خود رایگان دانلود کنید.

اما حالا گیت هاب چیست ؟ میشه گفت گیت هاب یک شبکه اجتماعی یا یک سرویس میزبانی وب برای برنامه نویسان می باشد.
شما میتونید توی گیت هاب ثبت نام کنید و یک Repository جدید برای خودتون ایجاد کنید و کدها و پروژه هایی رو که نوشتید درون اون قرار بدید تا سایر برنامه نویسان دنیا بتونن کدهای شما رو ببینن، اون رو اصلاح کنن، از کدهای شما استفاده کنن و کدهای شما رو توسعه بدن و یا بهینه کنن.
مراجعه به سایت : https://github.com

گیت هاب دارای دو سرویس عمومی و خصوصی می باشد. سرویس عمومی GitHub به صورت رایگان و سرویس خصوصی با پرداخت هزینه می باشد.
گیت لب هم دقیقا کاری مشابه با گیت هاب انجام میدهد. یعنی در واقع یک سرویس میزبانی وب و یا یک شبکه اجتماعی از برنامه نویسان هست که میتوانید کدها و پروژه های خودتون رو در آن با سایر برنامه نویسان دنیا به اشتراک بگذارید.
گیت لب توسط زبان برنامه نویسی Go و Ruby طراحی و پیاده سازی شده و شرکتهای برندی مثل IBM، Sony، علی بابا و ناسا از آن استفاده میکنند. برنامه نویسان ایرانی معمولا به دلیل تحریم ها در استفاده از سرویس گیت لب دچار مشکل هستند.
گیت لب امکانات حرفه ای تری برای سطح دسترسی به سورس ها و تغییرات سورس ارائه می دهد. یعنی شما میتوانید سطح دسترسی کاملی برای هر فرد تعریف کنید یا آن را تغییر دهید. اما در گیت هاب فقط میتوانید تعیین کنید که یک نفر می تواند به ریپازیتوری شما دسترسی داشته باشد یا خیر.
بصورت کلی گیت لب حرفه ای تر و پرکاربرتر از گیت هاب میباشد، هرچند که گیت هاب قدیمی تر است.
مراجعه به سایت : https://gitlab.com

شروع کار با گیت
ابتدا از طریق لینک زیر وارد سایت گیت شده و آخرین ورژن مطابق با سیستم عامل خود را دانلود و آن را نصب کنید.
https://git-scm.com/downloads
مطابق معمول همیشه یک فولدر ساخته و بعد از باز کردن CMD به مکان فولدر رفته و در داخل command prompt دستور زیر را بزنید:
git init

در این صورت درپوشه شما بایستی یک فولدر با نام .get که به صورت hidden می باشد به وجود می آید. این دایرکتوری همان مسیری است که گیت دیتابیس و تنظیمات خود را در آن ذخیره میکند تا تغییرات پروژهی شما را دنبال کند.
clone repository یا کپی کردن یک مخزن
اما یک راه دیگری وجود دارد که به گیت کلونینگ معروف است. در این روش شما قصد ندارید یک repository یا مخزن را از ابتدا بسازید و قصد دارید یکی از مخزن های موجود در سایت گیت هاب را دانلود کرده و از آنجا به بعد در پروژه سهیم شوید.
فقط کافیست دستور زیر را وارد نمایید:
git clone your url
مثال :
git clone https://github.com/shirinsoft/parnian-framework
افزودن یا ویرایش فایل ها
در این مرحله دو فایل در دایرکتوری خود می سازیم مطابق تصویر زیر و بعد چند خط کد در آنها وارد میکنیم.
مهم نیست به چه زبانی کار میکنید فایل PHP بسازید و کد php در آن بزنید ، یا اینکه به زبان GO کار کنید…
مهم نیست ما در اینجا به طور مثال با html کارمان را انجام میدهیم.

در CMD دستور زیر را وارد کنید:
git status
این دستور وضعیت حاضر مخزن کار شما را نشان میدهد. نتیجهی به نمایش درآمده باید مشابه تصویر زیر باشد که در آن هر دو فایل ما بهعنوان یک فایل untracked یا بررسینشده فهرست شده است.

معمولاً در این پروژه ها یک فایل با نام README.md ساخته می شود و در آن اطلاعات پروژه ، نام پروژه، نام و نشانی ایمیل قرار داده می شود.
اگر این کار را بکنید و مجدداً git status را کامند بزنید ، مشاهده می کنید که فایل README نیز به untracked اضافه میشود.

دستور استیج در گیت STAGE
فرض کنید ما در فایل index.html مقداری کد نوشتیم و آن را می خواهیم ذخیره کنیم .
اصطلاحاً برای ثبت تغییرات آن فایل را استیج می کنیم. فایلی که استیج میشود؛ یعنی تغییرات آن انجام گرفته اما هنوز در مخزن اصلی اعمال نشده است.
دستور زیر را برای فایلی که می خواهید در حالت STAGING ببرید وارد کنید:
git add your file
مثال :
git add index.html
و مجدد git status را وارد نمایید. نتیجه مشابه تصویر زیر است:

همانطور که تصویر میبینید فایل ایندکس در برنچ (BRANCH) یا شاخه اصلی قرار گرفته و دو فایل دیگر ما همچنان Untracked باقی مانده اند.
حال مشابه تصویر زیر، فایل index.html را باز کرده و آن را ویرایش کنید:

و حال مجدد دستور git status را بزنید. نتیجه مشابه تصویر زیر خواهد بود:

همانطور که در تصویر مشاهده می فرمایید، فایل ایندکس همچنان در شاخه اصلی یا همان برنچ مستر قرار دارد و دیگرuntracked نیست. اما به خاطر اینکه تغییراتی در آن اعمال شده است با لیبل modified نشانه گذاری شده است.
پس میتوانید مجدد git add index.html را بزنید و نتیجه را در git status ببینید.
تنظیمات قبل از COMMIT
در این مرحله همهچیز آمادهی اعمال تغییرات یا commit است؛ اما قبل از اینکار باید با تنظیمات ویرایشگر که گیت هنگام نوشتن پیامهای کامیت مورد استفاده قرار میدهد آشنا شوید.
VIM میتواند به عنوان یک ادیتور مناسب انتخاب شود، پس برای نصب آن دستور زیر را بزنید:
git config --global core.editor vim
ایجاد اولین تغییر
این روند در تمام سیستم های کنترل نسخه یکسان است.
دستوgit commit را بیزنید، توضیح و دلیلی برای آن چه تغییری ایجاد کرده اید وارد می کنید و سپس آن را ثبت می کنیم مطابق شکل زیر:
git commit
تیتر توضیح کوتاه و در حد ۷۲ کاراکتر باشد و بهطور خلاصه تغییر اعمالشده را اعلام کند. دیگر اینکه دارای توضیحی بلندتر باشد که بهطور مجزا در سطری دیگر جزئیات تغییر اعمالشده را توضیح دهد. البته مورد دوم اختیاری است و الزامی برای نوشتن آن وجود ندارد.
بنابراین، پیام فوق را در ویرایشگر وارد و ذخیره کنید و خارج شوید.
برای ذخیره در ویرایشگر VIM از دستور زیر استفاده کنید:
Esc
بزنید- بزنید
:w
- بزنید
Enter

دستور git diff
این دستور مشابه دستور Linux diff دو فایل را با هم مقایسه میکند و تغییرات فایل جدیدتر را نمایش میدهد.
بطور مثال دستور git diff index.html را میزنیم تا تغییرات جدیدترین نسخه نسبت به اولین نسخه به نمایش درمیآید. اما این دستور تغییرات را نسبت به فایل اولیه نشان میدهد، نه فایل استیجشده!
پس اگر میخواهید تغییرات استیج شده را مشاهده بفرمایید، دستور زیر را بزنید:
git diff --cached index.html

در تصویر بالا، هرجا علامت منفی دیدید، یعنی چیزی کم و هرجا علامت مثبت دیدید، یعنی چیزی اضافه شده است.
برنچ یا شاخه در گیت – BRANCH
امیدواریم تا به اینجای مقاله آموزش مختصر و مفید git ، مورد پسند واقع شده باشد. حال وقت آن است که برویم سراغ یکی از ویژگی های منحصر به فرد گیت که شاخه بندی پروژه است.
فرض کنید برای یک پروژه چند نفر برنامه نویس کار میکنند. اگر قرار باشد صحیح و خطای خود را بر روی فایل اصلی پروژه انجام دهند میتواند اختلالاتی در کار سایر اعضای ایجاد کند و یا کلاً صدماتی به کل پروژه بزند.
برنچینگ یا شاخه بندی از ویژگی های پیشرفت گیت است ست و به شما اجازه می دهد اعضای تیم خود شاخه های فرعی داده تا بتوانند آزمون و خطا خود را بر روی آن انجام داده و سپس بعد از مطمئن شدن و ایجاد اطمینان تغییرات خود را با کد اصلی MERGE کنند.
تا به اینجای آموزش، تمام فعالیت ما روی شاخه اصلی یا master branch بوده است.
قبل از ساختن برنچ جدید، بایستی یک commit داشته باشید. پس تغییری در فایل index انجام داده، سپس git add index.html را زده و سپس کامند زیر را بزنید:
git commit -m "Added a new file"

خوب… حالا دستور زیر را بزنید تا ببینیم چند BRANCH در مجموعه داریم.
git branch
همانطور که در تصویر میبینید، فعلا فقط یک branch مستر داریم.

اما میتوانیم با کد زیر یک برنچ فرعی بسازیم:
git branch <name>
مثال:
git branch arsam
و در مرحله بعد :
git branch
لیست برنچ های موجود را خواهید دید، مطابق تصویر زیر:

آن ستاره پشت هر اسمی باشد، یعنی در آن شاخه هستیم. برای تغییر شاخه از دستور زیر استفاده کنید:
git checkout <filename>
مثال:
git checkout arsam
که نتیجه زیر را خواهد داشت:

یک فایل به نام styles.css درست میکنیم و مقداری را در داخل آن مینویسیم و سپس آن را طبق کدهای زیر کامیت میکنیم:
git add styles.css
git commit -m "stylesheet added"
میبینیم که در پیامی که پس از کامیت کردن در معرض دیدمان قرار گرفته است، آمده که کامیت مذکور در شاخهٔ arsam
افزوده شده است مطابق تصویر زیر:

حال مجدد به بِرَنچ master
سوئیچ کنید با کد زیر :
git checkout master
اکنون اگر به محتویات داخل پوشه نگاهی بیندازیم، خواهیم دید که فایل styles.css حذف شده است و این مسئله از آنجا ناشی میگردد که ما این فایل را در بِرَنچ arsam افزودهایم و بِرَنچ master هیچ اطلاعی از این موضوع ندارد.
حذف یک BRANCH در GIT
برای این که شما یک شاخه را در گیت حذف نمایید، بایستی از کد زیر استفاده کنید:
git branch -d <branchName>
اما در ادامه خطایی از ما میگیرد که این شاخه با شاخه اصلی ادغام نشده است(اگر هیچ کامیتی در آن نکرده باشید، خطا نمیگیرد) که برای ادامه، باید کد زیر را بزنید:
git branch -D <branchName>
مثال:
git branch -D aaa

دستور دیگر ساخت BRANCH که همزمان ما را به آن شاخه سوییچ هم میکند :
git checkout -b new-branch
ادغام تغییرات با شاخه اصلی یا master
همانطور که میدانید ، سایر دولوپرها در شاخه های فرعی مشغول به کار هستند، بعد از پایان صحیح و خطا و اطمینان از درستی کارشان، باید در نهایت کد آنان به فایل اصلی که در مسیر master موجود میباشد ادغام یا در اصطلاح MERGE شود. برای اینکار به شاخه اصلی رفته (سوییچ کنید git checkout master ) و کد زیر را بزنید:
git merge <branchName>
مثال:
git merge arsam
همانطور که در تصویر زیر میبینید، شاخه فرعی ARSAM با شاخه اصلی MASTER ادغام شد و اطلاعات و فایل های آن به پروژه اصلی اضافه گردید.

آموزش انتقال پروژه از گیت به گیتهاب
حال وقت آن رسیده که پروژه مان را به مخزن گیت هاب منتقل کنیم. بدون توضیح اضافی ابتدا تمام فایل های را با دستور زیر کامیت کنید:
git add .
git commit -m "your comment"
نقطه در کد بالا به معنای تمامی فایل ها میباشد.

و بعد دستور گیت استتوس را بزنید و وضعیت حال را مشاهده کنید:
git status

دیگر چیزی برای کامیت وجود ندارد و شرایط برای ارسال پروژه به مخزن گیت هاب آماده است.
در این مرحله وارد سایت github.com شده و ثبت نام کنید و سپس به اکانت خود لاگین کنید.
طبق تصویر زیر، روی آیکون پلاس کلیک کرده و سپس گزینه new repository را انتخاب نمایید.

مانند تصویر زیر، تمام قسمت هایی که مشخص شده است را پر کنید:

اگر مراحل را درست رفته باشید، باید با تصویر زیر مواجه شوید:

در تصویر بالا تمام مراحلی که باید در قبل از ارسال پروژه به مخزن طی میکردیم، در قسمت یکم و ادامه کار در قسمت دوم آورده شده است.
اما قبل از ادامه توضیحات و آموزش دستور push در نظر داشته باشید به سادگی میتوانید در همین مرحله و بدون کامند، فایل های خود را به repository خود منتقل کنید.
فقط کافیست بروی گزینه uploading an existing file کلیک نمایید و طبق دو تصویر زیر، فایل های را آپلود نمایید.

در تصویر زیر ما فایل های یک پروژه فرضی را بدون اینکه فشرده و به حالت .zip درآوریم، با درگ و دراپ به این صفحه منتقل میکنیم و منتظر میمانیم تا آپلود شود. مطابق تصویر زیر:
در ادامه میتوانید یک کامیت هم از طریق فرم زیر ارسال کنید و در انتها روی گزینه commit change کلیک کنید.

کار تمام است و همانطور که در تصویر زیر مشاهده میکنید، صفحه ساخته شده و قابل دانلود و clone کردن است.


اما از روش کد بصورت زیر عمل کنید.
پس برای ارسال فایل ها کدهای زیر را به ترتیب بزنید:
git remote add origin git@github.com:parsaGhorbanian/myfrst.git
git branch -M main
git push -u origin main

مشابه تصویر بالا، اگر مراحل را به درستی طی کرده باشید، باید یوزرنیم و پسورد هنگام ثبت نام در گیت هاب را وارد کنید.
توجه داشته باشید در هنگام نوشتن پسورد، شما مینویسید ولی برای امنیت، تایپ شما نشان داده نمیشود. پس با خیال راحت ادامه دهید!
واقعا ممنون از اینکه اینقدر زحمت میکشید. خیلی مفید بود. خدا خیرت بده استاد
خداروشکر که مفید بوده