آموزش گیت یا Git آموزشی ساده برای آنهایی که میخواهند با گیت و گیت هاب آشنا شوند در انتها با آوردن فیلم آموزش رایگان گیت سعی در تکمیل این آموزش داریم.
گیت ابزاری قدرتمند است، اما خیلیها معتقدند که میتواند کمی گیجکننده باشد. مخصوصاً اگر چیزی از آن ندانید. اغلب آموزشها هم مستقیماً به سراغ مسائل پیشرفته میروند و انتظار دارند که خواننده به سادگی آنها را متوجه شود.
با داشتنِ دانش مناسب، به راحتی میتوانید ماهرانه از گیت استفاده کنید. با شروع آموزش، کمکم متوجه ماهیتِ گیت میشوید و دیگر برایتان گیجکننده نخواهد بود. میتوانیم خوشبین باشیم که در نهایت نیز از آن خوشتان خواهد آمد.
این آموزش گیت چه فرقی با آموزشهای موجود دیگر دارد؟
“آموزشهای گیت” بسیاری هستند که میتوانید از آنها استفاده کنید، اما بیشتر آنها فقط کپی/پیست (Copy/Paste) کردن برخی دستورات را به شما یاد میدهند تا بتوانید کارتان را پیش ببرید. درواقع هر کسی میتواند کپی/پیست کند. اما اگر میخواهید واقعاً بفهمید گیت چگونه کار میکند و چه کمکی میتواند به شما بکند، باید کمی بیشتر دربارهی آن بخوانید.
بسیاری از این آموزشها دارای کلمات قلمبهسلمبهی فنی هستند و توضیحی دربارهی این کلمات نمیدهند.
اما در این آموزش قصد داریم به زبانی بسیار ساده شما را با دستورات و عباراتی آشنا کنیم که بسیار با آنها سروکار خواهید داشت. مطمئناً نمیتوان چنین ابزار پیچیده و قدرتمندی را یک شبه یاد گرفت. بهتر است برایش وقت بگذارید و از یادگیری آن لذت ببرید.
گیت یا Git چیست؟
اولین چیزی که باید بدانید این است که گیت (Git) با گیت هاب (GitHub) فرق دارد. خیلیها این دو را یکی فرض میکنند. گیت هاب یک سایت هاست (Host) برای پروژههاست که از گیت استفاده میکند.
گیت یک نوع سیستم کنترل ورژن (VCS) است که با آن میتوانید تغییرات اعمال شده در فایلها را سادهتر پیگیری کنید. مثلاً، اگر فایلی را ویرایش کنید، گیت میتواند دقیقاً به شما بگوید که چه چیزی تغییر کرده است، چه کسی آن را تغییر داده است و دلیلِ این تغییر چه بوده است.
گیت برای هماهنگ کردن وظایف میانِ اشخاصِ مختلفی که، روی یک پروژه کار میکنند، مفید است. همچنین میتوان با ذخیرهی “Checkpoint” پیشرفتِ پروژه را در طی زمان بررسی کرد. میتوانید از گیت برای نوشتن یک مقاله استفاده کنید، یا وقتی که میخواهید تغییراتِ اعمال شده را، در یک فایل هنری یا طراحی، پیگیری کنید.
گیت تنها سیستم کنترل ورژن موجود نیست، اما معروفترین آنهاست. بسیاری از برنامهنویسان به صورت روزانه از گیت استفاده میکنند و بلد بودن آن میتواند تأثیر خوبی روی رزومهی کاریتان داشته باشد.
در پروژههای پیچیده اشخاص بسیاری به صورت همزمان فایلهای پروژه را تغییر میدهند و این مسئله میتواند گیجکننده باشد. هر کسی که با “Merge Conflict” و سمبلهایی گیجکننده مثل >>>>>>> =======
اگر اساس گیت را درک کنید، میتوانید به سادگی علت وقوع این Conflictها را بفهمید و آنها را برطرف کنید.
چطور گیت را داشته باشم؟
گیت به صورت پیشفرض روی بسیاری از سیستمها نصب شده است. اما اگر آن را روی سیستمتان ندارید:
- میتوانید واسط خط فرمان ((Command-Line Interface (CLI) گیت را از این لینک دانلود کنید. این واسط را هم به کاربران مبتدی و هم کاربران حرفهای توصیه میکنیم.
- اگر دوست دارید از واسط کاربری گرافیکی زیباتری استفاده کنید، نرمافزار GitHub Desktop را امتحان کنید (برای ویندوز و مک). کار با این واسط سادهتر است، اما خُب سختتر میتوان فهمید واقعاً در پشت صحنه چه خبر است.
در مثالهای زیر فرض میکنیم که از CLI استفاده میکنید.
با تایپ در یک ترمینال، از واسط دستوری گیت استفاده میکنید. اگر نمیدانید ترمینال چیست، اشکالی ندارد. (لینک به مقالهای دربارهی ترمینالها)
دستورات رایج
در زیر لیستی از دستورات رایج را میبینید که دربارهی وظایف هر یک توضیح دادهایم. در این بخش باید خودتان دست به کار شوید. وقتی دستوری را میخوانید، اول آن را امتحان کنید و بعد به سراغ دستور بعدی بروید. در پایان نیز یک مثالِ کاربردی را میبینید که شامل لیستی از دستورات است و میتوانید یکجا همهشان را امتحان کنید.
نکات:
- وقتی اولین بار از اصطلاحی فنی استفاده میکنیم، آن را به صورت بولد میآوریم. میتوانید توضیحاتی بیشتر دربارهی آنها را در Git Glossary یا Reference Guide پیدا کنید.
- این آموزش، ساده است. سعی کردیم آموزشی دقیق و حرفهای از آب دربیاید و درعین حال شامل جزئیات سردرگمکننده نباشد.
- در توضیحات () هر دستور مسائل جدیدی را عنوان کردهایم. حتماً آنها را بخوانید.
در ادامه لیستی از دستورات رایج را میبینید که بسیار با آنها سروکار خواهید داشت.
اولین Repository خودتان را از اول بسازید (در پوشهی دلخواهتان در کامپیوتر)
git init
با این دستور یک پوشهی .git مخفی (Hidden) در پوشهای ساخته میشود که دستور را در آن اجرا کردهاید. این پوشه همان “Repository” (یا repo) است که گیت تمام دادههای داخلیاش را در آن نگه میدارد. حالا میتوانید فایلهای موجود در پوشهی اصلی را تغییر دهید و این تغییرات را پیگیری کنید.
دقت کنید که به پوشهی اصلی Working Directory میگوییم و به پوشهی .git، Repository. پوشهی Repository مسئول نگهداری تغییراتی است که اعمال میکنید. شما فایلها را در Working Directory تغییر میدهید و در این پوشه کار میکنید.
یک repo موجود را Clone کنید
git clone https://github.com/cooperka/emoji-commit-messages.git
با این دستور یک .git Repository از اینترنت (گیت هاب) دانلود و در کامپیوتر شما ذخیره میشود و آخرین Snapshotهای ریپو (تمام فایلهای آن) را در Working Directory میریزد. تمام فایلها به صورت پیشفرض در پوشهای همنام با Repo ذخیره میشوند (مثلاً در مثال بالا پوشهای با نام emoji-commit-messages).
URLای که در این دستور مشخص میکنید، Remote Origin نامیده میشود (جایی که فایلها دراصل از آنجا دانلود میشوند). در ادامهی این آموزش گیت از این اصطلاح استفاده خواهیم کرد.
Status کنونی پروژه را ببینید
git status
دورههای مرتبط در دانشیار آی تی
با این دستور اطلاعاتی اولیه را خواهید دید. مثلاً اینکه کدام فایلها اخیراً تغییر کردهاند.
هر گاه سردرگم شدید، status پروژه را بررسی کنید. گیت بر اساس شرایط موجودِ پروژه، به شما اطلاعاتی دربارهی آن میدهد.
یک نام Brancch جدید بسازید
git branch
این را یک “Checkpoint” محلی درنظر بگیرید و به آن یک نام دلخواه بدهید (به صورت فنی به آن یک Reference میگوییم). این کار شبیه عمل Save As در یک ویرایشگر متن است. Branch جدیدی که میسازید درواقع Referenceای است به وضعیت کنونی Repo. در ادامهی این آموزش گیت، از نام Branchای که انتخاب میکنید، در دستورات دیگر استفاده میکنیم.
مثل Branch، هر Checkpoint را به صورت Commitهایی ذخیره میکنیم (در ادامه دربارهی آن توضیح میدهیم).
Commitها نوعی خاص از چک پوینتها هستند و آنها را Revision مینامیم. نام آن یک ترکیبِ Hash از اعداد و حروف است (مثل e093542). بعداً از این هَش نیز، مانند نامهای Branch، در دستورات مختلفی استفاده میشود.
این درواقع عملکرد اصلی گیت است: ذخیرهی چک پوینتها (Revisionها) و اشتراک گذاری آنها با بقیهی اشخاص گروه. همهی مفاهیم دیگر، پیرامون این موضوعِ پایه شکل میگیرند.
اگر یک چک پوینت ساخته باشید، تا زمانی که پوشهی .git دست نخورده باقی بماند، میتوانید به آن رجوع کنید.
Branch کردن یکی از موضوعات پیچیده و بزرگ گیت است. مطمئناً در مقالات بعدی بیشتر دربارهی آن صحبت میکنیم.
یک Branch مشخص را Check Out کنید
git checkout
این را “Resuming” (ادامهی) یک چک پوینت درنظر بگیرید. تمامی فایلها به حالتی ذخیره میشوند که در زمان ذخیرهی Branch در آن قرار داشتهاند.
یادتان باشد هر تغییراتی که در Working Directory اعمال می کنید، ذخیره میشوند.
? میتوانید از فلگ –b به عنوان یک میانبر استفاده کنید. در این حالت در یک گام، یک Branch جدید میسازید و آن را Check Out می کنید.
git checkout -b
Defference (تفاوتهای موجود) بین دو Check Point را ببینید
git diff
پس از تغییر فایلها، میتوانید با استفاده از دستور بالا به سادگی لیستی از تغییراتی را ببینید، که اعمال کردهاید. با این روش میتوانید به خوبی کارتان را پیش از کامیت کردن، بررسی کنید.
برای هر دسته از تغییرات، حالت قبلیشان را میبینید (با یک – آغاز میشوند و قرمزند) و به دنبال آنها حالت جدیدشان آورده میشود (با + آغاز میشوند و سبزند).
در ادامه مثالهای پیشرفتهتر این دستور را میبینیم.
تغییراتتان را Stage کنید و برای Commit کردن آماده شوید
git add
این دستور پس از تغییر فایلها، تغییراتتان را به صورت “staged” ذخیره میکند (یا “ready to be committed”).
اگر پس از اجرای این دستور، تغییرات بیشتری اعمال کنید، این تغییرات جدید به صورت خودکار “staged” نمیشوند. حتی اگر همان فایل قبلی را تغییر داده باشید. این دستور برای مشخص کردن چیزهایی که میخواهید کامیت کنید، مناسب است، اما ممکن است برای شروع کمی گیجکننده باشد.
در هر شرایطی اگر مطمئن نبودید، از دستور Status استفاده کنید. عبارت “Changes to be committed:” را به رنگ سبز میبینید که در ادامهی آن نام فایلها میآیند. زیر آن عبارت “Changes not staged for commit:” را به رنگ قرمز میبینید که در ادامهی آن نام فایلها میآیند. این فایلهای قرمز هنوز “staged” نشدهاند.
? میتوانید از دستور Wildcards به همراه هر دستور ترمینال دیگری استفاده کنید. مثلاً:
git add README.md app/*.txt
این دستور فایل README.md و تمام فایلهای موجود در پوشهی app را، که پسوند .txt دارند، اضافه میکند. به صورت عادی هم میتوانید از دستور git add –all استفاده کنید. این دستور تمام فایلهای تغییریافته را اضافه میکند.
تغییرات Staged شده را Commit کنید
git commit
این دستور ویرایشگر متنِ خطِ فرمانِ پیشفرضتان را باز میکند و از شما میخواهد که یک Commit Message تایپ کنید. بعد از ذخیره و خروج، Commit شما به صورت محلی ذخیره میشود.
این پیغام کامیت به سایر اشخاص کمک میکند بفهمند که چه چیزی را تغییر دادهاید و دلیل آن چه بوده است.
? میتوانید از فلگ –m به عنوان میانبری برای نوشتن پیغام استفاده کنید. مثلا:
git commit -m “Add a new feature”
Branch خود را برای ذخیره شدن در مکانی دیگر Push کنید
git push origin
این دستور Branch شما را در Remote Origin ذخیره میکند (همان URLای که هنگام Clone کردن تعریف کردیم).
پس از یک عمل Push موفق، همتیمیهایتان میتوانند Branch شما را Pull و Commitهایتان را مشاهده کنند.
? به عنوان میانبر میتوانید به جای نام Branch از کلمهی HEAD استفاده کنید. این کلمه به صورت خودکار از Branchای استفاده میکند که هماکنون درآنید. HEAD همیشه به آخرین چک پوینت رجوع میکند که در واقع آخرین کامیتِ Branch کنونی شماست.
همانطور که قبلاً هم گفتیم، در گیت میتوانید هر چیزی را یک Checkpoint درنظر بگیرید. در زیر لیستی از چک پوینتهایی را میبینید که تا اینجا با آنها آشنا شدید (نام فنی اینها Reference و Revision است):
- HEAD
- مثلاً master
- ، مثلاً e093542d01d11c917c316bfaffd6c4e5633aba58 (یا به صورت کوتاهشده e093542)
- مثلا ۰٫۰
- stash
در آخر اینکه میتوانید از کاراکترهای خاصی مثل ^، ~ و @{} برای تغییر Referenceها استفاده کنید.
آخرین اطلاعات را دربارهی یک ریپو، Fetch کنید
git fetch
این دستور آخرینِ اطلاعات موجود دربارهی Repo را از Origin دانلود میکند (مثل تمام Branchهای مختلفی که در گیت هاب ذخیره شدهاند).
این دستور فایلهای محلی را عوض نمیکند. تنها دادههای موجود در پوشهی .git را بهروز رسانی میکند.
تغییرات اعمال شده توسط شخصی دیگر را Merge کنید
git merge
این دستور تمام Commitهای موجود در Branchای با نام other-branch-name را میگیرد و آنها را با Branch کنونی شما یکی میکند.
این دستور از اطلاعاتِ Branchای که به صورت محلی ذخیره کردهاید، استفاده میکند. پس حتماً قبل از آن، برای دانلود جدیدترین اطلاعات، دستور git fetch را اجرا کنید.
مثلاً، اگر کسی چند کامیت به master branch در Origin اضافه کند، میتوانید برای دانلود تغییرات و بهروزرسانی master branch محلی خود، دستورات زیر را اجرا کنید:
git checkout master # Make sure you're on the right branch. git fetch # Download any new info from origin. git merge origin/master # Merge the 'origin/master' branch into your current branch.
نام origin/master دقیقاً نشاندهندهی چک پوینت origin/master در کامپیوترتان است. گیت از این نماد استفاده میکند تا بینِ Branchهایی با نام مشابه (یعنی master) در مکانهای دیگر فرق بگذارد (مثلاً Branchهای شما و Branchهای origin).
? به عنوان یک میانبر، میتوانید از دستور pull استفاده کنید. با این دستور عملهای fetch و merge را تنها در یک گام انجام میدهید. به جای دستور merge، بیشتر از این دستور استفاده میشود.
git pull origin master
در اینجا کلمات origin و master را از هم جدا کردهایم (بدون یک /). نمیخواهیم از چک پوینت origin/master موجود در کامپیوترتان استفاده کنیم، چون آن چک پوینت آفلاین است و احتمالاً بهروز نیست. پس بهتر است مستقیماً از master branch موجود در remote (origin) فِچ کنیم. به این موضوع دقت کنید، فرقشان با هم مهم است!
مثالهایی واقعی
در زیر مجموعهای از دستورات را میبینید که در طولِ فرایندِ توسعه اجرا میشوند. نگاهی به آنها بندازید. آیا میدانید هر کدام چه کاری انجام میدهند؟ خودتان آنها را اجرا کنید و عملکردشان را ببینید.
git clone https://github.com/cooperka/emoji-commit-messages.git cd emoji-commit-messages git status git checkout -b my-new-feature echo “This is a cool new file” > my-file.txt git status git add --all git status git diff HEAD git commit -m “Add my-file.txt” git status git log git push origin HEAD git checkout master git pull
بیشتر این دستورات دارای پارامترهای اضافه هستند که با آنها میتوانید تغییراتی در این دستورات اعمال کنید. همچنین نسخههای کوتاهشده نیز دارند که همهچیز را جذابتر میکنند. معمولاً چند روش مختلف برای انجام یک کار مشخص وجود دارد.
گام بعدی چیست؟
خُب، این تنها مقدمهای از گیت بود. برای حرفهای شدن خیلی چیزهای دیگر باید یاد بگیرید، اما حالا اطلاعاتی اولیه برای کار با همتیمیهایتان و درکِ اساس آن دارید.
پس از یادگیری کامل دستورات پایه، نوبت به دستورات پیچیدهتر میرسد.
فیلم آموزش گیت
در صورتی که مطلب گیت چست برای شما مفید بوده است:
پیشنهاد میکنیم دوره های آنلاین آموزش گیت دانشیار آی تی را مشاهده نمایید.