ویدیو: دوره سریع آموزشی گیت و گیت‌‌هاب

خیلی وقت‌ها یک مشکلی که بوجود میاد اینه که ما یه کاری رو می‌خوایم انجام بدیم و وقتی برای یادگیری‌ش مراجعه می‌کنیم همه دوره‌ها و کتاب‌ها و مقالات و… خیلی عمیق در حال آموزشش هستند. مثلا من به عنوان یه توسعه دهنده بک-اند فعلا لزومی نمی‌بینم که برای پروژه آلفا خودم بوت‌استرپ رو مثلا خیلی عمیق یاد بگیرم. کل هدفم اینه که بتونم در حدی اون رو یاد بگیرم که یه پروژه‌ای راه بندازم و بتونم کارهام رو نشون بدم. 

چنین سناریویی رو هم برای این دوره تصور کردم. افرادی هستند که شاید نخواند واقعا خیلی عمیق از سیستم کنترل نسخه گیت سر در بیارن و صرفا می‌خوان یه پروژه ساده رو باهاش کنترل بکنند و در نهایت اون رو بزارند روی مخزن گیت‌هابشون. بعضی‌ها هم یه نقطه شروعی می‌خوان که سریع به یه جایی برسونتشون و برای اینکار هم چنین سناریویی می‌تونه کاربردی باشه. 

در هر حال من یه دوره آموزشی یک ساعته رو به صورت رایگان روی وبسایت فرانش آپلود کردم و هدفم هم دقیقا سناریوهایی بود که در بالا گفتم.

برای مشاهده دوره آموزشی می‌تونید وارد لینک زیر بشید و قبلش هم ویدیوی معرفی رو نگاه بکنید. 

آموزش سریع گیت و گیت‌هاب

ویدیو معرفی

آموزش سریع و ساده گیت – نکات پیشرفته‌

در آخرین قسمت از سری آموزش‌های سریع و ساده گیت قصد دارم که چند تا ویژگی و نکته پیشرفته‌تر برای مدیریت مخازن گیت رو با همدیگه مرور کنیم و روی مخزنی که تا اینجای کار مدیریت کردیم، اعمال بکنیم. خب با بررسی تفاوت‌ بین دو کامیت کارمون رو شروع می‌کنیم.

۱- بررسی تفاوت‌های بین دو کامیت

هر کامیتی که شما توی مخزن‌تون می‌کنید یه آی‌دی منحصر به فرد داره که به ما قابلیت دسترسی رو میده. اگه می‌خواید لیست تموم کامیت‌هایی که تا به حال کردید رو ببینید کافیه دستور git log رو وارد بکنید.

همونطور که می‌بینید هر کدوم از آي‌دی ها خیلی طولانی‌اند ولی خب برای دسترسی پیدا کردن بهشون معمولا چند تا از کاراکترهای اولش رو وارد بکنید کافیه.

برای هر لیست از کامیت‌ها می‌تونید اطلاعاتی مثل آی‌دی کامیت، نام کسی که کامیت کرده، تاریخ کامیت و پیغام کامیت رو مشاهده بکنید.

حالا برای اینکه جزئیات کاملتری از هر کامیت رو ببینیم کافیه از دستور git show همراه با آی‌دی کامیت مورد نظر استفاده بکنید:

خروجی:

یه دستور کاربردی دیگه هم که می‌تونیم ازش استفاده بکنیم دستور diff هستش که میاد تغییرات و تفاوت‌های بین دو کامیت رو بررسی می‌کنه. برای اینکار کافیه آی‌دی دو کامیت رو داشته باشیم:

شاید خروجی دستور براتون پیچیده باشه، بجای اون می‌تونید از ابزاری مثال git difftool استفاده بکنید.

۲- بازگشت به نسخه قبلی

خب یکی از هدف‌هایی که ما از استفاده گیت داریم اینه که به ما کنترل خوبی رو روی مدیریت نسخه‌های مختلف یه پروژه بده. خب برای اینکار ما از دستور git checkout استفاده می‌کنیم. قبلا از این دستور برای کنترل برنچ‌ها هم استفاده کردیم.

حالا تصور کنید که من می‌خوام فایل index.html رو به اولین کامیتی برگردونم که کردم. یعنی همون کامیت inital … برای اینکار کافیه آی‌دی کامیت و آدرس index.html رو داشته باشم:

حالا اگه محتویات index.html رو بررسی کنیم می‌بینیم که خالیه یا همون چیزی داخلش قرار داره که توی کامیت اول نوشتیم.

حالا موضوع مهم اینه که اگه من git log رو وارد کنم هنوز هم با کامیت‌های جدیدتر برخورد می‌کنم و می‌تونم به اونا برگردم. گیت فوق العاده‌س 🙂

۳. تغییر در یک کامیت

اگه توی آخرین کامیتی که کردید یه اشتباهی توی نوشتن پیامش کرده باشید چیکار می‌کنید؟ خب شاید بگید برمی‌گردم عقب یه کامیت جدید میزنم و… . خب این کار منطقی نیست. برای یه تغییر سریع روی کامیت ما دستور git commit –amend رو در اختیار داریم که به ما اجازه می‌ده تا پیغام آخرین کامیت رو اصلاح کنیم.

اما اگه مشکل کمی پیچیده‌تر باشه و بخوایم به یه کامیت منحصر به فرد دسترسی داشته باشیم چی؟

خب برای اینکار کافیه دستور revert رو همراه با آی‌دی کامیت وارد کنیم:

HEAD به آخرین کامیتی که شده اشاره می‌کنه.

۴. حل کردن Merge conflicts

تصور کنید که یک برنچ جدید ایجاد کردید و فایل قرار گرفته در برنچ قبلی رو در این برنچ تغییر دادید. حالا به برنچ master برمی‌گردید و عملیات مرج رو انجام می‌دید. اما با یه مشکل بر خورد می‌کنید:

گیت برای عملیات مرج کردن به صورت خودکار وارد کار میشه اما یه وقتایی هست که گیت نمی‌تونه این روند خودکار رو انجام بده. به همین خاطر این خطا رو برگشت میده.

حالا برای حل این مشکل می‌تونید به صورت دستی وارد عمل بشید. چطوری؟ خب فایل index.html رو باز کنید: می‌بینید که کلی تغییرات توش اعمال شده:

در واقع گفته که شما در آخرین کامیت که HEAD آدرسشه نوشتید: Hello World اما در برنچ جدید که اسمش New هستش نوشتید Hello Again … من کدومشون رو نگه داری کنم؟

اینجاست که نیازه به صورت دستی وارد کار بشید و کدهای مربوط به برنچی که می‌خواید رو بزارید و مورد دیگر رو حذف کنید. در آخر هم git add index.html و git commit.

۵- .gitignore

بعضی وقت‌ها در یک پروژه قصد این رو ندارید که بعضی از فایل ها و دایرکتوری‌ها رو کامیت بکنید و یا اونا رو به استیج ببرید. خب شاید بگید که توی git add اسمی ازش نیاریم ولی خب ما وقتی پروژه بزرگی داشته باشیم بیشتر وقتا از git add -A استفاده می‌کنیم. اما اگه بخوایم همین دستور هم یه سری فایل ها رو شامل نشه از یه فایلی به اسم .gitignore استفاده می‌کنیم.

کافیه که یه فایل با نام .gitigonre درست کنید و تموم مواردی که نمی‌خواید گیت اونا رو استیج بکنه درش قرار بدید. مثلا:

در این حالت فایل‌هایی با پسوند .log، تمام محتویات دایرکتوری‌های build, node_modules,.idea و فایل my_notes.txt در مخزن گیت شما قرار نمی‌گیرند.

در پایان

این بود از سه قسمت ساده و کاربردی از آموزش گیت و گیت‌هاب. امیدوارم کاربردی بوده باشه. البته بگم که این آموزش‌ها رو به عنوان یه Crash Course در نظر بگیرید اما برای پیشرفت کردن در این موضوع می‌تونید از لینک‌های زیر استفاده بکنید.

منبع این مجموعه مطالب: وبسایت https://tutorialzine.com

آموزش سریع و ساده گیت – برنچ‌ها

در قسمت قبلی با نکات پایه‌ای گیت همراهتون بودم. حالا می‌خوام توی این مطلب یه ذره مطالب پیشرفته‌تر و مهمتری رو به شما بگم. توی این قسمت از برنچ‌ها صحبت می‌کنیم.

۱- برنچ‌ – شاخه

در حالت عادی وقتی روی یه پروژه در گیت کار می‌کنیم، این پروژه در یک مسیر خطی توسعه داده میشه. شما یه سری ویژگی رو اضافه می‌کنید، کامیت می‌کنید و… . این روال به صورت کلی در یک خط اتفاق می‌افته. حالا تصور کنید که ما یه تیم برنامه‌نویسی داریم و می‌خوایم روی قسمت‌های مختلف یه پروژه کار بکنیم. مثلا تصور بکنید که ما یه وبسایت فروشگاهی داریم. این وبسایت از چند بخش تشکیل میشه. یه بخش فرانت-اند یه بخش بک-اند یه بخش بانک اطلاعاتی و… . حالا اگه توسعه دهندگان مختلفی بخوان همشون روی این پروژه کار بکنند درست نیست که در یک روال خطی قرار بگیرند. بجای اینکار میان یه شاخه یا یه انشعاب از پروژه اصلی میگیرند و اون رو توسعه میدن. مثلا برنامه نویس فرانت اند بخش فرانت اند رو به صورت جداگونه توسعه میده و در نهایت این بخش‌ها همشون برمی‌گردن سر همون پروژه اصلیه. تصویر زیر رو ببینید:

Branches

دلایل استفاده از برنچ:

  • با تغییر دادن پروژه‌ای که به صورت درست تا به حال کار کرده کدها خراب نمیشن.
  • بسیاری از ویژگی های مختلف بین آدم‌های مختلف می‌تونند با امنیت کامل ایجاد بشند.
  • یک توسعه دهنده بدون اینکه روی کد توسعه‌دهندگان دیگه تاثیر داشته باشه کدهای مربوط به خودش رو توسعه میده.
  • وقتی توی یه شرکت باشید و بخواید کاری رو دست سه چهار نفر بسپرید و بگید هر کی بهتر کارش رو انجام بده، روی پروژه اصلی اعمال میشه می‌تونیم از برنچ استفاده کنیم 🙂
  • یه چیز جالب راجع به برنچ‌ها اینه که اونا تاریخچه منحصر به فرد خودشون رو دارند.

۲- ایجاد یک برنچ جدید

به صورت پیشفرض گیت یه برنچ به اسم master برای ما ایجاد میکنه که پروژه اصلی ما روی اونه. برای اینکه یه برنچ جدید بسازید کافیه دستور زیر رو وارد کنید:

حالا من یه برنچ جدید با نام new_feature ساختم. با استفاده از دستور branch به صورت خالی، می‌تونید لیستی از برنچ‌های موجود رو ببینید:

اون علامت ستاره قبل از هر کدومش باشه به این معناست که ما روی اون کار می‌کنیم. حالا بزارید از روی برنچ master بریم روی برنچ جدیدی که ساختیم. برای اینکار دستور checkout رو وارد می‌کنیم:

حالا یه بار دیگه git branch رو وارد کنید که مطمئن بشید علامت ستاره روی گزینه new_feature قرار داره. 

اگه بود می‌تونیم فرایند توسعه رو ادامه بدیم. برای اینکه ببینیم دقیقا چه اتفاقاتی می افته، توی این برنچ جدید یه فایل می‌سازیم و اون رو کامیت می‌کنیم:

حالا جالبی قضیه می‌دونید کجاست؟ وقتی که برگردید سراغ برنچ master می بینید که فایل new_file.txt مخفی شده و نمی‌تونید ببینیدش. خب دلیل‌ش اینه که این فایل توی یه برنچ دیگه قرار داره نه برنچ مستر. 

۳. Merge کردن برنچ‌ها

خب حالا که من بخوام تمام برنچ‌های ساخته شده رو به برنچ اصلی یعنی برنچ master بیارم باید چیکار کنم؟ سوال خوبیه. تنها کافیه که فایل‌های مختلف برنچ‌های مختلف رو بریزید توی master برای اینکار از دستور merge استفاده می‌کنیم.

اولا که وارد برنچ مستر میشم:

بعد عملیات مرج کردن رو شروع می‌کنم:

git merge new_feature

خب حالا می‌تونید ببینید که فایل new_file.txt به برنچ مستر اضافه شد. حالا که کارمون با برنچ قبلی تموم شد می‌تونیم حذفش بکنیم.

 

توی مطلب بعدی سری گیت از چند موضوع پیشرفته‌تر از جمله merge conflict صحبت می‌کنم.

آموزش سریع و ساده گیت – مقدمات و کار با گیت‌هاب

مهم نیست که اسم گیت به گوشتون خورده باشه یا نه، مهم اینه که برای خفن شدن به گیت نیاز دارید. هدف‌مون از این مطلب چند قسمتی آموزش گیته. می‌خوام خیلی سریع و ساده به شما بگم که گیت چیه و چطوری ازش استفاده کنیم. همچنین آپلود یه پروژه روی گیت‌هاب رو داریم که خودش موضوع مهم دیگه‌ایه!

تعریف

گیت یه مجموعه دستور و امکاناته که روند تغییرات یک یا چند فایل رو مشاهده می‌کنه و به ما این قابلیت رو میده تا بتونیم نسخه‌های مختلفی از برنامه‌ای که توسعه می‌دیم رو مدیریت کنیم. اینجوری ما می‌تونیم بین نسخه‌های مختلف یه برنامه بگردیم و اونا رو restore بکنیم. این پروسه به صورت خیلی مقدماتی و پایه‌ای بهش میگن سیستم کنترل نسخه یا Version Control System. گیت رو خالق لینوکس، لینوس توروالدز نوشته 🙂

گیت یه برنامه‌س که می‌تونید اون رو دانلود کنید و روی محیط محلی خودتون ازش استفاده کنید. پس گیت یه سیستم متمرکز نیست، اینجوری نیست که همه چی رو یه سرور باشه و شما فایل‌هاتون رو به اون سرور بفرستید، نه گیت رو میشه در حالت محلی پیاده‌سازی کرد. 

هر پروژه‌‌ای که توی گیت قرار بگیره بهش میگن یه ریپازیتوری یا یه مخزن. مثلا اگه شما مشغول ساختن یه اپلیکیشن توی دایرکتوری app هستید، این دایرکتوری میشه اون مخزن شما. گیت این مخزن و تغییراتی که درش اتفاق می‌افته رو دنبال میکنه و همه اتفاقات اونجا رو پیگیری میکنه.

حالا این مخزن به صورت محلی روی کامپیوتر ما فقط وجود داره. اگه بخوایم به چند نفر دیگه بدیمش باید چیکار کنیم؟ خب اینم موضوع مهمیه. یه سری از پلتفرم‌هایی که گیت رو به صورت آنلاین ارائه میدن این امکان رو میدن تا بتونیم مخزن خودمون رو به اشتراک دیگران قرار بدیم. مثلا گیت‌هاب یکی از این سرویس‌هاست که توی همین مطلب بهتون یاد میدم چطوری این کار رو هم انجام بدید.

۱- نصب گیت

اولین کاری که باید بکنیم اینه که گیت رو روی کامپیوترمون نصب بکنیم:

  • اگه مثل من از اوبونتو استفاده می‌کنید که کافیه توی ترمینال بزنید sudo apt install git
  • اگه از مک او اس استفاده می‌کنید کافیه توی ترمینال بزنید brew install git
  • اگر هم توی ویندوز هستید که باید این برنامه‌ رو نصب بکنید.

نسخه‌های گرافیکی هم از گیت وجود داره که می‌تونید استفاده بکنید اما خب کار با محیط متنی خیلی لذت بخش تره.

۲- کانفیگ گیت

وقتی که اولین بار گیت رو نصب می‌کنید نیاز هستش که گیت رو براساس مشخصات خودتون کانفیگ بکنید. یعنی اینکه بگید کی هستید تا از این به بعد اتفاقاتی که می افته به اسم شما ذخیره بشه. برای اینکار دستورات زیر رو وارد کنید:

شما بجای Arastoo و hi@arastoo.net، از نام و ایمیل خودتون استفاده کنید. 

از این به بعد هر کاری رو که توی گیت انجام بدید با این نام و ایمیل ذخیره میشه. 

۳- ایجاد یک مخزن

همونطوری که قبلا اشاره کردم برای اینکه گیت بتونه اطلاعات مربوط به یه پروژه رو دنبال کنه از مفهوم مخزن استفاده میکنه. پس نیاز هست که یه مخزن درست کنیم. برای این کار ترمینال خودتون رو باز کنید و با دستور cd به دایرکتوری پروژه خودتون مراجعه بکنید. بعد از اون دستور زیر رو وارد کنید:

بعد از اینکار پیغامی شبیه به زیر براتون ظاهر میشه:

حالا اگه یه دستوری مثل ls -a رو وارد کنید می‌بینید که یه دایرکتوری مخفی به اسم .git وجود داره که گیت اون رو براتون ساخته. از این به بعد تمام اطلاعات مربوط به پروژه‌تون مثل کامیت‌ها و… توی این دایرکتوری نگه داری میشه. در مورد این قضیه هم صحبت می‌کنیم.

توی اون دایرکتوری یه فایل simple.txt درست کنید. 

۴- بررسی وضعیت گیت

گیت یه دستور git status داره که وضعیت گیت رو بررسی می‌کنه. مثلا میگه چه چیزهایی تغییر کردند، چه چیزهای جدیدی اضافه شده، آیا همه چیز بروزرسانی شده یا نه و چیزهایی از این دست. حالا بیایید یه بار این دستور رو وارد کنیم بببینم چی به ما برمی‌گردونه:

خروجی:

این خروجی داره به من میگه که روی برنچ مستر هستم (در موردش حرف میزنیم)

هنوز کامیتی ایجاد نشده (در مورد اینم حرف میزنیم)

مهم این خطه که نوشته untracked files: در واقع این خط داره میگه که یه سری فایل توی دایرکتوری test شما وجود داره که گیت دنبال‌شون نمیکنه، به تعبیری این فایل simple.txt جدیده و گیت هنوز نمیدونه که باهاش چیکار بکنه.

حالا سوالی که پیش میاد اینه که چطوری به گیت بگم که هواسش به این فایله باشه؟

۵- استیج کردن – به روی صحنه بردن

گیت یه مقوله به اسم «ناحیه استیج» داره. در واقع مثل یه اتاق خالی نگاهش بکنید که توش یه دوربین مداربسته وجود داره «اسم دوربین‌مون گیت هستش» حالا شما برای اینکه تمام رفتارهای یک آدم رو بفهمید و ببینید داره چیکار میکنه باید وارد اون اتاق‌ش بکنید. این آدم توی مثال‌مون فایل simple.txt هستش. با وارد کردنش به این چهارچوب، گیت دنبال‌ش میکنه و بیخیالش نمیشه و تمام جیک و پیکش رو براتون در میاره. 

برای وارد کردن فایل simple.txt به این محیط کافیه دستور git add رو همراه با اسم فایل وارد کنید، مثل:

حالا فایل به مرحله استیج رفت. اگه چند تا فایل داشته باشید می‌تونید بجای وارد کردن اسم همشون دستور git add -A رو وارد کنید. به همین سادگی.

حالا یه بار دیگه دستور git status رو وارد کنید:

این بار بجای untracked files داره میگه که یه فایل جدید به اسم simple.txt داره ردگیری میشه و آماده‌س که کامیت‌ش بکنیم.

۶- کامیت کردن

مثال دوربین مداربسته رو به یاد بیارید. شما یه آدم رو توی اون چهار دیواری که گفتیم اسمش استیج هستش قرار میدید. حالا می‌گید که مثلا ساعت ۶ یه ویدیو کلی از تمام فعالیت‌هاش تا الان رو بفرست به یه جای امن. کامیت کردن یه پروژه هم تقریبا همین حالت رو داره. شما پروژه‌تون رو تا نیمه راه آوردید حالا می‌خواید تا اینجای کار یه نسخه امن و درست از اون رو داشته باشید تا اگه بعدا دچار مشکلی شدیم بتونیم برگردیم سراغ اون نسخه درست. 

برای کامیت کردن نیاز هست که یه فایل یا چندین فایل رو توی استیج قرار داده باشید. همونطور که می‌دونید ما یه فایل simple.txt رو توی قسمت استیج قرار دادیم بنابراین حالا می‌تونیم اون رو کامیت بکنید. برای اینکار دستور git commit رو به صورت زیر استفاده می‌کنیم:

آرگومان -m به این معناست که همراه با کامیت یه پیغام رو هم بزار که ببینم کامیت من راجع به چیه. مثلا توی کد بالا پیغام رو گذاشتم: کامیت اولیه یا Initial Commit.

۷. گیت‌هاب

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

۷-۱: ثبت نام و ساخت مخزن در گیت‌هاب

اولین کاری که باید بکنید اینه که توی گیت‌هاب ثبت نام بکنید و بعدش یه مخزن درست کنید. برای اینکار کافیه وارد این آدرس بشید و فیلدهای مربوط به مخزن رو پر کنید و در نهایت Create repository رو بزنید. بعد از اینکار وارد آدرس مخزن‌تون بشید. مثلا مخزن من توی این آدرس هستش.

۷-۲: ارتباط با گیت‌هاب

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

origin یک نام برای این ارتباط ریموت من با گیت هستش. می‌تونه هر چیز دیگه‌ای باشه اما اینو معمولا میزارند.

حالا که من یه ارتباط درست کردم و الان وقت این شده که گیت لوکال‌م رو بفرستم روی گیت‌هاب. برای اینکار از دستور push به صورت زیر استفاده می‌کنم.

گفتم که برنچ مستر رو به صورت لوکال بفرست روی ارتباط ریموتی که با نام origin ساختم. با اجرای این دستور از شما مشخصات احرازهویت گیت‌هاب رو میپرسه که باید اونا رو به درستی وارد کنید.

اگه با مشکلی برخوردید می‌تونید از آرگومان -f یعنی force برای push کردن استفاده کنید که به صورت زیر این کار انجام شدنیه:

۷-۳: کلون کردن پروژه

برای دریافت محتویات داخل یک ریپازیتوری توی گیت‌هاب کافیه از دستور clone استفاده کنید:

حالا اگه من توی این مخزن گیت یه بروزرسانی ایجاد کردم. مثلا یه فایل جدیدی رو اضافه کردم، دیگه نمی‌خواد از اول بیایید کل پروژه رو کلون بکنید. می‌تونید با استفاده از دستور pull فایل‌های جدید آپدیت شده رو بیارید تو مخزن محلی‌تون:

در مطلب بعدی از این سری دو قسمتی می‌خوام یه ذره راجع به نکات پیشرفته‌تر صحبت بکنم و چیزهای عجیب و غریب‌تری رو بگم 😅🤓😉