استفاده از 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

 

ارسال دیدگاه

Captcha 89 − = 79

در صورت نیاز و یا هر گونه مشکل ایمیل بزنید

پیام با موفقیت ثبت شد.
خطایی رخ داده است.