گیت چیست؟
گیت یا git یک برنامه آزاد و متنباز برای مدیریت پروژههای برنامهنویسی هست که بسیار سریع و موثر می تواند به برنامهنویسان برای مدیریت پروژههای کوچک تا بزرگ کمک کند. یادگیری و استفاده از گیت بسیار ساده است و امکانات بسیار قابل توجهی در اختیار برنامهنویسان قرار میدهد.
از تواناییهای این نرم افزار میتوان به نمونههای زیر اشاره کرد:
- به شما امکان مدیریت پروژههای چند نفره را میدهد
- به سادگی می توان تغییرات را ثبت، دنبال، و بازگردانی کرد
- می تواند به یک سرور وصل شود تا علاوه بر داشتن یک بکاپ از کل پروژه آن را با دیگران به اشتراک بگذارید
- امکان استفاده از چند شاخه، ادغام و مدیریت شاخهها
- و …
من خودم به شخص قبلا فکر می کردم که گیت فقط برای پروژه های گروهی مناسب هست و زمانی از گیت و سایت هایی مانند گیتهاب و notabug استفاده کردم که برای اولین بار با فاروق پروژه مشترک داشتیم؛ و از آن جا که شیوه یادگیری من و ایشون شبیه به پریدن وسط استخر چهارمتری برای یادگیری شنا هست، اول پروژه را آغاز و بعد به فکر یادگیری گیت افتادیم! برای همین گاها (دو سه باری) اشتباهاتی رخ می داد که برای جبرانشان مجبور بودیم ساعتها تو سایتهای مختلف روش های مختلف رو امتحان کنیم و با پیغام خطاهای مختلف روبرو بشیم! ولی به هر حال تونستیم تجربیات خوبی به دست بیاریم.
البته که یادگیری گیت بسیار فراتر از این مطلب است و تمام آموزشها در مستندات خود گیت و در سوالاتی که در برخی سایتها مثل stackoverflow.com مطرح میشوند قابل جستوجو میباشند و تمام آنها در این مطلب قابل گنجاندن نیست. ولی در این مطلب سعی شده تا بخشی از پرکاربردترین و نکات اولیه گیت گنجانده شود تا برنامهنویسان تازهکار بتوانند سریعتر و راحتتر آن را یاد بگیرند و از آن استفاده کنند.
مخازن
یک مخزن محلی برای ذخیره تمام فایلها و اطلاعات تمامی تغییرات فایلها است. مخزن میتواند به صورت محلی یعنی فقط روی سیستم شما و یا آنلاین باشد.
یکی از رایج ترین روش های استفاده از گیت راه اندازی مخازن (repository) با میزبانی سایت هایی مانند github.com, gitlab.com, bitbucket.org, notabug.org و … است که هر کدام علاوه بر امکانات خود گیت امکانات دیگری هم دارند. در این میان گیتهاب بسیار بسیار معروف است و امکانات جالبی دارند (که البته از وقتی که مایکروسافت اون رو خریده خیلی ها ازش رفتن و اون رو بد می دونن).
به هر حال؛ اگر می خواهید از یک میزبان استفاده کنید باید یک حساب کاربری در یکی از سایت های میزبان گیت (git host) داشته باشید. سپس در حساب کاربری خود اقدام به ساخت یک مخزن (repository) کنید. در مشخصات مخزن باید نام و توضیحاتی در مورد پروژه (اختیاری) بنویسید و سپس نوبت به انتخاب نوع مخزن میرسد. مخازن میتوانند عمومی یا خصوصی باشند.
مخازن عمومی
گذشته از موضوع نرمافزار آزاد و حواشی آن که خارج از موضوع اصلی این مطلب هست، همان طور که مشخص است در حالت عمومی همه میتوانند فایل های شما را ببینند و تغییرات آن را دنبال کنند. به نوعی میتوان گفت پروژه شما کدموجود(source available) خواهد شد. کاربران میتوانند نکات و مشکلات (issues) را با شما در میان بگذارند و یا در ویرایش کد با شما مشارکت کنند و از شما در خواست ویرایش (pull request) کنند؛ یعنی بخشی از کد را ویرایش و سپس به شما ارائه دهند تا اگر خواستید آن را به مخزن خود اضافه کنید(ادغام کنید).
شما می توانید مستنداتی ارائه دهید تا برای عموم نمایش داده شود. این مستندات می توانند برای اهداف بسیاری استفاده شوند مثلا برای راهنمایی کاربران یا توضیحاتی برای برنامهنویسانی که قصد همکاری دارند و غیره. از همه مهمتر شما می توانید حقنشر و پروانه پروژهتان را انتخاب و آن را رسما اعلام کنید. پروانهها شرایط و ضوابط استفاده و به اشتراکگذاری نرم افزارتان(یا هر محتوایی) را توضیح میدهند. این همان چیزی است که تعیین می کند پروژه شما آزاد است یا نه.
از امکانات دیگر این است که دیگران میتوانند پروژه شما را چنگال (fork) کنند (در این مورد ترجمه بهتری به ذهنم نرسید، مفهومش این هست که دیگران می تونن پروژه شما را با ذکر منبع کپی و نسخه ای از آن را خودشان توسعه دهند و شخصی کنند) البته این عمل هم طبق شرایط حق نشر (copyrights) که شما در مخزن خود مشخص میکنید صورت میگیرد.
از نکات مثبت پروژههای عمومی این است که به شما فرصت خوبی برای معرفی خودتان، ایدههایتان و کیفیت کارتان میدهد. به نوعی یک رزومه از تمام پروژههایتان دارید.
مخازن خصوصی
بدیهی است که امکانات فوق در مخازن عمومی ممکن نیستند. به همین دلیل استفاده از مخازن عمومی برای برنامه نویس بسیار مفید خواهد بود. در مخازن عمومی تمامی حقوق مادی و معنوی محفوظ خواهند بود!
شروع کار
قبل از هرچیز باید نرم افزار git را نصب کنید.اگر کاربر ویندوز هستید با نصب شدن گیت دو گزینه جدید به منوی راست کلیک شما در (فضای خالی) پوشه (directory) اضافه میشود. این گزینه ها git GUI Here و git Bash Here هستند. گزینه دوم که خط فرمان گیت را اجرا میکند بسیار پرکاربرد است. با انتخاب این گزینه یک خط فرمان در همان دایرکتوری اجرا میشود. تمامی دستورات زیر باید در دایرکتوری یک مخزن اجرا شوند. پس خط فرمان گیت را در پوشه عکس و فیلم هایتان اجرا نکنید مگر آنکه بدانید چه میکنید!
اگر از مخزن آنلاین استفاده میکنید:
اگر از یکی از سایت های میزبان استفاده می کنید، یکی از راه ها این است که ابتدا یک مخزن (repository) بسازید. در روند ایجاد مخزن نام پروژه، وضعیت عمومی یا خصوصی و امکان افزودن فایل های اولیه ای که در ادامه به آن ها نیز خواهیم پرداخت را تعیین می کنید. معمولا خود سایت ها شما را راهنمایی می کنند که چگونه از مخزن استفاده کنید.
راهنما: برای نمایش دستورات از علامت های پرانتز شکسته (<>) برای مقادیری که توسط کاربر تعیین میشود و از علامت براکت ([ ]) برای بخش هایی که اختیاری هستند استفاده شده. برای مثال دستور زیر سه بخش دارد که بخش میانی که با علامت براکت مشخص شده به کلی اختیاری است.
command [optional <parameter>] <another parameter>
راهاندازی مخزن (راهاندازی – Init)
git init [<directory>]
زمانی که می خواهید یک پوشه (directory) را به یک مخزن تبدیل کنید از این دستور استفاده کنید تا گیت فایل های داده مورد نیازش را بسازد. این دستور در حالت عادی دایرکتوری فعلی که در آن اجرا شده را به یک مخزن تبدیل میکند. مثلا در ویندوز میتوانید دایرکتوری موردنظر را باز کنید و آن را به مخزن تبدیل کنید. اما با اضافه کردن پارامتر اختیاری می توانید یک دایرکتوری دیگر را نیز به مخزن تبدیل کنید.
بارگیری مخزن (مشتق – Clone)
اگر مخزنی دارای اطلاعاتی باشد (خالی نباشد) با دستور clone میتوانید آن را بارگیری کنید. مثلا اگر میخواهید پروژه شخص دیگری را بارگیری کنید و یا مخزن خود را به همراه فایل های نمونه ساختید به این دستور نیاز خواهید داشت. این دستور تمامی فایل ها (در تمامی شاخه ها) و داده های مربوط به git را دانلود میکند.
git clone <repository url>
البته این دستور مانند تمام دستور های گیت پارامتر های اختیاری فراوانی دارد ولی پر کاربرد ترین حالت استفاده آن به این شکل است.با اجرای این دستور پوشهای (دایرکتوری) جدیدی با نا مخزن ساخته میشود و تمامی فایل ها در آن ذخیره میشوند.
افزودن یک فایل به مخزن (افزودن – Add)
git add <wildcard>
زمانی که فایلی میسازید لازم است آن را به گیت معرفی کنید تا از آن پس داده های آن را تعقیب و تغییرات را ثبت کند. به طور کل گیت با ثبت تغییرات کار میکند. برای معرفی یک فایل می توانید از نام آن یا از شیوه wildcard استفاده کنید.
wildcard یک شیوه رایج برای جست و جو و نام بردن فایل ها است. برای مثال *.txt
تمام فایل هایی که به .txt
ختم میشوند را شامل میشود. یا example*any
تمام نام هایی که با example
شروع و به any
ختم شوند را در بر میگیرد. علامت * بین تعداد ۰ تا بیشمار کاراکتر را شمال میشود. علامت سوال نیز گویای یک کاراکتر مجهول است.
ثبت تغییر در مخزن (مرتکب شدن – commit)
git commit [-a] [-m <message>]|[-c|-C]
در مورد ترجمه اون حقیقتا چیزی به زهنم نرسید و گوگل این ترجمه رو گفت! به هر حال با این دستور میتوانید تغییری که در یک فایل ایجاد کردید را با یک توضیح مختصر ثبت کنید. این دستور پرکاربرد ترین دستوری است که یک برنامهنویس در خط فرمان میزند! پارامتر -a
کار را خلاصه میکند و قبل از ثبت تغیر فایل های اضافه شده و حذف شده را نیز به مخزن اضافه میکند و سپس ثبت می کند. عموما هر کامیت بهتر است یک توضیح داشته باشد. اگر به استفاده از پارامتر -m
یک توضیح یک خطی وارد نکنید ویرایشگر متنی باز میشود تا یک توضیح چند خطی دهید. بعد از وارد کردن توضیح فایل را سیو و ویرایشگر را ببندید. اما اگر نخواستید توضیحی بدید (که اصلا توصیه نمیشود) چیزی وارد نکنید و پنجره را ببندید یا از یکی از پارامتر های c کوچک یا بزرگ استفاده کنید؛ کاربرد آن ها شبیه هم است و یک پیغام پیشفرض را ثبت میکنند.
مدیریت شاخه ها با دستور branch
هر مخزن میتواند شاخه های جداگانه ای داشته باشد و هر شاخه میتواند فایل ها و تغییرات جدا از هم داشته باشند. شاخه ها میتواند با هم ادغام شوند و برنامهنویس میتواند بین شاخه ها جدا شود. فرض کنید پروژهای دارید که در حال کار بر روی آن هستید، پس از منتشر شدن یک نسخه از پروژه خود به فکر افزودن امکانات تازه میفتید؛ حال اگر تمام تغییرات جدید را بر روی شاخه اصلی ثبت کنید دیگر نسخه پایدار از دسترس خارج میشود و کاربران دیگر به آن دسترسی نخواهند داشت.
برای جلوگیری از این اتفاق می توانید شاخه های جدید اضافه کنید؛ در یک شاخه نسخه پایدار را حفظ کنید و در شاخه دیگر به تغییر کد ها بپردازید، زمانی که از پایداری نسخه جدید مطمئن شدید شاخه جدید را با شاخه اصلی ادغام کنید تا همه بتوانند از نسخه جدید استفاده کنند.
البته تمام این ها برای سطوح پیشرفته تر هستنند و پرداختن کامل به این موضوع باشد برای مطالب آینده! ولی برای شروع کار شما نیاز دارید تا شاخه اصلی پروژه را نامگذاری کنید. این کار با دستور زیر رانجام میشود.
git branch -M <name>
معمولا نام شاخه اصلی main یا master است.
مدیریت سرور های یک پروژه (Remote)
همانطور که کمی پیشتر خواندید میتوانید از یک میزبان (سرور) انلاین برای مخزن خود استفاده کنید. یک مخزن میتواند یک یا چند سرور داشته باشد. ولی معمولا بیش از یکی به کارتان نمیآید. برای مدیریت سرور ها از دستورات ریموت استفاده می شود
git remote add <remote name> <remote url>
git remote del <remote name>
این دستور معمولا برای اهدافی مانند افزودن و حذف کردن یک سرور استفاده میشود (برای خلاصه شدن از توضیح حالت های کم کاربرد صرفنظر شده). برای هر سرور باید یک نام انتخاب کنید. معمولا برای سرور اصلی از نام origin استفاده میشود. این نام ها قراردادی هستند.
ارسال تغییرات به سرور (Push)
این دستور برای ارسال تغیرات به سرور است و معمولا بعد از یک یا چند کامیت زمانی که نیاز به فرستادن آن ها به سرور دارید از این دستور استفاده میکنید. البته که این دستور نیز کاربرد های دیگهای هم دارد که توضیح آن ها باز هم بماند برای بعد. برای اولین ارسال لازم است تا دستور را به شکل زیر وارد کنید:
git push -u <remote name> <branch name>
در اولین استفاده از این دستور (و یا زمانی که بیش از یک سرور دارید) لازم است دستور به این شکل وارد شود. اما در غیر این صورت می توانید به شکل زیر عمل کنید.
git push
روتین!
تا اینجای کار هدف این بود که شما مخزن محلی خود را یه یک سرور متصل کنید و اولین تغییر را ثبت کنید. از این پس در ادامه برنامه نویسی و هر بار و پس از انجام تغییرات لازم در پروژه تان لازم دارید تا دستورات را به این شکل استفاده کنید:
git commit -a -m <message>
git push
این داستان ادامه دارد…
البته مبحث استفاده از گیت و رفع اشکالات احتمالی بسیار مفسل تر از این مطلب است و پرداختن به آن ها باشد برای مطالب بعد. پس وبلاگ کرم های کامپیوتر را دنبال کنید.