سلام به روی ماه همتون. حالتون خوبه؟ قطعاً تو این اوضاع سخت که کرونا و جنگ و کلی خبر بد احاطه کرده، نیازه که بیشتر هوای همدیگه رو داشته باشیم، برا همین تصمیم گرفتیم یه ابزار خیلی مفید که شاید خیلیاتونم آشنا هستید رو باهم پیش بریم…
صبورانه همراه ما باشید.
معرفی گیت
براتون پیش اومده یک پروژهای رو شروع کردید و لحظاتی بوده که مجبور بودید یه کپی ازش بگیرید؟! بعد کلی تغییرات اعمال کردید و مجدد کپی انگاری دچار یک چرخه باطل شدی …
تازه اگه سیستمم بپره چی؟! اگه کارفرما تو پروژه تغییرات داده باشه چی؟ اگه نیاز داشتید با آدمهای مختلف تو دنیا کار کنی چیکار میکنی؟ چجوری تقسیم پروژه میکنی؟ چجوری نسخههای بدون باگ کجان؟ اگه داری سخت افزارتو تکمیل میکنی و شماتیک های مختلف؟ کتاب مینویسی و ویرایشهای متعدد چی؟
نرم افزارهایی ساخته شده که پروژه شما رو مدیریت کنه (البته به کمک شما) که به آنها version control /source code management میگویند. که نرمافزارهای مدیریت کد به ۲ دستهٔ distributed و centeralized تقسیم میشوند:
دسته اول centeralized یا مرکزی: مانند CVS که در این دسته نرمافزار یک server و تعدادی client وجود دارد. به این صورت که تمامی تغییرات در server ذخیره میشود و کاربران (برنامهنویسها) با استفاده از client تغییرات جدید را اعمال/دریافت میکنند.
دسته دوم distributed یا توزیع شده: مانند GIT در این دسته server حذف شده است و هر فرد میتواند یک server باشد و تاریخچهٔ کامل را در اختیار دارد. در این دسته تغییرات میتواند بدون در اختیار داشتن ارتباط انجام شود.
نگران نباشید در ادامه به بیشتر آشنا خواهیم شد.. اما قبلش!
آموزش های عمو جادی
عمو جادی عزیز، دوره آموزشی برای گیت داره که در دو بخش اون، از معرفی گیت و مقدماتش تا نصب اون رو براتون توضیح میده.
لینوکش و ابزار های توسعه آن!
بی شک یکی از نوابغ دنیای برنامه نویسی آقای لینوس توروالدز که هسته لینوکس را به ما هدیه کرد او ابتدا برای توسعه کرنل لینوکس از نرم افزارهایی مانند bitkeeper استفاده کرد که پس از مدتی مشکلاتی به وجود آمد به همین دلیل درسال 2005 منجر شد تا توروالدز خود دست به کارشده و با الهام از بیت کیپر، گیت را خلق کند. و از سال 2015 مدیریت و پشتیبانی گیت رو با تعریف از Junio C Hamano که یکی از مهندسان گوگل هست واگذار کرد.
با توجه به اینکه کاربرد این نرم افزارهای مدیریت یکسانه، دستورات مشابهی هم دارند.
- init: ساخت مخزن جدید برای ذخیرهٔ تغییرات در آن.
- checkout / pull / fetch: دریافت اطلاعات از مخزن و ساخت working tree.
- switch branch: جا به جایی میان شاخههای مختلف توسعه.
- add / delete / rename: انجام تغییرات روی پروندههایی که SCM آنها را پیگیری میکند.
- commit: ذخیرهٔ دستهای از تغییرات که ممکن است در پروندههای مختلف باشد.
- status: نمایش وضعیت کنونی پروندههای پروژه.
- diff: نمایش تغییرات انجام شده.
- log: نمایش تاریخچهٔ تغییرات.برای نمونه در هر دو نرمافزار آپاچی سابورژن و گیت دستور log وجود دارد و به صورت svn log و git log مورد استفاده قرار میگیرد.
پس به چه دلیل ما گیت را انتخاب کردهایم؟ (نمودار کوچکتر، یعنی سریعتر است).
برای دانلود میتوانید به سایت گیت مراجعه کنید و نسخه موردنظر رو با توجه به سیستم خودتون دانلود و نصب کنید که من در ویندوز 10 پیش خواهم رفت.
پس از نصب انتظار میره که داخل cmd اگر دستور git رو تایپ کردید براتون یه توضیحاتی بیاره:
همچنین بخوانید:
برای ثبت نام رایگان توی دوره گیت جادی هم می تونید از این لینک ثبت نام کنید.
خب امیدوارم که گیت رو تو سیستم داشته باشید، خلاصه بخش قبل این مقاله اینه که گیت یه برنامهای هسش که هنگام اجرا به فایلهای شما یه نگاه میندازه بهتون میگه چه تغییراتی به وجود اومده..
بیایید باهم شروع کنیم گیت رو و در ادامه با چندها اصطلاح مهم دنیای گیت آشنا هم بشیم. با ادامه آموزش گیت همراه سیسوگ باشید!
بزن بریم!
فک کنید شما یک پوشهای بنام My_Sisoog دارید که میخواهید این پوشه رو به گیت بشناسونید که براتون بررسی بکنه، وارد پوشه شده وراست کلیک کنید:
همانطور که میبینید دو گزینه با نامهای git gui here و git bash here وجود داره که یکی حالت گرافیکی و دیگری حالت ترمینالی یا کامندی هسش که قطعاً ما حالت کامندی رو باهم اجرا میکنیم که یه کادری برامون مشابه عکس زیر بالا میاد:
سپس باید initialize بکنیم که با این کار ما اجازه میدیم گیت دایرکتوری رو تحت کنترل به گیره پس دستور زیر رو وارد کنید:
1 | git init |
که برامون پیغامی چاپ میکنه با این مضمون که داخل پوشهها برات یه فایل .git ساختم. (مستندات سایت گیت)
حواستون باشه که دایرکتوری که با دات (.) شروع بشه مخفی هست باید از حالت hidden خارج کنید (البته نیاز به این کار نیست کاری هم با اون پوشه تا آخر آموزش نخواهیم داشت)
خب حالا بیایید داخل پوشه هامون دوتا فایل دیگه با نامهای src و inc بسازیم و یه داکیومنت.c و.h هم قرار بدیم (این کار صرفاً برای تست بوده لزومی نداره شما حتی میتونید فایلهای word و غیره اضافه کنید و با من پیش بیایید)
ما به دلیل اینکه یه تغییرات جدیدی تو دایرکتوری دادیم باید به گیت بگیم برامون بررسی کنه، یه دستور بسیار پرکاربرد که همیشه ازش استفاده میکنیم:
1 | git status |
حتماً فهمیدید که تو گیت همه دستورات با پیشوند git شروع میشن.
بیایید این دستور رو وارد کنیم:
تو خط اول میگه ما تو شاخه master هستیم. (آفرین بهت!)
خط بعدی میگه هنوز کامیتی نیست یا وجود نداره (خب هول نکنید، کامیت چیز خوشمزهای به زودی بهش میرسیم)
تو خط بعد که یکی از اصطلاحات گیته و باید بلد باشید میگه فایلهای untracked نشده این پایینیها هستند.
گیت سه تا وضعیت داره که اولی untracked هست، به معنای اینکه اینارو تازه اضافه کردی و نمیدونم چیه..
بعد خودش اون وسطا راهنمایی میکنه، میگه دستور git add رو بزن تا اینا رو به منطقه یا وضعیت stage تغییر بدم که این دومین وضعیته به معنای اینکه حواسم هست بهش اما جایی ثبت نشده ولی بهت میگم که چه تغییراتی ایجاد کردی..
وضعیت سوم هم که کامیت کردنه باعث میشه تغییرات شما نهایی بشه و ثبت بشه. و اگر روزگاری خواستید به فایل هاتون برگردید دراصل به همین کامیت کرده هاتون برمیگردید. یه چند قدم که بیایید جلوتر براتون جا میفته.
من الآن دوس دارم فقط پوشه inc رو ببرم به وضعیت stage، خب دستور:
1 | git add inc |
بعد یه وضعیتم چک میکنم با دستور git status:
خب مشخصه که فایل سبز رنگ در وضعیت stage قرار داره چون خودمون بهش گفتیم اما فایل src رو همچنان untrack میشناسه. نظرتون چیه داخل فایل main.h یه چند خط کد بنویسیم ببینیم گیت بهمون چی میگه؟
خب مجدد دستور git status رو بزنید:
بیایید دوباره تفسیر کنیم. میگه یه فایل داری که تو حالت stage هسش، بعد دو خط بعدی میگه حواست باشه یه چیزی تغییر دادی، میگم عه! گیت، میشه بهم بگی کجا تغییر پیدا کرده؟ میگه چشم! فقط لطف کن دستور git diff رو بزن تا بگم:
1 | git diff |
من که لذّت بردم، شما رو نمیدونم… دقیقاً میگه اینا رو اضافه کردی، که کاملاً درسته! حتی اگه شما تغییرات خیلی زیادی بدید که گیت نخواد همه تغییرات رو نشون بده، براتون شماره خطها رو نشون میده! میگه مثلاً تو خط فلان شما فاصله رو اضافه/حذف کردی… فقط یادتون نره که ما این تغییرات رو هم با دستور git add به stage اضافه میکنیم، چون مورد تاییدمونه. حالا میخوایم همینو کامیت کنیم. یعنی بگیم آره خانوم/آقای گیت دستت درد نکنه، همین تغییرات رو برام ثبت کن! (یادتون نرفته که شما هر زمان که بخواید میتونید در آینده به کامیت هاتون برگردید.)
دستور git commit رو وارد کنید!
1 | git commit -m "Your Message" |
خب بیایید یه لاگ بگیرم پس دستور زیر رو وارد کنید:
1 | git log |
خب تصویر گویاست الآن ما یک مورد کامیت شده داریم که برامون یه هش (hash) هم تولید کرده
صرفاً جهت اطلاع بگم الگوریم هش گیت، sha1 هسش.
حالا یه git status بگیرید:
همچنان با فایل src ما کاری نداره … جهت تمرین شما خودتون هم این src رو اضافه کنید.