آموزش گیت و گیت هاب از شروع تا آپلود پروژه – به زبان ساده
گیت ابزار اوپن سورسی است که برای کنترل نسخه به کار برده میشود. این ابزار برای بار اول در سال ۲۰۰۵ و توسط توسعهدهندگان لینوکس توسعه داده شد. وبسایت گیت هاب در سال ۲۰۰۸ راهاندازی شد. گیت هاب ابزارهایی را برای کار با سیستم کنترل نسخه گیت فراهم کرده است. برای استفاده از گیت نیازی به داشتن اکانت در گیت هاب ندارید. اما بدون آن نمیتوانید از گیت هاب استفاده کنید. ابزارهای دیگری شبیه به گیت هاب مانند گیت لب و «BitBucket» وجود دارند. در زبان گیت به همه اینها ریموت گفته میشود. استفاده از آنها کاملا اختیاری است. برای استفاده از گیت به ریموت نیازی ندارید. اما استفاده از ریموت، اشتراکگذاری کدها با دیگران را راحتتر میکند. گیت هاب مشهورترین ریموت گیت است. برای همین در این مطلب به آموزش گیت و گیت هاب پرداختیم.
- با ماهیت گیت و گیت هاب آشنا شده و تفاوت واقعی بین آنها را یاد میگیرید.
- روش ساخت مخزن محلی گیت، مخزن گیت هاب و اضافه کردن فایل به آنها را یاد میگیرید.
- میآموزید که فایل و تغییرات جدید را چگونه به محیط استیج اضافه کرده و از آنجا commit کنید.
- روش ساخت شاخههای جدید و حرکت به جلو و عقب در commit-ها را یاد میگیرید.
- دستور لازم برای ادغام کردن شاخههای مختلف در همدیگر را میآموزید.
- با روش ارسال و واکشی commit از مخزن محلی به گیت هاب و برعکس، آشنا میشوید.


در این مطلب از مجله فرادرس روش کار با گیت و گیت هاب را آموزش میدهیم. این دو مفهوم با یکدیگر تفاوت دارند. ابتدا پیشنیازهای لازم برای کار با گیت و گیت هاب را معرفی میکنیم. در این بخش روش نصب گیت را به طور کامل توضیح میدهیم. در بخش بعد، تمام مراحل کار با گیت را از ساخت مخزن تا افزودن فایلها و دایرکتوریها به آن مرور میکنیم. بعد از آن هم مهمترین دستورات گیت مانند init و add و commit و push و غیره را به ترتیب معرفی میکنیم.

پیشنیاز: نصب گیت و راهاندازی اکانت در گیت هاب
اولین مرحله از آموزش گیت و گیت هاب مربوط به نصب و راهاندازی نرمافزار گیت است. راهاندازی اکانت گیت هاب رایگان بوده و به سادگی انجام میشود. اما قبل از آن باید نرمافزار اختصاصی گیت را نصب کنیم.
در این قسمت، دستورالعمل نصب این ابزار را بر روی سیستمعاملهای لینوکس، «MacOS» و ویندوز آموزش دادهایم.
نصب گیت بر روی لینوکس
برای نصب کردن گیت بر روی لینوکس میتوانیم از «Package Manager» خود سیستم عامل استفاده کنیم. به عنوان مثال اگر از نسخه لینوکس فدورا - یا سیستمهای شبیه به آن مانند «RHEL» یا «CentOS» - استفاده میکنید، برای نصب گیت میتوانید از دستور dnf استفاده کنید.
$ sudo dnf install git-allاما اگر از لینوکسهای بر پایه دبیان یا نسخههای شبیه به آن - مانند اوبونتو - استفاده میکنید، باید دستور apt را به کار ببرید.
$ sudo apt install git-allنصب گیت بر روی MacOS
برای نصب کردن گیت بر روی MacOS روشهای مختلفی وجود دارند. احتمالا سادهترین روش استفاده از «ابزارهای خط فرمان ایکس کد» (Xcode Command Line Tools) است. در نسخههالی ۱۰٫۹ به بعد «Mavericks» از سیستم عامل MacOS فقط کافی است که دستور git را برای اولین بار در ترمینال اجرا کنیم. نمونه استفاده از این دستور را در کادر پایین نوشتهایم.
$ git --versionاگر گیت از قبل بر روی سیستم نصب نشده باشد، خود سیستم عامل پیغامی را درباره نصب گیت را نشان میدهد. اما اگر نسخه بهروزتری از گیت را بخواهید، باید آن را با کمک فایل «نصبکننده باینری» (Binary Installer)، نصب کنید. در سیستم عامل MacOS میتوانید فایل نصب کننده را از سایت رسمی گیت دانلود کنید (+).

نصب گیت بر روی ویندوز
برای نصب گیت بر روی ویندوز هم چند روش مختلف وجود دارد. مرسومترین آنها استفاده از فایل نصب و دانلود آن از سایت رسمی گیت (+) است. فقط کافی است که به سایت مورد نظر رفته و عملیات دانلود را شروع کنید. توجه کنید که این پروژه «گیت برای ویندوز» (Git for Windows) نام دارد.
نصب از منبع
بعضی از کاربران ممکن است ترجیح دهند که کدهای گیت را به صورت مستقیم از منبع، دانلود کرده و بر روی سیستم خود نصب کنند. زیرا با این روش، جدیدترین نسخه ممکن بر روی کامپیوتر نصب میشود. فایلهای نصبی باینری معمولا کمی عقبتر هستند. از آنجا که گیت با سرعت زیادی هر سال ارتقا پیدا کرده و بهتر میشود، تفاوت بین این دو نسخه، اکنون کمتر شده است.
برای نصب مستقیم گیت از کدهای منبع به چند کتابخانه مهم نیاز دارید. عملکرد گیت به این کتابخانهها وابسته است.
- «autotools»
- «curl»
- «zlib»
- «openssl»
- «expat»
- «libiconv»
فرض کنیم که سیستم عامل مورد استفاده از کد dnf یا کد apt-get پشتیبانی میکند. در این صورت برای نصب کردن پیشنیازهای لازم، کافی است یکی از دستورات زیر را به کار ببرید.
نکته: سیستم عامل فدورا از دستور dnf و توزیعهای سیستم عامل دبیان از دستور apt-get استفاده میکنند.
این گزینهها حداقل پیشنیازهایی هستند که میتوان با کمک آنها کدهای گیت را کامپایل کرده و اپلیکیشن مورد نظر را ایجاد کرد.
$ sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel \
openssl-devel perl-devel zlib-devel
$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \
gettext libz-dev libssl-dev
برای اضافه کردن مستندات بیشتر - در قالبهایی مانند «Doc» و «Html» یا «Info» - لازم است که چند وابستگی دیگر را هم بر روی سیستم خود نصب کنید.
$ sudo dnf install asciidoc xmlto docbook2X
$ sudo apt-get install asciidoc xmlto docbook2xاگر از لینوکسهای نسخه دبیان، اوبونتو و سایر انشعابهای اوبونتو استفاده میکنید، باید پکیج install-info را هم نصب کنید.
$ sudo apt-get install install-infoاگر از توزیعهای «RPM» مانند Fedora و RHEL و لینوکسهای منشعبشده از RHEL استفاده میکنید، باید پکیج getopt را نیز نصب کنید. این پکیج از قبل بر روی توزیعهای دبیان نصب شده است.
$ sudo dnf install getoptدر ضمن، کاربران RHEL و لینوکسهای منشعب شده از RHEL باید دستور زیر را هم در ترمینال نوشته و اجرا کنند.
$ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texiزیرا نام فایل نصب کننده باینری در نسخههای مختلف متفاوت است.
بعد از نصب کردن تمام پیشنیازهای گیت، وقت دانلود آخرین نسخه این ابزار به شکل «Tarball» است. نسخه Tarball گیت را میتوانید از جاهای مختلفی دانلود کنید. در فهرست پایین، دو مورد از فضاهای امن برای دانلود را معرفی کردهایم.
سایت رسمی گیت هاب معمولا جدیدترین نسخهها را به صورت شفاف در اختیار کاربران قرار میدهد. اما سایت «Kernel.org» امضاهای انتشار را هم دارد. این ویژگی برای کسانی خوب است که میخواهند دانلود نرمافزار را تایید کنند.

وقتی نسخه Tarball را دانلود کردید، با استفاده از دستورات زیر، میتوانید کدهای گیت را کامپایل کرده و این ابزار را بر روی سیستم خود نصب کنید.
$ tar -zxf git-2.8.0.tar.gz
$ cd git-2.8.0
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-infoبعد از نصب گیت برای بهروزرسانیهای بعدی، میتوانید از از خود گیت کمک بگیرید. در کد پایین، دستور استفاده از گیت را برای بهروزرسانی خودش نوشتهایم.
در این مطلب آموزشی از گیت بر روی خط فرمان استفاده میکنیم. البته چند رابط کاربری گرافیکی بسیار خوب برای گیت ساخته و ارائه شدهاند. اما یاد گرفتن گیت با استفاده از دستورات مستقیم آن کمی سادهتر است. بعد از حرفهای شدن در کار با دستورات گیت میتوانید با نسخه رابط کاربری آن هم کار کنید.
ابتدا گیت را دانلود کرده و بر روی سیستم خود نصب میکنیم. وقتی اینکار انجام شد لازم است که اکانتی هم در سایت گیت هاب برای خود بسازیم. برای ساخت اکانت گیت هاب میتوانیم از حساب گوگل خود هم استفاده کنیم.
- وبسایت برای راهاندازی اکانت در گیت ها(+)
در بخشهای بعد، کدهای مهم گیت را توضیح دادهایم. این کدها از دستور مربوط به ساخت مخزن شروع شده و تا کدهای پیشرفتهتر ادامه پیدا میکنند.
مرحله اول: ساخت مخزن گیت محلی
در زمان ساخت پروژه جدید بر روی کامپیوتر خود از گیت استفاده کنید. برای این کار ابتدا باید «مخزن» (Repository) گیت جدیدی ایجاد کنید. به این مخزنها به صورت خلاصه «Repo» هم گفته میشود.
این کار را با نوشتن دستورهای گیت در ترمینال انجام میدهیم.
- برای شروع به کار ابتدا ترمینال را باز کنید.
- سپس با استفاده از دستور cd به فضایی هدایت شوید که میخواهید پروژه جدید خود را در آنجا راه اندازی کنید.
دستور cd مخفف عبارت «Change Directory» به معنای تغییر دادن دایرکتوری است. برای مثال، میخواهیم فولدری به نام myproject در دسکتاپ خود ساخته و وارد آن بشویم. این کار را با اجرای دستورات زیر انجام میدهیم.
برای راهاندازی اولیه مخزن گیت در بخش اصلی فولدر خود باید از دستور git init استفاده کنیم.
مرحله دوم: اضافه کردن فایل جدید به repo
کار خود را ادامه داده و فایل جدیدی به پروژه اضافه میکنیم. برای انجام این کار میتوانیم از ویرایشگرهای متن یا دستور touch استفاده کنیم. به عنوان مثال، دستور touch newfile.txt فقط فایل خالی به نام newfile.txt ساخته و ذخیره میکند.

دستور git init در هر فولدری که اجرا شود، آن فولدر را به مخزن گیت تبدیل میکند. به محض اینکه فایل جدیدی در مخزن گیت بسازید یا یکی از فایلهای موجود را تغییر بدهید، گیت بلافاصله متوجه تغییر در مخزن میشود. اما گیت هیچ وقت تغییرات به وجود آمده در فایلهای جدید را ردیابی نمیکند. مگر اینکه به شکل صریح این مسئله را به گیت گفته باشیم. گیت فقط تغییرات فایلهایی را مدیریت و ذخیره میکند که آنها را معرفی کرده باشیم.
برای همین، اگر بخواهیم گیت تغییرات فایل مشخصی را پیگیری کند، باید از دستورهای مخصوص این کار، استفاده کنیم.
در کدهای بالا دستور لازم برای ساخت فایل mnelson.txt را نوشته و عملکرد این دستور را بررسی کردهایم.

برای دیدن اینکه گیت از وجود چه فایلهایی مطلع است، میتوانیم دستور git status را به کار میبریم. این دستور را بعد از ساختن فایل جدید، اجرا میکنیم.
خروجی بالا به معنای آن است که گیت از ساخته شدن فایل جدیدی به نام mnelson.txt مطلع است. اما تا وقتی که از دستور git add استفاده نکنیم، گیت هیچ کاری درباره این فایل انجام نمیدهد.
توجه: یکی از سردرگم کنندهترین مسائل در زمان یادگیری گیت، مربوط به شناخت مفهوم «محیط عملیاتی» (Staging Environment) و روش کار آن با دستور commit است.
- به مجموعهای از تغییرات ثبت شده commit گفته میشود.
- این تغییرات یا از ابتدای پروژه ثبت میشوند، یا تغییراتی هستند که از آخرین commit به بعد انجام دادهایم. برنامه نویسان با انجام دادن کارهایی مانند کدنویسی ساده یا تغییر دادن فایلها، مخزن خود را دستکاری میکنند. سپس به گیت میگویند که این تغییرات را در commit ثبت کند.
- commit-ها بخش اصلی پروژه هستند. زیرا به توسعه دهندگان اجازه میدهند که به رونوشتهای قبلی پروژه منتقل شوند.
- برای اینکه به گیت بگوییم چه وقتی و چه حالتی از پروژه را به صورت commit یا رونوشت ذخیره کند از محیط عملیاتی یا استیج استفاده میکنیم.
- به محض اینکه کاربر، کوچکترین تغییری در مخزن خود ایجاد کند، گیت متوجه آن میشود. اما برای ذخیره کردن حالت فعلی پروژه و تغییرات انجام شده، صبر میکند تا دستور مشخصی از طرف کاربر صادر شود.
- برای قرار دادن هر فایلی در commit ابتدا باید آن را به محیط استیج اضافه کنیم. این کار را هم با کمک دستور git add <filename> انجام میدهیم.
- بعد از اینکه تمام فایلهای مورد نظر به محیط استیج اضافه شدند از دستور git commit استفاده کرده و آنها را در commit ذخیره میکنیم.
محیط استیجینگ ممکن است با نام محیط ایندکس هم شناخته بشود. روش کامل افزودن فایل به محیط استیج را در بخش بعدی توضیح دادهایم.
مرحله سوم: افزودن فایل به محیط استیج
برای افزودن فایل به محیط استیج در گیت باید از دستور git add استفاده کنیم. اگر بعد از نوشتن این دستور دوباره کد git status را اجرا کنیم، میبینیم که گیت فایل مورد نظر را به محیط استیج اضافه کرده است. به خط Changes to be Committed توجه کنید.
برای یادآوری باید اشاره کنیم که فایل mnelson.txt هنوز به commit اضافه نشده است. اما اکنون مرحله اول انجام این کار را پشت سر گذاشتهایم.
راهکار فرادرس برای آموزش گیت چیست؟
«گیت» (Git) مشهورترین و پرکاربردترین سیستم کنترل نسخه در جهان است. با اینکه بدون گیت هم میتوان برنامه نویسی کرد ولی استفاده از گیت بهخصوص در پروژههای بزرگ و تیمی به اندازه انتخاب فریم ورکها و کتابخانههای صحیح، اهمیت دارد. کمک گرفتن از گیت، سرعت تولید و کیفیت محصول نهایی را به طرز چشمگیری افزایش میدهد. این مسئله چنان در دنیای برنامه نویسی رایج است که حتی میتوان با اطمینان، مدعی شد تمام برنامههای بزرگ در جهان با استفاده از سیستم کنترل نسخه گیت یا موارد مشابه، نوشته شدهاند. از طرف دیگر میتوان گفت که گیت، محبوبترین و پراستفادهترین ورژن کنترل حال حاضر جهان است.

فرادرس برای کمک به یادگیری گیت، مطالب و فیلمهای خوبی تهیه کرده است. مهارت کار با گیت یکی از تواناییهای مهم در علوم کامپیوتر است. برنامه نویسی بدون مهارت استفاده از گیت، مانند توانایی ناقص است. به همین دلیل، فرادرس با کمک بهترین اساتید به تولید فیلمهای باکیفیت و پیشرفته میپردازد. در پایین، چند مورد از این فیلمها را معرفی کردهایم. در صورت نیاز بر روی تصویر بالا کلیک کرده و به صفحه اصلی این مجموعه آموزشی هدایت شوید.
- فیلم آموزش گیت و گیت هاب در اندروید استودیو، Git و GitHub در Android Studio
- فیلم آموزش زبان Markdown + ایجاد سایت استاتیک در GitHub Pages
- فیلم آموزش ساخت پروفایل حرفه ای «گیت هاب» (GitHub) و نکات مهم در پروژه ها + گواهینامه
- فیلم آموزش برنامه نویسی تیمی با گیت و گیت هاب، مدیریت پروژه یونیتی با Git و GitHub
- فیلم آموزش دستور گیت کلون به زبان ساده
مرحله چهارم: ساخت Commit
اکنون میخواهیم از روی تمام فایلهای اضافه شده به استیج، commit ایجاد کنیم. برای انجام این کار از دستور git commit به صورت زیر استفاده میکنیم.
این دستور از دو بخش تشکیل شده است. git commit -m و پیغام انتهایی که در داخل کاراکترهای " " قرار میگیرد.
- دستور git commit -m ثابت است و در تمام موارد مشابه تکرار میشود.
- پیغام انتهایی، هر چیزی میتواند باشد. اما لازم است که متنی در ارتباط با محتوی کامیت شده بنویسیم.
تغییرات انجام شده در کدها میتوانند شامل اضافه کردن ویژگی جدیدی به اپلیکیشن یا تعمیر خطا یا فقط تغیر نوع متغیر خاصی باشند. برای تمام اینها باید پیامهای شفاف نوشت.
نکته: از نوشتن پیامهایی مانند "asdfadsf" یا "foobar" خودداری کنید. این مسئله میتواند افراد دیگری که commit-ها را نگاه میکنند بسیار سردرگم و ناراحت بکند. زیرا commit-ها برای همیشه در مخزن باقی میمانند. البته در صورت نیاز میتوان آنها را پاک کرد، اما این کار توصیه نمیشود. نوشتن پیغامهای واضح درباره تغییرات اعمال شده به برنامه نویسان آینده کمک زیادی میکند. شاید حتی به خود ما هم کمک کند. زیرا ممکن است سالها بعد نیاز داشته باشیم دلیل انجام بعضی از تغییرات را متوجه شویم.
مرحله پنجم: ساخت انشعاب جدید
تا اینجای مطلب توانستیم فایلی را ایجاد کرده و تغییرات اعمال شده در آن را در commit ذخیره کنیم. در این بخش، تکنیک پیشرفتهتری را تمرین میکنیم. فرض کنید که باید ویژگی جدیدی را به برنامه خود اضافه کنیم. اما از بابت ایجاد تغییرات کلی در پروژه اصلی خود مطمئن نیستیم. در چنین شرایطی از انشعابات یا «شاخههای گیت» (Git Branches) استفاده میکنیم.
وجود این شاخهها به توسعهدهندگان کمک میکند که بین وضعیتهای مختلف پروژه به جلو و عقب حرکت کنند. مستندات رسمی گیت، شاخهها را اینگونه توصیف میکنند: «شاخه در گیت، اشارهگری سبک و قابل حرکت به یکی از کامیتها است.» به عنوان مثال، برای آزمایش افزودن صفحه جدیدی به وبسایت خود، فقط کافیست که شاخه جدیدی برای آن صفحه ایجاد کنید. این شاخه فقط برای بررسی وضعیت پروژه بعد از اضافه شدن صفحه جدید به وبسایت است.
دستورات آموزش داده شده در این مطلب، جزو مهمترین و پرکاربردترین دستورات گیت هستند. اما گیت دستوراتی دیگری نیز دارد. برای آشنایی با دستورات بیشتر گیت میتوانید مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.

وجود شاخه روی بخش اصلی پروژه اثر نمیگذارد. پس از پایان کار با صفحه - و در صورت رضایت از نتیجه - میتوانید تغییرات خود را از شاخه فرعی به شاخه اصلی اضافه کنید. به این کار «ادغام کردن» (Merge) شاخه فرعی در شاخه اصلی گفته میشود. در زمان ایجاد شدن شاخه جدید، گیت بررسی میکند که شاخه جدید از کدام کامیت «انشعاب» شده است. بنابراین گیت، تاریخچه پشت همه فایلها را میداند.
فرض کنیم که اکنون در شاخه اصلی هستیم. برای اضافه کردن صفحه جدید به وبسایت میخواهیم شاخه جدیدی باز کنیم. برای انجام این کار دستور git checkout -b <my branch name> را اجرا کنیم. این دستور به صورت خودکار شاخه جدیدی ایجاد کرده و سپس ادامه کارها را به آن شاخه منتقل میکند. بعد از نوشتن دستور بالا میتوانی با کمک کد git branch ساخته شدن این دستور را تایید کرد.
عبارتی نوشته شده در مقابل ستاره، نام همان شاخهای است که اکنون در حال کار بر روی آن هستیم.
نکته ای درباره نام شاخه ها
به صورت پیشفرض نام اولین شاخه در تمام مخزنهای گیت master است. این نام توسط شاخه اصلی در پروژه استفاده میشود. یکی از معانی این کلمه در زبان انگلیسی «ارباب» است. بعضی از فعالان صنعت فناوری به عنوان فعالیت ضد نژادپرستی، شروع به استفاده از نامهای جایگزین برای شاخه اصلی کردهاند. برای مثال، در این آموزش از «primary» استفاده میکنیم. در سایر مستندات و پروژهها، برای اشاره به شاخه اصلی ممکن است عبارت «master» یا اصطلاحات دیگری را هم ببینید.
اما با صرف نظر از نام، فقط به خاطر داشته باشید که هر مخزنی یک شاخه اصلی دارد. تقریبا بیشتر اوقات، شاخه اصلی به عنوان نسخه رسمی مخزن در نظر گرفته میشود. در وبسایتها شاخه اصلی همان نسخهای است که کاربران میبینند. در اپلیکیشنها شاخه اصلی همان نسخهای است که کاربران دانلود میکنند. البته این کار از نظر فنی ضروری نیست. زیرا Git با هیچ شاخهای متفاوت از شاخههای دیگر رفتار نمیکند. اما به طور سنتی به این شکل از Git در پروژهها استفاده میشود.
هیچ کدام از تغییرات انجام شده در شاخهها، توسط دیگر شاخهها دیده نمیشوند. برای اضافه شدن تغییرات داده شده از شاخهای به شاخه دیگر باید آنها را در همدیگر ادغام کنیم.
مرحله ششم: ساخت مخزن جدید در گیت هاب
در این بخش از مطلب آموزش گیت و گیت هاب، روش ساخت مخزن در سایت گیت هاب را توضیح دادهایم. البته اگر برنامه نویسی بخواهد که فرایند توسعه برنامه خود را به صورت شخصی و در کامپیوتر خودش دنبال کند، نیازی به استفاده از گیت هاب ندارد. اما شاید این برنامه نویس عضوی از تیم توسعه باشد. در این صورت با استفاده از گیت هاب میتواند به صورت مشترک بر روی کدهای پروژه کار بکند.
گامهای مورد نیاز برای انجام این کار را به ترتیب در پایین نوشتهایم.
- گام اول: برای ساخت مخزن جدید در گیت هاب، ابتدا ثبت نام میکنیم.
- گام دوم: سپس وارد سایت شده و به صفحه اصلی آن میرویم.
- گام سوم: در این بخش و با کلیک بر روی علامت «+» منوی آبشاری ظاهر میشود. گزینه «New Repository» در این منو قرار گرفته است. علامت «+» در سمت چپ و بالای صفحه قرار دارد.

- گام چهارم: بعد از کلیک کردن بر روی آن دکمه، گیت هاب میخواهد که نامی برای مخزن خود انتخاب کنیم. همچنین باید توضیح مختصری درباره این مخزن بنویسیم.

- گام پنجم: بعد از نوشتن اطلاعات خواسته شده فقط کافی است که بر روی دکمه Create Repository کلیک کنیم. مخزن مورد نظر ساخته خواهد شد. این دکمه در پایین و سمت راست صفحه قرار دارد.

- گام ششم: در این بخش سوالی پرسیده میشود. گیت هاب میخواهد بداند که آیا این مخزن برای شروع پروژهای تازه است یا اینکه میخواهیم فایلهای مخزن محلی را به گیت هاب بفرستیم. این مخزن محلی میتواند کامپیوتر شخصی یا سازمانی باشد.
در این مطلب، مخزن سادهای در کامپیوتر خود ساختهایم. اکنون میخواهیم این مخزن را از کامپیوتر شخصی به سایت گیت هاب منتقل کنیم. در نتیجه باید دستورات بخش «....or push an existing Repository from the command line» - کادر پایینی - را دنبال کنیم.

در کادر پایین، دستورات کامل این بخش نوشته شدهاند. البته در زمان ساخت مخزن در گیت هاب هم این دستورات به شکل صحیح و مانند تصویر بالا نمایش داده میشوند.
توجه کنید که باید آدرس «URL» نوشته شده در خط اول دستور را مطابق با نام کاربری و نام مخزن خود تغییر بدهید.
مرحله هفتم: ارسال شاخه به گیت هاب با دستور Push
در این بخش از آموزش گیت و گیت هاب، روش ارسال وضعیت تثبیت شده فعلی پروژه یا commit را به مخزن گیت هاب توضیح دادهایم. برای انجام این کار از دستور push استفاده میکنیم. این کار به دیگر افراد و توسعهدهندگان پروژه کمک میکند تا آخرین تغییرات بوجود آمده را ببینند. اگر این تغییرات در گیت هاب توسط مالک مخزن تایید شوند، میتوان آنها را درشاخه اصلی برنامه ادغام یا merge کرد.
دستور Push برای ارسال commit به مخزن گیت هاب و دستور pull برای دریافت commit-ها از ریموت استفاده میشود. در بخش بعدی، دستور pull را توضیح دادهایم. اما برای گرفتن کامل پروژهها از گیت هاب باید با دستور clone کار کنیم. به منظور آشنایی کامل با دستور clone و یادگیری روش کار با آن پیشنهاد میکنیم که فیلم آموزش رایگان دستور گیت کلون به زبان ساده، git clone چیست؟ را از فرادرس تماشا کنید. لینک مربوط به این فیلم را در پایین هم قرار دادهایم.
برای ارسال جدیدترین تغییرات ذخیره شده در commit به شاخه جدیدی در مخزن گیت هاب باید از دستور git push استفاده کنیم. شکل کامل این دستور به صورت git push origin yourbranchname نوشته میشود. خود گیت هاب به طور خودکار شاخهای را برای commit ساخته شده در مخزن ایجاد میکند.
در این دستور بخش git push origin از سه کلمه ثابت تشکیل شده است. این موارد را در پایین توضیح دادهایم.
- کلمات git push ماهیت دستور را نشان میدهند. این عبارت همیشه ثابت است.
- اما کلمه origin هم بیشتر وقتها ثابت است. هر زمان که توسعهدهندهای مخزن جدیدی را از گیت هاب به کامپیوتر خود واکشی میکند - در واقع در کامپیوتر خود از روی آن مخزن شبیهسازی یا clone میسازد. خود گیت به صورت خودکار نام مستعاری برای آن مخزن ریموت ایجاد میکند. تقریبا در تمام موارد از کلمه origin به عنوان نام مستعار استفاده میشود.
origin نام کوتاهی برای «URL مخزن ریموت» (Remote Repository's URL) است. در نتیجه برای ارسال تغییرات اعمال شده به مخزن ریموت میتوانید از کدهای زیر استفاده کنید.
کد بالا را میتون با کمک کلمه origin به صورت کوتاهتر هم نوشت.
اگر اولین بار است که با کمک سیستم محلی از گیت هاب استفاده میکنید، احتمالا با درخواستی برای دریافت نام کاربری و کلمه عبور گیت هاب روبهرو میشوید.
بعد از وارد کردن این اطلاعات، صفحه گیت هاب خود را بازنشانی کنید. اکنون باید نوشتهای را ببینید که بیان میکند شاخه یا branch جدیدی با نام شما به تازگی به مخزن فرستاده شده است. با کلیک بر روی لینک «Branches» میتوانید شاخه خود را ببینید.

با کمک دکمه سبز رنگ بالایی در تصویر میتوان درخواست واکشی یا pull هم ایجاد کرد. در بخش روش ساخت در خواست واکشی را توضیح دادهایم.
مرحله هشتم: ساخت در خواست واکشی با دستور PR
«درخواست واکشی» (Pull Request | PR) روشی برای اعلام خبر به مالکین مخزن است. خبر درباره اینکه تمایل داریم بر روی کدهای آنها کار کنیم. این کار به مالک یا تیم پروژه کمک میکند که کدهای توسعه داده شدهمان را بررسی کنند. در نتیجه، قبل از ادغام کردن تغییرات ایجاد شده در کدها به شاخه اصلی از سلامت آنها مطمئن میشوند. در عکس پایین، تصویر صفحه «PR» قبل از ارائه درخواست نشان داده شده است.

بعد از ارسال درخواست «PR» صفحه به شکل زیر تغییر میکند.

ممکن است در پایین صفحه دکمه بزرگ سبز رنگی را مشاهده کنید. بر روی این دکمه، عبارت «Merge pull request» نوشته شده است. کلیک کردن بر روی آن باعث میشود تمام تغییرات اعمال شده با شاخه اصلی ادغام شوند.
گاهی از اوقات خودمان هم مالک پروژهایم و هم توسعهدهنده آن یا اینکه شاید تنها مالک پروژه باشیم. در چنین شرایطی برای ادغام کدهای واکشی شده از گیت هاب به کامپیوتر نیازی به ارسال درخواست PR نداریم. اما هنوز هم استفاده از این روش تکنیک خوبی است. این کار به ساخت تاریخچه کاملی از بهروزرسانیهای پروژه کمک میکند. در ضمن تضمین میکند که همیشه در زمان اعمال تغییرات جدید، شاخه جدیدی هم ایجاد کنیم.
یادگیری زبانهای مختلف برنامه نویسی با فرادرس
هدف اصلی از آموزش گیت و گیت هاب این است که برنامه نویسان تازهکار و با تجربه بتوانند فرایند توسعه اپلیکیشنهای خود را به صورت حرفهای دنبال کنند. علیرغم مهارت کار با گیت، برای ساختن اپلیکیشنهای قدرتمند لازم است که اصول برنامه نویسی را نیز بخوبی بلد باشیم. شرکت در کلاسهای حضوری یکی از روشهای آموختن زبانهای برنامه نویسی است. اما در این کلاسها از روشهای قدیمی برای تدریس استفاده میکنند. در ضمن، شرکت در این کلاسها هزینه زیادی هم دارد. فرادرس مجموعهای از فیلمهای آموزشی را برای کمک به یادگیری برنامه نویسی، تهیه و منتشر کرده است. این فیلمها با کمک روشهای آموزشی پیشرفته تهیه شدهاند.
در پایین چند مورد از فیلمهای آموزشی مربوط به زبانهای برنامه نویسی مختلف را معرفی کردهایم.
- فیلم آموزش برنامه نویسی C++ + گواهینامه
- فیلم آموزش برنامه نویسی «متلب» (MATLAB) + گواهینامه
- فیلم آموزش برنامه نویسی پایتون، دوره مقدماتی + گواهینامه
- فیلم آموزش برنامه نویسی PHP
- فیلم آموزش کاربردی برنامه نویسی سی شارپ + گواهینامه
در صورت تمایل با کلیک بر روی تصویر پایین به صفحه اصلی این مجموعه آموزشی هدایت شده و از فیلمها و آموزشهای بیشتر و متنوعتری نیز دیدن کنید.

مرحله نهم: ادغام کدهای واکشی شده با دستور Merge
کار خود را با کلیک کردن بر روی دکمه سبز رنگ «Merge pull request» ادامه میدهیم. فشردن این دکمه باعث میشود که تغییرات اعمال شده با شاخه اصلی ادغام شوند.

بهتر است که بعد از ادغام کردن کدهای خود در شاخه اصلی، branch فرعی را حذف کنیم. وجود تعداد زیادی شاخه مختلف باعث شلوغی بیش از حد مخزن و سردرگمی میشود. بنابراین بر روی دکمه خاکستری «Delete branch» در پایین سمت راست کلیک کنید.
با کلیک کردن بر روی سربرگ «Commits» در اولین صفحه از مخزن جدید میتوانید ادغام شدن commit-های خود را بررسی کنید. با این کار لیستی از تمام کامیتهای انجام شده بر روی آن شاخه، دیده میشود. همیشه جدیدترین commit در بالای فهرست قرار دارد.
میتوان کد هش commit را در سمت راست مشاهده کرد. کد هش، شناسه منحصر بفردی برای commit-ها است. از این کد برای اشاره به commit-ها استفاده میشود. در واقع با کمک کد هش میتوان تغییرات را به جلو یا عقب برد. برای انجام این کار میتوانید از کد git revert <hash code number> استفاده کنید.
مرحله دهم: واکشی تغییرات از گیت هاب به کامپیوتر
در این مرحله از آموزش گیت و گیت هاب، روش واکشی کامیتها از گیت هاب به مخزن محلی خودمان را بررسی کردهایم. این کار بیشتر در زمانی انجام میشود که توسعهدهندگان دیگری هم بر روی کدهای برنامه کار میکنند. در این شرایط معمولا مخزن ساخته شده در سایت با وضعیت کدها در کامپیوتر شخصی کاربر متفاوت است. برای مثال، commit که در گیت هاب انجام دادهایم و آن را بر روی شاخه اصلی ادغام کردیم، در شاخه اصلی مخزن محلی خودمان وجود ندارد.
برای استفاده از جدیدترین تغییراتی که توسط خودمان یا دیگران برروی فایلهای گیت هاب اتفاق افتادهاند، باید از دستور git pull origin master استفاده کنیم. البته این دستور برای زمانی است که برروی شاخه اصلی برنامه کار میکنیم. در بیشتر موارد فقط کافی است که از دستور git pull استفاده کنیم.
این کد تمام فایلهایی را که تغییر کردهاند را همراه با تغییراتشان نشان میدهد.
- با استفاده از دستور git log میتوان تمام کامیتهای جدید را مشاهده کرد.
- ممکن است که لازم شود دوباره به شاخه اصلی برگردیم. برای انجام این کار میتوانیم از دستور git checkout master استفاده کنیم.

در کادر پایین روش استفاده از دستور git log را همراه با نتیجه آن نشان دادهایم. البته توجه کنید که گزارشات این فایل مربوط به مخزن فرضی و آزمایشی است که در این مطلب ساختهایم. بنابراین چیزی که در کامپیوتر خود میبینید با این گزارشات فرق میکند.
مرحله یازدهم: آپلود پروژه در گیت هاب
بارگذاری پروژه در گیت هاب فایدههای زیادی برای برنامه نویسان دارد. مهمترین فواید آن را در فهرست پایین نوشتهایم.
- این کار کمک میکند تا نتایج کارهای خود را با دیگران به اشتراک بگذارند.
- با برنامه نویسان دیگر مانند اعضای تیم، همکاری کنند.
- کدهای خود را به شکل امن و در دسترس نگهداری کنند.

انجام این مرحله نسبت به مراحل قبلی کمی پیچیدهتر است. در فهرست زیر سادهترین روش برای آپلود پروژه در گیت هاب را به شکل قدمبهقدم از ابتدا نوشتهایم.
- ابتدا به اکانت گیت هاب خود وارد شده و مخزن خالی ایجاد کنید.
- سپس آن مخزن را با کمک دستور git clone به کامپیوتر خود واکشی کنید.
- تمام فایلهای پروژه را به مخزن محلی گیت اضافه کنید.
- بعد از آن، با دستور git add این فایلها را به محیط استیج اضافه کنید.
- با دستور git commit تغییرات اعمال شده در مخزن را در حافظه گیت ثبت میکنیم.
- با کمک دستور git push ، تمام تغییرات commit شده را به مخزن ریموت گیت هاب ارسال میکنیم.
ورود به گیت هاب و ساخت مخزن در بخشهای بالاتر آموزش داده شدهاند. در ادامه از مرحله دوم به بعد را به شکل کاملتری توضیح دادهایم.
واکشی مخزن گیت هاب به کامپیوتر شخصی
برای واکشی مخزن موجود در گیت هاب به کامپیوتر شخصی، مراحل زیر را طی کنید.
- ابتدا باید آدرس لینک مخزن را کپی کنیم. آدرس باید با عبارت HTTPS شروع شود.
- سپس به ترمینال گیت رفته و از دستور زیر برای واکشی مخزن ساخته شده استفاده میکنیم.
بهجای آرگومان [your copy link] آدرس مخزن را به شکل کامل قرار دهید. فرض کنیم که مخزنی با نام GameOfDice ساختهایم. در کادر زیر نمونه اجرای این دستور و خروجی آن را مشاهده میکنید.
%fg9246%GfG0246-mrashidi Desktop% $ git clone https://github.com/mrashidi/GameOfDice.git
Cloning into 'GameOfDice'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 19 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), 478.91 KiB | 692.08 KiB/s, done.
Resolving deltas: 100% (2/2), done.
%fg9246%GfG0246-mrashidi Desktop% $الان مخزن گیت با موفقیت به کامپیوتر واکشی شده است. بهتر است که نام این مخزن همان نام مورد نظر برای پروژه باشد. اکنون باید تمام کدها و فایلهای مورد نظر را به این مخزن اضافه کنیم.
بررسی وضعیت مخزن محلی
در ترمینال به مسیر فولدر پروژهای بروید که بر روی فایلهای آن کار میکنید. اکنون از دستور git status استفاده میکنیم. با اجرای این دستور تمام فایلهایی که بتازگی به مخزن اضافه شدهاند با رنگ قرمز مشخص میشوند. هیچ کدام از این فایلها توسط گیت ردیابی نمیشوند. برای مثال در تصویر پایین فایل README.md توسط گیت بررسی نمیشود. اما رنگ قرمز نشان میدهد که تغییراتی در آن بوجود آمده است.

اضافه کردن فایلها به محیط استیج
قبل از ساخت commit جدید باید فایلهای تغییر داده شده یا جدید را به محیط استیج اضافه کنیم. برای این کار دستور git add را به کار میبریم. در کادر پایین، روش نوشتن این دستور را مشاهده میکنید.
در دستور بالا بهجای آرگومان <files_Name> باید نام فایلهای مورد نظر را بنویسیم. البته در صورتی که تعداد این فایلها زیاد باشند و بخواهیم همه آنها را به محیط استیج اضافه کنیم میتوانیم، کاراکتر نقطه . را در مقابل این دستور بنویسیم. کاراکتر نقطه در اینجا به معنی «همهچیز» است. در کادر زیر روش نوشتن آن را بررسی کردهایم.
%fg9246%GfG0246-mrashidi GameOfDice% $ git add .
%fg9246%GfG0246-mrashidi GameOfDice% $commit کردن تغییرات جدید
بعد از اضافه کردن تمام فایلهای جدید و تغییر داده شده به محیط استیج، باید آنها را commit کنیم. با commit کردن مراحل مختلف پروژه، بعدا به راحتی میتوانیم به آن مرحلهها برگردیم.
در کادر زیر، این دستور را بر روی مخزن محلی اجرا کردهایم.
%fg9246%GfG0246-mrashidi GameOfDice% $ git commit -m "Updating the Readme File"
[main ac1a11] Updating the Readme File
1 file changed, 1 insertion(+), 1 deletion(-)
%fg9246%GfG0246-mrashidi GameOfDice% $بارگذاری و آپلود پروژه در گیت هاب
قبل از بارگذاری پروژه در گیت هاب باید مخزن مقصد را به گیت معرفی کنیم. با کمک دستور git remote -v مخازن ریموت متصل به گیت هاب مشخص میشوند. بعد از اجرای این دستور، خروجی به شکل زیر میشود.
%fg9246%GfG0246-mrashidi GameOfDice% $ git remote -v
origin https://github.com/mrashidi/GameOfDice.git (fetch)
origin https://github.com/mrashidi/GameOfDice.git (push)
%fg9246%GfG0246-mrashidi GameOfDice% $خروجی بالا به معنی آن است که عبارت origin در این سیستم به آدرس مشخص شده در مقابل آن اشاره میکند. اکنون میتوانیم با کمک دستور زیر کل پروژه - بارگذاری شده در فولدر - را در مخزن گیت هاب آپلود کنیم.
بعد از اجرای دستور بالا خروجی به شکل زیر نمایش داده میشود.
%fg9246%GfG0246-mrashidi GameOfDice% $ git checkout -b master
Switched to a new branch 'master'
%fg9246%GfG0246-mrashidi GameOfDice% $ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), 6123 bytes | 122.00 KiB/s, done.
Total 9 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/mrashidi/GameOfDice/pull/new/master
To https://github.com/mrashidi/GameOfDice.git
* [new branch] master -> master
%fg9246%GfG0246-mrashidi GameOfDice% $اکنون با موفقیت فایلهای خود را در گیت هاب، آپلود کردهایم.

جمعبندی
در این مطلب از مجله فرادرس، راهنمای جامع و گامبهگامی برای آموزش گیت و گیت هاب ارائه دادهایم. ابتدا تفاوت بین Git و GitHub را به شکل کامل توضیح دادهایم. سپس مراحل نصب گیت را بر روی سیستمعاملهای مختلف لینوکس، MacOS و ویندوز به صورت دقیق بیان کردیم. پس از نصب گیت، مفاهیم و دستورات پایه این ابزار را هم معرفی کردهایم. به طور خلاصه، این دستورات شامل ایجاد مخزن (Repository) محلی، افزودن فایلها به ناحیه استیج، ایجاد commit و ساخت «شاخه» (Branch) جدید میشوند.
در ادامه، نحوهٔ ایجاد مخزن ریموت روی گیت هاب، اتصال آن به مخزن محلی و «ارسال» (Push) تغییرات به GitHub را آموزش دادهایم. در قسمتهای انتهایی مطلب هم مفاهیم پیشرفتهتری مانند ایجاد «درخواست واکشی» (Pull Request) اطلاعات، ادغام (Merge) شاخهها در GitHub و همچنین دریافت آخرین تغییرات از سرور با دستور pull را نیز پوشش دادیم. این راهنما با مثالهای عملی و دستورات ترمینال، مرجع کاملی برای آموزش گیت و گیت هاب است.












