گیت از آن ابزارهایی است که زندگی را برای برنامه نویسها لذت بخشتر میکند.
برای اینکه به شما بگویم گیت چیست و چه کار میکند بگذارید با یک مثال آن را توضیح بدهم:
نیازی به کپی گرفتن از فایلها ندارید
زمانی که داشتم پایان نامه می نوشتم، همه نوشتهها را در یک فایل ورد(word) ذخیره می کردم و هر بار مطالب جدید را به همان فایل اضافه میکردم.
بعضی اوقات نیاز داشتم یک جای کار را تغییر بدهم، اما با خودم می گفتم بگذار از هرچیزی تا الان نوشته ام یک کپی داشته باشم تا اگر بعدا از این تغییرات پشیمان شدم نسخه قبلی کارم از دستم نرود.
هر بار که تغییراتی میخواستم بدهم همین کار را میکردم. پوشه پایان نامه ام این شکلی شده بود:
با هربار تغییر در یک فصل، برای اینکه نسخه قبلی را داشته باشم مجبور بودم یک کپی از فایل بگیرم.
خب اینطوری بعضی اوقات حساب کار از دستم در میرفت که کدام تغییر را کجا و کی اعمال کردم.
بدتر از این موقعی بود که قرار بود فایل را برای استاد راهنما بفرستم و او تغییرات خودش را اعمال کند.
حالا اینجا باید یک نسخه دوباره کپی میگرفتم برای استاد میفرستادم. و دوباره تغییرات استاد را ذخیره می کردم. دوباره با اضافه کردن یک قسمت به پایان نامه، همین قضیه تکرار میشد.
کاری که گیت انجام میدهد مدیریت همین تغییرات و اصلاحات در پروژه های برنامه نویسی شماست.
در کار برنامه نویسی مدام در حال اضافه کردن و اصلاح کد هستید.
اگر از گیت درست استفاده کنید خیالتان راحت است هر تغییری در کد بدهید باز هم نسخه های قبلی مثل روز اولشان در دسترس هستند بدون اینکه مدام بخواهید از فایلهای پروژه کپی بگیرید.
حتی اگر چندین نفر هم روی یک پروژه کار کنند باز هم کارهایی که انجام می دهند توسط گیت سرجای درست ذخیره میشود تا هیچ کدام از اعضای پروژه کار دیگری را خراب نکند.
شروع کار با گیت
از این لینک گیت را دانلود و نصب کنید.
الان می خواهیم به صورت عملی کار گیت را ببینیم.
من اینجا از ویندوز استفاده میکنم.
یک پوشه درست میکنم که قرار است داخل آن پروژهای را شروع کنم. اگر گیت نصب باشد در این پوشه کلیک راست کنم
گزینه های گیت به منوی کلیک راست اضافه شده:
Git GUI : گیت با رابط کاربری
Git Bash : گیت با کدنویسی
بهتر است همیشه با کد نویسی از گیت استفاده کنید. پس این جا روی Git Bash Here کلیک میکنیم.
حالا صفحه command برای دستور نویسی باز می شود
برای اینکه به گیت بفهمانیم که این پوشه قرار است با گیت مدیریت شود باید این دستور را وارد کنیم:
git init
اینجا یک پوشه مخفی ایجاد میشود و هر کاری که گیت انجام میدهد در این پوشه ذخیره میشود.
من هنوز هیچ فایلی ایجاد نکردهام. شما در هر مرحله از پروژه میتوانید گیت را init کنید اما بهتر است قبل از اینکه استارت را بزنید گیت را فعال کرده باشید تا راحتتر کار کنید.
استفاده از گیت در IDE
در همه IDE ها مثل phpstorm یا vscode خط فرمان برای نوشتن دستورهای گیت وجود دارد. و نیازی نیست هر بار وارد پوشه پروژه بشوید و این شکلی که من بالا انجام دادم دستورات را وارد کنید.
مثلا در vscode کلیدهای ctrl + T خط فرمان را باز می کند و آنجا میتوانید با گیت کار کنید.
دستورات پایه در گیت
کار با گیت کلی قلق و ترفند دارد اما دستوراتی که همان اول کار باید بلد باشید تا کارتان راه بیفتد اینها هستند:
git init
این دستور را که مثالش را بالا زدم برای شروع یک پروژه است که قرار است با گیت مدیریت شود.
. git add
با زدن این دستور به گیت اعلام می کنید که این فایلها برای کامیت کردن آماده است.
مثال:
git add .
می توانید بعد از add، آدرس فایل مورد نظرتان را بنویسید اما اگر بعد از آن نقطه بگذراید خود گیت همه فایل های شما را اضافه میکند.
“” git commit -m
این دستور برای کامیت کردن یک قسمت از پروژه است.
مثلا شما 20 خط کد نوشته اید حالا برای اینکه خیالتان راحت باشد هر چه تا اینجا کار کردهاید ذخیره شده، باید بعد از زدن دستور add دستور commit را بنویسید.
این شکلی:
git commit -m "message"
برای هر کامیت هم باید یک پیام بنویسید که بعدا اگر خواستید به آن برگردید یادتان باشد برای چه چیزی بوده است.
git status
تا اینجا من یک قسمت پروژه را به گیت اضافه کردم و کامیت کردم.
شما بعضی اوقات نیاز دارید بدانید تا کجا کامیت کرده اید یا چه فایل ها و تغییراتی به گیت اضافه شده.
برای این کار از دستور git status استفاده میکنیم:
git status
اگر من این دستور را اجرا کنم این پیام را نشان میدهد:
می گوید در شاخه(branch) مستر (master ) هستید.(شاخه ها را پایین تر توضیح می دهم فعلا کاری به آن نداریم) و زیر آن هم نوشته هیچ چیزی برای کامیت کردن وجود ندارد.چون من تازه کامیت کرده بودم و بعد آن هم تغییری در پروژه ندادم پس چیزی هم عوض نشده که بخواهد کامیت شود.
حالا یک فایل جدید میسازم و یک خط کد دیگر هم اضافه می کنم.
دوباره دستور git status را می زنم تا فرقش را ببینید:
چون من فایل را تغییر دادم و هنوز کامیت نکردم به رنگ قرمز تغییرات را مشخص کرده.
git log
این دستور تمام کامیت های شما را نشان می دهد.
git log
من اینجا یک کامیت زدم که همان را هم به همراه پیام نشان داد.
هر کامیت یک شناسه مخصوص دارد برای وقتی که نیاز داشته باشید به آن برگردید.
شاخه ها (branch) در گیت
شاخه یا branch کاربرد زیادی در پروژه ها دارد.
فرض کنید یک پروژه را تا جایی پیش بردید. یکهو میبینید در یک قسمت آن یک باگ ایجاد شده که نیاز به بررسی جداگانه دارد و نمیخواهید روند پروژه را متوقف کند.
یا اینکه ایده یک فیچر(feature) جدید به ذهنتان رسیده اما الان مطمئن نیستید که بخواهید در پروژه اصلی اعمالش کنید.
در این موارد باید برای آن باگ یا فیچر، یک شاخه جداگانه درست کنید. وقتی شاخه درست میکنید هر کدی که تا الان نوشته باشید در یک قسمت مجزا در گیت کپی میشود و آنجا میماند تا هر وقت نیاز داشتید وارد شاخه مورد نظر بشوید و کارش را انجام دهید.
دستور برای ساختن شاخه:
git branch branch_name
به جای branch_name اسم دلخواه خودتان را بنویسید.
هر وقت هم خواستید وارد یک شاخه بشوید این دستور را اجرا کنید:
git checkout branch_name
اگر نمیدانید الان در کدام شاخه هستید با این دستور لیست تمام شاخه ها نشان داده میشود و با رنگ، شاخه ای که در آن هستید مشخص می شود:
git branch
ادغام کردن (merge) شاخه ها در گیت
وقتی کارتان روی شاخه های مختلف پروژه تمام شد اگر خواستید میتوانید شاخه ها را با هم ادغام کنید. اینطوری بخش هایی که جداگانه روی آن کار کردید با همدیگر ترکیب میشوند.
فقط یک مشکل وجود دارد. احتمالا بخش هایی از کد در هر شاخه با شاخه دیگر تناقض (conflict) داشته باشد. اینجا تکلیف چیست؟
در این حالت خود گیت این تناقض ها را به شما نشان می دهد و به شما میگوید تا در این باره تصمیم بگیرید. آیا بخشهایی از کد را تغییر می دهید تا تناقضها برطرف شود یا با همین حالت، ادغام (merge) را تایید میکنید.
دستور merge کردن:
git merge branch_name
به جای branch_name نام شاخه ای که میخواهید را بنویسید تا با شاخه ای که در آن حضور دارید ادغام شود.
معمولا در پروژه های بزرگ چند شاخه وجود دارد و در نهایت همه در شاخه اصلی یا همان master ادغام میشوند.
در حالت عادی موقع شروع پروژه شما در شاخه master هستید. مگر اینکه شاخه دیگری بسازید و در آن کار کنید و در آخر کار در شاخه master همه پروژه را ادغام کنید.
گیت هاب (github) و گیت لب (gitlab)
گیتهاب و گیتلب دو وبسایت مشابه هستند. این دو وبسایت پروژههایی که در گیت روی سیستم شخصی انجام دادید روی سرور های خودشان ذخیره میکنند.
اینطوری اولا یک بکاپ از پروژه تان روی اینترنت دارید. ثانیا وقتی چند نفره کار میکنید دیگر قرار نیست با فلش مموری فایل های خودتان را به همکارتان بدهید. هر کسی روی بخش خودش کار می کند پروژه را روی گیتهاب یا گیت لب می فرستد تا مدیر پروژه همه را ببیند و در نهایت merge انجام شود.
به فرستادن پروژه روی گیتهاب اصطلاحا push کردن میگوییم.
فرق گیت هاب و گیت لب
گیت هاب یک محلی شدهاست که برنامه نویسان مختلف پروژههای خودشان را به صورت عمومی قرار دهند تا دیگران به پروژه دسترسی داشته باشند. گیت هاب برای سورس خوانی جای بسیار مناسبی است.
وقتی وارد گیتهاب شوید با پیامی مواجه میشوید که به شما می گوید چون تحریم هستید نمی توانید repository خصوصی داشته باشید.
منظور از repository همان فولدر هایی است که برای هر پروژه درست میکنید.
ریپازیتوریهای خصوصی را فقط خودتان و کسانی که به آنها دسترسی میدهید می بینند ولی عمومی ها را همه دسترسی دارند.
در عوض gitlab مشکلی از این بابت برای ما ندارد. هم ریپازیتوری خصوصی و هم عمومی میتوانید داشته باشید.
سورس گیتلب هم رایگان در اختیار همه است و می شود روی یک سرور آن را پیاده کرد و یک گیت لب شخصی ساخت.
چطوری روی گیتهاب و گیت لب پروژه بفرستیم؟
من اینجا گیت لب را مثال میزنم چون همه چیز آن رایگان و راحت است. کار با گیتهاب هم شبیه همین است.
اول باید در سایت گیتلب ثبت نام کنید:
یک اکانت به نام شما ثبت میشود. بعد یک پوشه یا ریپوزیتوری در اکانت خود به نام پروژهای که قرار است push کنید بسازید روی new project کلیک کنید.
در قسمت بعدی اسم پروژه را بنویسید.
وقتی پروژه ساخته شد دیگر همه چیز برای push کردن آماده است.
اول باید با اکانتتان ارتباط برقرار کنید.
این دستورها را در خط فرمان پروژه بنویسید
دستور ها را خط به خط وارد کنید و enter بزنید.
git config --global user.name "username" git config --global user.email "email"
به جای username نام کاربری که با آن ثبت نام کردید را بنویسید و به جای email هم ایمیلی که با آن ثبت نام کردید.
دستور زیر برای این است که وارد پروژه مورد نظر در گیتلب شوید:
git remote add origin https://gitlab.com/rezasm/project_name.git
به جای project_name در کد بالا اسم همان پروژهای که ایجاد کردید را وارد کنید.
بعد از این با این دستور پروژه روی گیت لب فرستاده میشود:
git push -u origin --all
الان دیگر پروژه push شده است . وارد اکانت گیتلب خودتان بشوید تا آن را ببینید.