استفاده از Git
من ارسلان میربزرگی، شما را در این مقاله با آرشیو دستورات git آشنا خواهم کرد. امروزه تعداد نرم افزارهای اوپن سورس، در دنیای IT بسیار گسترده شده است. git یکی از نرم افزاری کنترل نسخه است که در دسته نرم افزارهای اوپن سورس نیز جای میگیرد. وظیفه اصلی این نرم افزار، مدیریت منبع کد و همچنین بازبینی کد منبع توزیع شده است. عمده تمرکز این نرم افزار بر روی پیگیری تغییرات مربوط به فایلهای کامپیوتری و کارهایی که بر روی آنها انجام شده، میباشد.
git چیست؟
همانطور که در قسمت مقدمه گیت چیست توضیح دادیم، git یکی از نرم افزاری کنترل نسخه است که در دسته نرم افزارهای اوپن سورس نیز جای میگیرد. وظیفه اصلی این نرم افزار، مدیریت منبع کد و همچنین بازبینی کد منبع توزیع شده است. این نرم افزار، بیشتر در پروژههای نرم افزاری کاربرد دارد اما میتوانید از آن برای چک کردن تغییرات مربوط به مجموعهای از فایلها نیز استفاده کنید.
چگونه git را نصب کنیم؟
git و گیت هاب با یکدیگر متفاوت هستند و نباید به اشتباه این 2 را به عنوان یک نرم افزار واحد در نظر بگیرید. برای نصب git باید به سایت https://git-scm.com مراجعه کرده و مراحل نصب را طبق راهنمایی داخل سایت پیش ببرید. برای نصب گیت هاب نیز از سایت https://desktop.github.com، نرم افزار گیت هاب را دانلود کرده و نصب کنید. پس از نصب، میتوانید ریپازیتوریهایی که تولید میکنید را به راحتی مدیریت کنید.
معمولا در پروژهها، از گیت لب بیشتر استفاده میشود و در این مقاله نیز بیشتر از این دستورات نام میبریم اما باید بدانید که عملا دستورات گیت لب و گیت هاب، تفاوت چندانی با یکدیگر ندارند.
ساخت SSH key برای GitLab
اگر بخواهید به پروژهها، دسترسی داشته باشید، نیاز دارید که یک کلید SSH را در پروفایل خودتان بسازید. توسط این کلید، قادر خواهید بود که پروژه خودتان در گیت لب را مدیریت کنید. برای ساخت این کلید، ابتدا وارد پروفایل خودتان در گیت لب شوید. در پروفایل شما یک لینک Generate به منظور ساخت کلید اختصاصی در گیت لب نمایش داده شده است. اگر بر روی این لینک کلیک کنید، کلید برای شما ساخته میشود که میتوانید آن را در کادر مشخص شده در پروفایل خود قرار دهید.
برای فعال سازی این کد باید طبق مسیر مورد نظر، ترمینال را باز کرده و کدی را که در زیر نمایش داده است وارد کنید:
ssh-keygen -t rsa -C "[email protected]" Gi
کد ساخته شده را در قسمتی که در تصویر فوق مشخص شده و طبق دستور زیر کپی می شود، قرار میدهیم :
pbcopy < ~/.ssh/id_rsa.pub
گیت لب ( GitLab )
دستورات موجود در git به شکل زیر میباشند :
دستور زیر برای ساخت یک ریپازیتوری تازه بر روی کامپیوتر شما است :
git init [project name]
این دستور برای دانلود از یک ریپازیتوری (url) که بر روی سیستم شما موجود میباشد، است :
git clone MY_URL
برای فایلهای تازه ای که هنوز commit نشده اند و همچنین لیست تغییرات انجام شده از دستور زیر استفاده میشود :
git status
این دستور برای اضافه کردن تمامی فایل های تازه به stage و آماده کردن آن برای commit است :
git add .
این دستور برای اضافه کردن فایل مورد نظر شما به stage و آماده کردن برای commit است :
git add [file name]
این دستور برای comm کردن تمامی فایلهایی است که در stage موجود است :
git commit -m "Description "
با دستور زیر، تمامی فایلها را به شکل همزمان add commit میکنیم و همچنین توضیحی نیز برای قسمت commit تعیین میکنیم :
git commit am "Commit Description "
این دستور برای آپلود و همینطور ارسال فایلهای تازه به سمت سرور و زیر نظر branchی که در آن قرار داریم میباشد :
git push
این دستور برای آپلود و همینطور ارسال فایلهای تازه به سمت سرور و زیر نظر branch اصلی master است. اما به طور معمول این کار انجام نمیشود. بنابراین ترجیحا ما روی branch دیگری push و سپس merge میکنیم.
git push origin master git pull
دستور زیر، برای دریافت تغییراتی است که جدیدا از سرور و merge انجام شده است :
نکته : زمانی که شما در قالب یک تیم بر روی پروژهای در حال کار هستید ( به طور مثال بر روی branchای به اسم example هستید و تغییراتی که اخیرا بر روی پروژه انجام شده، بر روی برنچ تست پروژه به اسم برنچ dev قرار دارد )، در این حالت شما نیازی به ارسال مرج ریکویستی ندارید و قادر خواهید بود تا آخرین تغییرات انجام شده را از برنچ dev دریافت کنید.
git pull origin dev
توسط این دستور، میتوانید مشخص کنید که در کدام branch هستید و کدهای شما در کدام branch تغییر و یا دریافت میشود :
git branch
این دستور برای دریافت کردن آخرین تغییرات از ( no merge ) origin branch.است :
( اگر در یک Branch قرار داریم و میخواهیم branch را تغییر دهیم، در صورتی که branch را اخیرا ساخته باشیم، باید کد زیر را به منظور شناسایی branch ها و تغییرات آن وارد کنیم. )
git fetch و یا git fetch --all
این دستور برای نمایش لیست تمای branch ها است :
git branch --all و یا git branch
این دستور برای تغییر branch به چیز دیگری به طور مثال به شاخه Develop است :
git checkout Develop
این دستور برای ایجاد Branch تازه ای به اسم New_Branch :
git branch New_Branch
این دستور برای نمایش لیست همه Branch ها و همچنین Local and Remote است :
git branch -av
این دستور برای حذف My_Branch از لیست همه Branchها است :
git branch -d My_Branch
این دستور برای Merge کردن Branch_B در داخل Branch_A است :
git checkout Branch_A git merge Branch_B
این دستور برای نمایش تغییرات مربوط به فایلهایی است که هنوز به stage وارد نشده اند :
git diff
این دستور برای نمایش تغییرات مربوط به فایل هایی است که به stage وارد شده اند :
git diff --cached
این دستور برای نمایش دادن تمامی تغییرات فایلهایی است که به stage وارد شده و همچنین فایلهایی که هنوز وارد stage نشده اند (فایلهای Unstage).
git diff HEAD
این دستور تفاوت تغییرات بین دو commit را نشان میدهد :
git diff commit1 commit2
توسط این دستور میتوانید لیست همه تغییرات مربوط به فایل مورد نظر خودتان را به همراه تاریخ و نام دولوپری که این تغییرات را اعمال کرده است، مشاهده کنید :
git blame [File Name]
این دستور برای نمایش لیست همه تغییرات فایلها است :
git log
این دستور برای نشان دادن تاریخچه همه تغییرات به همراه اطلاعات تگ آنها است :
git log --decorator
توسط این دستور، تاریخچه لیست تغییرات فایل file/directory به همراه لیست تغییرات آنها (diff) در طول کامیتها، نمایش داده میشود :
git log -p [file/directory]
دستور unstage در git
دستور زیر برای unstage کردن فایل مورد نظر به همراه اعمال تغییرات جدید است :
git reset [file]
این دستور برای Revert یا بازگردانی همه تغییرات از آخرین commit انجام شده است :
git reset --hard
این دستور برای نشان دادن لیست تگهای موجود است :
git tag
این دستور برای اضافه کردن تگ به آخرین فایلها و همینطور تغییرات انجام شده است :
git push --delete origin TagName
این دستور برای حذف کردن تگ از روی ریپازیتوری است :
git push --tags
از این دستور برای حذف تگ تولید شده بر روی لوکال استفاده میشود :
git tag -d TagName
توسط این دستور همه تگهایی که بر روی دیپازیتوری ایجاد شدهاند، ارسال میشوند :
git push --tags
این دستور برای اضافه کردن تگها به همراه توضیحات آنها است. پس از استفاده از این دستور، صفحه جدیدی باز میشود و می توانید توضیحات تگ جدید را در آن وارد کنید :
git tag -a TagName
از این دستور برای ساخت تگ به همراه توضیحات آن استفاده میشود :
git tag -am "Description" TagName
این دستور برای نشان دادن لیست تگها، همراه با توضیحات مربوط به هر تگ است :
git tag -n
تجربه :
گاهی اوقات ممکن است پس از اعمال تغییرات و همینطور commit کردن آن، هنوز آنها را push نکرده باشیم، در این حالت شاید نیاز داشته باشیم که به اندازه یک commit به عقب برگردیم که در این حالت از این دستور استفاده میکنیم :
git reset HEAD~1
نکته :
اگر بخواهیم پروژهای را از گیت لب clone کرده و روی کامپیوتر خودمان راه اندازی کنیم، میتوانیم از این دستور استفاده کنیم :
git clone [email protected]:user/project-name.git
پس از اجرای این دستور، پوشهای با نام project-name که قبلا روی git ساختهاید، بر روی کامپیوتر شما ساخته میشود. به طور مثال اگر بخواهیم پروژه خودمان را بر روی سرور pull کنیم و نیاز است که قبل از آن پروژه clone شود، شاید نخواهیم که نام پروژه، بر روی گیت و سرور، یکسان باشد و محتویات آن در پوشهای با نام دلخواهی که ما میخواهیم، ریخته شود. در این حالت از دستور زیر استفاده میکنیم :
git clone [repository] [local path] و یا git clone [email protected]:user/project-name.git example
همچنین میتوانیم به پوشه مورد نظر وارد شده و توسط این دستور نیز این کار را انجام دهیم :
git clone [email protected]:user/project-name.git
گذاشتن علامت dot در انتهای دستور بسیار مهم است. در صورتی که آن را ننویسیم، پروژه ما با اسم ریپازیتوری clone خواهد شد.
تجربه شماره ۱ :
در یکی از پروژههای ما، فایلی با نام composer.json و به شکل اتفاقی، توسط یکی از افراد گروه، بر روی سرور تغییر داده شده بود. زمانی که ما میخواستیم آخرین تغییرات را بر روی سرور pull کنیم، این اجازه به ما داده نمیشد. دلیل این کار نیز این بود که باید اول تکلیف تغییراتی که بر روی سرور انجام شده بود مشخص می@شد.
همانطور که در تصویر مشاهده میکنید، تا زمانی که فایل تغییر داده شده، revert نشد، امکان pull کردن آخرین تغییرات وجود ندارد. میتوانیم از دستور زیر برای برگرداندن فایل به حالت قبلی استفاده کنیم :
git checkout -- filename
تجربه شماره ۲ :
از دستور زیر زمانی که بخواهید یک برنچ را به شکل کامل کپی کرده و روی یک برنچ دیگر قرار دهید، استفاده کنید :
git checkout -b new_branch old_branch
برگرداندن پروژه به commit مورد نظر در Git
همانطور که در بالا توضیح دادیم، توسط دستور reset git می توانید پروژه با به commit مورد نظر خودتان برگردانید البته در این حالت باید توسط دستور زیر و همچنین دارا بودن ID مربوط به commit مورد نظرتان، به این commit برگردید.
git reset COMMIT_ID
پس از اجرای این دستور، تمامی فایلهای اضافه ای که بعد از commit کردن ایجاد شدهاند، باقی میمانند و می توانید آنها را نگه داشته و یا حذف کنید. اما اگر بخواهید، تمامی تغییرات و فایلهای اضافه حذف شده و فقط به commit قبلی برگردید، باید از دستور زیر استفاده کنید :
git reset --hard COMMIT_ID
بارگذاری پروژه بر روی GitLab
پس از ایجاد پروژه در گیتلب، میتوانید توسط clone کردن، این پروژه را بر روی لوکال خودتان ایجاد کنید. شاید برایتان این سوال ایجاد شود که اگر فولدر پروژه قبلا ایجاد شده باشد، و بخواهیم آن را بر روی git ارسال کنیم، باید چطور این کار را انجام دهیم؟
پس از ایجاد پروژه بر روی گیتلب، تصویر زیر که حاوی راهنماییهای مناسبی است برای شما نمایش داده میشود :
همانطور که در این راهنماییهای موجود در تصویر مشاهده میکنید، یکی از این دو کار را باید انجام دهیم. یا باید پروژه را clone کنید و یا اینکه اگر فولدر پروژه از قبل وجود دارد و میخواهید آن را بر روی گیتلب قرار دهید، کدهای زیر را به ترتیب اجرا کنید :
cd existing_folder git init git remote add origin [email protected]:xxxxxxxxxxx git add . git commit -m "Initial commit" git push -u origin master