معرفی گیت و گیت هاب و آموزش جامع استفاده از آنها
در این مقاله میخوانید
- سیستم کنترل ورژن (Version Control System بهاختصار VCS) چیست ؟
- گیت چیست؟
- گیت هاب چیست؟
- Git index چیست؟
- چرخه عملکرد گیت چگونه است؟
- مرحله اول. نصب گیت
- مرحله دوم. راهاندازی مخزن (Repository) در گیت
- مخزن Git چیست؟
- راهاندازی مخزن جدید: Git Init
- استفاده از مخزن موجود: Git Clone
- تفاوت Git Init و Git Clone
- مرحله سوم. پیکربندی گیت
- مرحله چهارم. ذخیره تغییرات سورس کد در مخزن
- ثبت تغییرات فایل در مخزن: Git Commit
- بررسی تغییرات در گیت: Git Log و Git Diff و Git Status
- Git Status
- Git Log
- چگونه از دستور Git Log خارج شویم؟
- Git Diff
- لغو و برگرداندن تغییرات: Git Checkout ،Git Revert ،Git Reset و Git RM
- Git Checkout
- Git Revert
- Git Reset
- Git RM
- جمعبندی
- سؤالات متداول
گیت معروفترین و محبوبترین سیستم کنترل ورژن (VSC) در جهان است که اکثر برنامهنویسان از آن برای مدیریت پروژههایشان استفاده میکنند. در گذشته، هنگامی که پروژهها بزرگوبزرگتر و افراد بیشتری به تیم توسعهدهنده اضافه میشدند، باگهای غیرمنتظره زیادی بهوجود میآمدند و مدیریت تغییرات پروژه و مشاهده کدهای گذشته و بازیابی کدهای پروژه برای زمانی خاص تقریباً کار بسیار ناممکنی بود.
گیت با امکانات فراوانش برای حل تمامی این مشکلات بهوجود آمده است و بهرایگان دراختیار شما قرار دارد. بهطورکلی، گیت برای مدیریت سورس پروژه و ثبت و ایجاد تاریخچه تغییرات و انجام پروژههای گروهی استفاده میشود. در این مقاله، چرخه کامل گیت را توضیح دادهایم که از ایجاد مخزن برای پروژه شروع خواهد شد و تا ثبت تغییرات و بازیابی کدها ادامه پیدا خواهد کرد.
سیستم کنترل ورژن (Version Control System بهاختصار VCS) چیست ؟
سیستم کنترل ورژن (Version Control System بهاختصار VCS) که بهعنوان سیستم مدیریت سورس (SCM) نیز شناخته میشود، وظیفه مدیریت و ردیابی تغییرات در کدهای پروژه را برعهده دارد. سیستمهای کنترل ورژن ابزارهایی هستند که به برنامهنویسان کمک میکنند تا تغییرات کدهای پروژه را در طول زمان دراختیار داشته باشند و هر زمان که نیاز داشتند، بتوانند کدهای نسخههای قبل را بازیابی کنند.
سیستم کنترل ورژن هر تغییری در کد را در نوع خاصی از پایگاهداده ثبت میکند. اگر اشتباهی در کدهای پروژه رخ دهد، برنامهنویسان میتوانند به کدهای گذشته دسترسی داشته باشند و نسخههای قبلی کد را باهم مقایسه و باگ را رفع کنند. سیستمهای کنترل ورژن در نسخههای زیادی وجود دارند که گیت یکی از معروفترین آنهاست.
گیت چیست؟
گیت (Git) یکی از محبوبترین سیستمهای کنترل ورژن (VSC) توزیعشده و متنباز جهان است که در سال ۲۰۰۵، لینوس توروالدز (Linus Torvalds)، خالق هسته سیستمعامل لینوکس، آن را ایجاد کرد. Git بیشتر برای ردیابی تغییرات فایلهای پروژه بهکار برده میشود. تعداد بسیار زیادی از پروژههای دنیا از سیستم گیت برای کنترل ورژن نرمافزارهای خود استفاده میکنند. همچنین، گیت روی بسیاری از سیستمعاملها و IDEها بهطور پیشفرض وجود دارد که میتوانید از آن استفاده کنید.
هر نسخه از گیت، مخزنی شامل تاریخچه کامل تغییرات سورس مدنظر است. Git بسیار سریع و ایمن است که به توسعه پروژههای تیمی کوچکوبزرگ کمک میکند. گیت باتوجهبه امکانات و ویژگیهایش، بهترین انتخاب برای اکثر تیمهای نرمافزاری است. Git پایه بسیاری از سرویسها مانند گیت هاب (GitHub) و گیتلب (GitLab) است.
سرور گیتلب چیست و چطور آن را تهیه کنیم؟ سرور گیتلب چه خدماتی ارائه می دهد؟ در مقالهی زیر بخوانید.
گیت هاب چیست؟
گیت هاب (GitHub) سرویس میزبانی برای مخازن گیت است و تحتوب ارائه میشود. با استفاده از گیت هاب، میتوانید مخازن گیت خود را بهراحتی بهاشتراک بگذارید و کارهای تیمیتان را به بهترین نحو ممکن مدیریت کنید. بهعبارتدیگر، GitHub مکانی است که در آن، تمامی کارهای مدیران پروژه و برنامهنویسان ثبت و ذخیره میشوند و درنهایت، عملیاتهای پروژه کاملاً واضح باقی میمانند.
- مخازن گیت را میتوان بهصورت خصوصی و درونتیمی یا بهصورت عمومی برای همه ذخیره کرد.
- فایلهای خود را بهراحتی میتوانید از گیت هاب دریافت کنید.
- GitHub همه افراد را سازماندهی و هماهنگ میکند.
- ابزارهای متفاوت گیت به تیمها کمک میکند تا کارهای خود را سریعتر و بهتر پیش ببرند.
از یک سرور حرفه ای بگوییم!
آیا می خواهید یکی از بهترین سرورهای لینوکس را بشناسید؟ سروری یا بالاترین سرعت، پایداری و امنیت با زیرساخت ابری مطمئن و حرفهای و کاربران را همیشه راضی نگه میدارد. برای اطلاعات بیشتر روی لینک زیر کلیک کنید:
۱. کارایی گیت
گیت از بسیاری از سیستمهای کنترل ورژن (VCS) مشابه مانند CVS و SVN و Mercurial قویتر است. انجام تغییرات جدید، شاخهبندی، ادغام و مقایسه نسخههای قبلی همگی برای مدیریت پروژه شما دردسترس هستند. گیت از سیستم توزیع خوشهای یا درختی استفاده میکند. برخلاف برخی از نرمافزارهای کنترل ورژن، Git هنگام ذخیره تاریخچه و نسخههای فایل، نام فایلها را در نظر نمیگیرد و روی محتوای فایل متمرکز است. همچنین، مخزن گیت از ترکیب رمزگذاری دلتا برای ذخیره تفاوتهای کد استفاده و درادامه با فشردهسازی، فایلها را کاملاً ذخیره میکند.
۲. امنیت گیت
هدف اصلی گیت مدیریت سورس کد است و محتوای فایلها و روابط بین فایلها و دایرکتوریها، نسخهها، تگها، Commitها و… در مخزن Git با الگوریتم هش رمزنگاری امنی به نام SHA1 ذخیره میشوند. این رمزگذاری باعث میشود تغییر نسخههای قبلی کد در مخزن گیت غیرممکن باشد و درصورت نیاز، گیت کدهای شما را بدون هیچ تغییری بازیابی میکند و دراختیارتان قرار میدهد. با Git، میتوانید مطمئن باشید که تاریخچه معتبری از سورس خود دارید.
۳. انعطافپذیری گیت
گیت انعطافپذیری زیادی دارد. پشتیبانی از بسیاری از دستورها و قابلیت استفاده در پروژههای کوچکوبزرگ و سازگاری با بسیاری از سیستمعاملها مانند ویندوز و لینوکس و مک همگی نشاندهنده انعطافپذیری چشمگیر گیت هستند.
حال که با سیستم کنترل ورژن و گیت و دلیل استفاده تیمهای نرمافزاری از آن آشنا شدید، درادامه نحوه استفاده از گیت را به شما آموزش خواهیم داد.
Git index چیست؟
index محل مرحلهبندی بین فهرست فایلهای سیستم شما و مخزن گیت است و برای ایجاد و ثبت مجموعهای از تغییراتی که میخواهید اعمال کنید، استفاده میشود. سه نقطه در Git وجود دارد که فایلهای تغییریافته شما در آنها قرار میگیرند: ۱. دایرکتوری فایلهای سیستم شما (Working Directory)؛ ۲. منطقه مرحلهبندی (Staging Area)؛ ۳. مخزن (Repository).
Working Directory
وقتی پروژهتان را در سیستم ذخیره کردهاید و روی آن کار میکنید، با فهرست کاری پروژه خود سروکار دارید. این فهرست همان فایلهای کامپیوتر شماست. تمام تغییراتی که اعمال میکنید، تا زمانی که آنها را به قسمت مرحلهبندی اضافه نکنید، در فهرست کاری باقی میمانند.
Staging area
منطقه مرحلهبندی را میتوان بهعنوان پیشنمایشی از Commit بعدی شما توصیف کرد. هنگامی که Commit Git ایجاد میکنید، Git تغییراتی که در قسمت مرحلهبندی هستند، میگیرد و آنها را بهعنوان Commit جدید ذخیره میکند. شما میتوانید فایلهای موجود در این بخش را حذف یا ویرایش کنید. منطقه مرحلهبندی را میتوان بهعنوان منطقهای در نظر گرفت که Git تغییرات را در آن ذخیره میکند.
Repository
در گیت، مخزن (Repository) مانند ساختار دادهای است که Git از آن بهمنظور ذخیره متادیتا برای مجموعهای از فایلها و دایرکتوریها استفاده میکند. مخزن شامل مجموعهای از فایلها و تاریخچه تغییرات ایجادشده در آن فایلهاست. هر پروژه میتواند یک یا چند مخزن داشته باشد که اطلاعات آن پروژه در آن ذخیره شده است.
phpMyAdmin چیست؟ چه ویژگیهایی دارد و چطور آن را دانلود و نصب کنیم؟
چرخه عملکرد گیت چگونه است؟
- قبل از ثبت تغییرات، آنها را بررسی میکنید.
- تغییرات را ثبت (Commit) میکنید.
- اگر متوجه شدید مشکلی رخ داده است، آخرین Commit را بازیابی میکنید.
مرحله اول. نصب گیت
در مرحله اول، باید گیت را باتوجهبه سیستمعامل خود نصب کنید.
مرحله دوم. راهاندازی مخزن (Repository) در گیت
در ابتدای کار با گیت، باید برای پروژههایتان مخزن ایجاد کنید. در این بخش، با سه دستور Git Init و Git Clone و Git Config آشنا خواهید شد که وظیفه ایجاد مخزن با روشهای متفاوت را برعهده دارند.
مخزن Git چیست؟
مخزن گیت محل ذخیرهسازی تاریخچه و اطلاعات پروژه شماست. ناگفته نماند کل کدهای پروژهتان در این بخش ذخیره میشوند و به هر نسخه از آنها میتوانید دسترسی داشته باشید.
راهاندازی مخزن جدید: Git Init
برای ایجاد مخزن جدید، از دستور git init استفاده میشود. git init دستوری یکبارمصرف است که فقط هنگام راهاندازی اولیه و ایجاد مخزن جدید استفاده میشود. اجرای این دستور پوشهای جدید به نام git. در دایرکتوری فعلی شما ایجاد میکند.
۱. سینتکس
git init
۲. روشهای رایج استفاده از Git Init
- git init: دایرکتوری فعلی را به مخزن Git تبدیل میکند.
- git init <directory>: برای مسیر دایرکتوری مشخصشده مخزن گیت ایجاد میکند.
- git init –bare: مخزن خالی و مرکزی برای استفاده مشترک ایجاد میکند (مخزنی که فقط برای ارسال و دریافت ساخته شده است و تغییرات کد و کامیتها درون آن ذخیره نمیشوند).
شما میتوانید اطلاعات کامل دستور Git Init را در مستندات git-scm مشاهده کنید.
۳. روش استفاده
git init
۴. نسخهبندی پروژه موجود با مخزن جدید
اگر از قبل پوشه پروژه در سیستمتان وجود دارد، بهمنظور ایجاد مخزن برای آن، باید وارد دایرکتوری پروژه شوید و دستور زیر را اجرا کنید:
cd /path/to/your/existing/code git init
دستور git init مخزنی در آن دایرکتوری ایجاد میکند. بهمنظور ایجاد مخزن برای دایرکتوری دیگر، میتوانید دستور زیر را اجرا کنید:
git init /path/to/your/existing/code
استفاده از مخزن موجود: Git Clone
اگر پروژهای قبلاً در مخزن مرکزی راهاندازی شده باشد، دستور Clone رایجترین راه برای دریافت فایلهای آن مخزن است. همانند git init، کلونینگ نیز معمولاً عملیاتی یکبارمصرف است. پس از کلونکردن یک نسخه، تمام عملیاتهای کنترل ورژن ازطریق مخزن محلی مدیریت میشوند.
۱. سینتکس
git clone <repo url>
۲. روشهای رایج استفاده از Git Clone
- git clone [url]: مخزنی را کلون (دانلود) میکند که از قبل در GitHub وجود دارد؛ ازجمله تمام فایلها، شاخهها، Commitها و متادیتاها.
- git clone –mirror: نسخهای از مخزن را شبیهسازی میکند؛ اما امکان ویرایش هیچیک از فایلها وجود ندارد. اگر میخواهید یک کپی از مخزن بههمراه تمام دادهها در Remote جداگانهای ایجاد کنید، میتوانید از این دستور استفاده کنید. این دستور همانند فلگ –bare عمل میکند.
- git clone –single-branch: فقط یک شاخه را کپی میکند.
میتوانید اطلاعات کامل دستور git clone را در مستندات git-scm ببینید.
۳. روش استفاده
Git Clone یک کپی از مخزن مدنظر در دایرکتوریتان ایجاد میکند. شما باید لینک URL مخزن را به Git Clone بدهید. Git از چند پروتکل شبکه مختلف و فرمتهای URL متفاوت پشتیبانی میکند:
git clone https://github.com/ImDwivedi1/Git-Example.git
پس از اجرا، آخرین نسخه از آن مخزن را دریافت و درون پوشهای در سیستم شما ذخیره میکند که حاوی تاریخچه کامل مخزن قبلی و شاخه اصلی جدیدی است.
تفاوت Git Init و Git Clone
دستورهای git init و git clone برای ایجاد مخزن جدید استفاده میشوند، با این تفاوت که git clone برای ایجاد یک کپی از مخزن موجود دیگری استفاده میشود؛ اما git init مخزنی جدید از فایلهای موجود ایجاد میکند. git clone به git init وابسته است؛ بهطوریکه با اجرای دستور git clone، ابتدا git init برای ایجاد مخزن جدید اجرا میشود و سپس از مخزن موجود دادهها را کپی میکند.
مقایسه کامل سیستمهای مدیریت دیتابیس نسبی SQLite و MySQL و PostgreSQL و بررسی تفاوتهای آنها را در مقالهی زیر بخوانید.
مرحله سوم. پیکربندی گیت
اگر اولینبار است که گیت را نصب کردهاید، باید آن را پیکربندی کنید.
۱. پیکربندی و راهاندازی: Git Config
دستور Git Config برای پیکربندی اولیه Git در سطح محلی و آنلاین استفاده میشود که اطلاعاتی مانند ایمیل و نام کاربری را از شما میگیرد. این تغییرات در فایل gitconfig. ذخیره میشوند.
۲. سطوح پیکربندی گیت
پیکربندی گیت میتواند در سطوح مختلفی پیاده شود. شما از گیت میتوانید بهصورت آفلاین و محلی یا بهصورت آنلاین و… استفاده کنید. دستور Git Config آرگومانهایی را میپذیرد که مشخصکننده محدوده آن پیکربندی است.
- –local: بهطور پیشفرض دستور Git Config روی سطح محلی و لوکال مقادیر را تنظیم میکند. اگر از این فلگ استفاده کنید یا حتی اگر از هیچ فلگی استفاده نکنید، میتوانید این پیکربندیها را در دایرکتوری git/config. مشاهده کنید.
- –global: پیکربندی سطح جهانی مختص هر کاربر سیستم است و با پروژه شما کاری ندارد. مقادیر پیکربندی جهانی در فایلی ذخیره میشود که در درایو اصلی کاربر قرار دارد (~ /.gitconfig در سیستمهای یونیکس و C:\Users\\.gitconfig در ویندوز).
- –system: پیکربندی در سطح سیستم برای کل سیستم اعمال میشود که شامل همه کاربران سیستم و مخازن است. فایل پیکربندی سیستم در فایل gitconfig. خارج از مسیر اصلی سیستم ذخیره میشود ($ (پیشوند) /etc/gitconfig در سیستمهای یونیکس). این فایل را میتوان در C:\Documents and Settings\All Users\Application Data\Git\config در ویندوز XP و C:\ProgramData\Git\config در ویندوز ویستا و جدیدتر یافت.
۳. سینتکس
git config <option>
۴. روش استفاده
تنظیم نام کاربری: نام کاربری را Git برای هر Commit استفاده میکند:
git config --global user.name "Himanshu Dubey"
تنظیم ایمیل: Git از ایمیل نیز برای هر Commit بهره میبرد:
git config --global user.email "[email protected]"
تنظیم ویرایشگر: زمانی که Git از شما میخواهد پیامی را وارد کنید، ویرایشگری باز میکند که میتوانید اینجا آن را تنظیم کنید. اگر هیچ ویرایشگری انتخاب نکنید، Git از ویرایشگر پیشفرض سیستمتان استفاده میکند:
git config --global core.editor Vim
بررسی پیکربندیها: از دستور git config –list میتوانید برای فهرستکردن تمام تنظیماتی استفاده کنید که در Git پیکربندی کردید:
git config -list
خروجی
HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop $ git config --list core.symlinks=false core.autocrlf=true core.fscache=true color.diff=auto color.status=auto color.branch=auto color.interactive=true help.format=html rebase.autosquash=true http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt http.sslbackend=openssl diff.astextplain.textconv=astextplain filter.lfs.clean=git-lfs clean -- %f filter.lfs.smudge=git-lfs smudge --skip -- %f filter.lfs.process=git-lfs filter-process --skip filter.lfs.required=true credential.helper=manager gui.recentrepo=C:/Git [email protected] user.name=Himanshu Dubey
مرحله چهارم. ذخیره تغییرات سورس کد در مخزن
۱. ذخیره تغییرات در مخزن: Git Add و Git Commit
اکنون که مخزنی ایجاد کردید و پیکربندیهای لازم را انجام دادید، تغییرات فایلهای پروژه را میتوانید در مخزن ذخیره کنید.
۲. آمادهسازی فایلها برای ثبت تغییرات: Git Add
دستور git add فایلهای فعلی را به ناحیه نسخهبندی (Staging) اضافه میکند (قبل از ثبت تغییرات با Commit). هربار که فایلی را در پروژه خود اضافه یا بهروز میکنید، برای ثبت تغییرات، باید بهروزرسانیها را به قسمت Staging ارسال کنید. دستور git add را میتوان چندینبار قبل از انجام Commit اجرا کرد. درنهایت، همه این فایلها را میتوان با یک Commit ثبت کرد. دستور add فایلهایی را اضافه میکند که در خط فرمان مشخص شدهاند.
۳. سینتکس
git add <File name> یا git add <directory>
۴. روشهای رایج استفاده از Git Add
- git add newfile.txt: با استفاده از این دستور و قراردادن نام فایل، میتوانید فایل را اضافه کنید.
- git add -A: برای اضافهکردن تمام فایلهای دایرکتوری با یک دستور، میتوانید دستور add را با فلگ A- اجرا کنید یا بهجای فلگ A- یک نقطه “.” قرار دهید. این دستور همه فایلها را همزمان وارد منطقه مرحلهبندی میکند.
- git add –ignore-removal: گیت این امکان را میدهد که فقط فایلهای بهروز و تازهایجادشده را همزمان مرحلهبندی کنید. برای این کار، از فلگ ignore remove– استفاده خواهیم کرد.
- git add -u: این دستور اجازه میدهد فقط فایلهای اصلاح و حذف شده را مرحلهبندی کنید. دستور مذکور فایلهای تازهایجادشده را اضافه نمیکند. فقط برای افزودن تمام فایلهای اصلاح و حذف شده این دستور زیر را اجرا کنید.
- git add *.java: گیت امکان میدهد تا همه فایلهایی که از الگویی خاص پیروی میکنند، یک جا اضافه کنید. برای مثال، اگر میخواهید همه فایلهای java یا فایلهای متنی با فرمت txt را اضافه کنید، میتوانید از این دستور استفاده کنید.
- git reset <filename>: با استفاده از این دستور، میتوانید یک عملیات git add را لغو کنید. این دستور بهصورت زیر اجرا خواهد شد. مثال زیر فرض میکند که شما پروژهای را در مسیر /path/to/project راهاندازی کردهاید.
وارد دایرکتوری /path/to/project شوید:
cd /path/to/project
فایلی جدید به نام Test.txt با محتوای زیر ایجاد کنید:
echo "test content for git tutorial" >> commitTest.txt
git add Test.txt را در دایرکتوری مخزن خود اجرا کنید:
git add Test.txt
ثبت تغییرات فایل در مخزن: Git Commit
git commit برای ثبت تغییرات فایلها در مخزن و معمولاً بعد از git add استفاده میشود. هر Commit حاوی اطلاعات و پیامهای مربوط به آن Commit است. وقتی فایلی را در Git با استفاده از دستور git add اضافه میکنید، در قسمت مرحلهبندی ذخیره میشود. بهعبارتدیگر، هر کامیت فایلهای درون منطقه مرحلهبندی را به مخزن گیت اضافه میکند.
Commitها مانند عکس فوری از فایلها هستند که به همان صورت ذخیره میشوند و هیچگاه تغییردادنی نیستند. هر Commit در شاخه اصلی مخزن ثبت میشود که میتوانید آنها را ببینید و درصورت نیاز، کدها را بازیابی کنید. هر Commit حاوی یک commit-id است. این commit-id شمارهای رمزنگاری شده است که الگوریتم Secure Hash Algorithm (بهاختصار SHA) آن را ایجاد کرده است.
۱. سینتکس
git commit
۲. روشهای رایج استفاده از Git Commit
- git commit: این دستور تغییرات را در مخزن ثبت میکند و برای هرکدام commit-id ایجاد میکند. اگر این دستور را بدون هیچ آرگومانی اجرا کنید، ویرایشگر گیت باز میشود و از شما میخواهد تا پیامی برای آن Commit ثبت کنید تا بعداً کامیتها را از روی آن پیامها بهتر بشناسید. بعد از تایپ پیام، دکمه ‘:wq’ را فشار دهید تا ذخیره شود و از ویرایشگر خارج شوید.
- git log: میتوانید Commit را با دستور git log بررسی کنید (درادامه توضیح داده شده است).
- git commit -a: از این دستور میتوانید برای ثبت تغییرات همه فایلها استفاده کنید.
- git commit -m “commit message.”: با استفاده از فلگ m- در دستور Commit میتوانید متن بیانکننده هر کامیت را بنویسید. اگر از این فلگ استفاده کنید، دیگر ویرایشگر باز نمیشود.
- git commit -am “commit message.”: این دستور ترکیبی از دو دستور بالاست و تمامی فایلهای اضافهشده به مرحله استیج (مرحلهبندیشده) را کامیت و پیام مدنظر را نیز دریافت میکند.
- git commit -amend: گزینه amend امکان ویرایش آخرین commit را میدهد. اگر بهطور تصادفی پیامی اشتباه تایپ کردهاید، این گزینه به شما کمک خواهد کرد.
آموزش کامل نحوه نصب لاراول، Nginx و MySQL را به کمک Docker Compose در اوبونتو ۲۰.۰۴ در مقالهی زیر بخوانید.
۳. روش استفاده
فرض کنید محتوایی را در فایلی به نام hello.py ویرایش کردهاید و آماده هستید تا آن را به تاریخچه پروژه کامیت کنید. ابتدا باید فایل را با Git Add مرحلهبندی و سپس فایل مرحلهبندیشده را Commit کنید:
git add hello.py
این دستور hello.py را به ناحیه مرحلهبندی Git اضافه میکند. با استفاده از دستور Git Status میتوانید نتیجه این عمل را بررسی کنید:
git status
خروجی
On branch main Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: hello.py
این پیغام نشان میدهد که hello.py با Commit بعدی ذخیره میشود. برای Commit این فایل دستور زیر را اجرا کنید:
git commit
با این کار ویرایشگر متنی (تنظیمشدنی ازطریق Git Config) باز میشود که پیام بیانکننده آن Commit را میخواهد:
# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch main # Changes to be committed: # (use "git reset HEAD ..." to unstage) # #modified: hello.py
پیامهای Commit در Git ضروری نیستند؛ اما طبق اصول بهتر است خلاصه کل کامیت را در سطر اول و کمتر از ۵۰ کاراکتر بنویسید و یک خط خالی بگذارید و در خط بعد، توضیح کاملی از آن کامیت بنویسید؛ مثلاً:
Change the message displayed by hello.py - Update the sayHello() function to output the user's name - Change the sayGoodbye() function to a friendlier message
در این مثال، با دو دستور Add و Commit آشنا شدیم. یکی دیگر از کاربردهای رایج Git Add گزینه all– است. اجرای git add –all هر فایل تغییریافته و ردیابینشده موجود در دایرکتوری را میگیرد و آنها را به مخزن اضافه و درخت کاری مخزن را بهروز میکند.
بررسی تغییرات در گیت: Git Log و Git Diff و Git Status
مزیت سیستم کنترل ورژن این است که تغییرات کامل را ثبت میکند تا از دادههایی مانند Commit برای عیبیابی استفاده کنید.
Git Status
دستور Git Status برای نمایش وضعیت مخزن و ناحیه مرحلهبندی استفاده میشود. با استفاده از این دستور، میتوانید فایلهای موجود در ناحیه مرحلهبندی و فایلهای ویرایششده و نیازمند به ثبت را مشاهده کنید. این دستور اطلاعاتی از Commitهای ثبتشده را نشان نمیدهد و برای نمایش وضعیت بین Git Add و Git Commit استفاده میشود. اگر گیت تغییرات فایلها را بهدرستی ردیابی کند، پس از تغییر فایل، باید آن را در Git Status ببینیم.
۱. سینتکس
git status
۲. روشهای رایج استفاده از Git Status
- git status: اغلب در شکل پیشفرض آن استفاده میشود که فایلهای تغییریافته را نشان میدهد.
- git status -s: خروجی را در قالب کوتاه ارائه میدهد.
- git status -v: جزئیات کامل ازجمله تغییرات متنی هر فایل را نشان میدهد.
۳. روش استفاده
git status
خروجی
# On branch main # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # #modified: hello.py # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # #modified: main.py # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #hello.pyc
Git Log
Git Log ابزاری کاربردی برای بررسی تغییرات ایجادشده در مخزن گیت است. برای مشخصکردن تاریخچه سورس کد، میتوانید از این دستور استفاده کنید. بهطورکلی، Git Log رکوردی از Commitهای ثبت شده است. Git log دادههای زیر را از هر Commit به ما نشان میدهد:
- هش commit: متنی ۴۰کاراکتری است که الگوریتم Secure Hash Algorithm (بهاختصار SHA) آن را تولید میکند و کاراکتری یونیک است.
- اطلاعات ایجادکننده commit: اطلاعات کاربر ثبتکننده آن کامیت مانند نام و ایمیل را نشان میدهد.
- تاریخ commit: تاریخ ایجاد کامیت را نشان میدهد.
- عنوان/پیام commit: نمای کلی Commit است که در پیام Commit ثبت شده است.
۱. سینتکس
git log <file> یا git log
۲. روشهای رایج استفاده از Git Log
- git log: هربار که میخواهید تاریخچه را بررسی کنید، باید از دستور Git Log استفاده کنید. دستور اصلی Git Log آخرین Commitها و وضعیت Head را نمایش میدهد.
- git log –oneline: این گزینه برای نمایش اطلاعات هر Commit در یک خط استفاده میشود. همچنین، خروجی را بهطور خلاصه، یعنی تنها ۷ کاراکتر اول Commit SHA و پیام Commit را نشان میدهد.
- git log –stat: این دستور فایلهای اصلاحشده و تعداد خطوط و یک خط خلاصه از کل رکوردهای بهروزشده را نشان میدهد.
- git log –patch یا git log -p: دستور Git Log Patch فایلهای اصلاحشده و مکان خطوط اضافهشده و حذفشده و بهروزشده را نشان میدهد.
- git log –graph: دستور Git Log میتواند گزارش را در قالب نمودار ارائه دهد. برای فهرستکردن Commitها بهصورت نمودار، دستور Git Log را با گزینه graph– اجرا کنید.
- git log –graph –oneline: برای خلاصهترکردن خروجی دستور git log –graph، میتوانید این دستور را با گزینه oneline– ترکیب کنید.
- git log –after=””: خروجی را باتوجهبه نیازتان میتوانید فیلتر کنید. این دستور یکی از ویژگیهای مهم گیت است. فیلترهای زیادی مانند مقدار و تاریخ و نویسنده را میتوانید روی خروجی اعمال کنید. هر فیلتری مشخصات خود را دارد.
- git log -n <limit>: با استفاده از دستور git log، میتوانید تعداد Commitهای خروجی را محدود کنید. اگر به Commitهای کمتری نیاز دارید، با استفاده از این دستور میتوانید تعداد کامیتهای موردنیاز را انتخاب کنید. اگر فقط سه کامیت آخر را بخواهید، میتوانید آرگومان 3- را درادامه دستور git log قرار دهید که به این صورت خواهد بود: git log -3.
- after– یا before-: این دستور خروجی را براساس تاریخ و زمان فیلتر میکند. برای مشخصکردن تاریخ، باید از آرگومان after– یا before- استفاده کنید. هر دو آرگومان انواع فرمتهای تاریخ را میپذیرند که بدینصورت اجرا خواهند شد: git log –after=”yy-mm-dd” یا git log –after=”21 days ago” یا git log –after=”2019-11-01″ –before=”2019-11-08″.
- git log –author=”<pattern>”: با استفاده از این دستور، میتوانید Commitهای هر کاربر را نمایش دهد. فرض کنید میخواهیم کامیتهایی را فهرست کنیم که فقط عضوی از عضو تیم خاص انجام میدهد. این دستور عبارتی منظم را میگیرد و فهرستی از Commitهای ساخت نویسندگانی را برمیگرداند که با آن الگو مطابقت دارند. بهجای الگو میتوانید از نام دقیق استفاده کنید که دستور بدینصورت اجرا خواهد شد: git log –author=”Author name” یا git log -author=”@gmail.com”.
- git log –grep=”<pattern>”: اگر بخواهید خروجی را براساس پیام ثبتشده در commit فیلتر کنید، از این دستور میتوانید استفاده کنید که بدینصورت اجرا خواهد شد: git log –grep=” commit message”.
- git log <file>: اغلب اوقات، فقط به تغییراتی نیاز دارید که برای فایل خاصی رخ داده است. برای نمایش تاریخچه مربوط به هر فایل، باید نام آن را مشخص کنید. بهعنوان مثال، موارد زیر تمام Commitهایی را برمیگرداند که بر فایل foo.py یا bar.py تأثیر گذاشتهاند: git log — foo.py bar.py.
آموزش کامل نصب، پیکرهبندی و تست MariaDB در سرور اوبونتو 20.04 را در مقالهی زیر بخوانید.
۳. روش استفاده
git log
خروجی
commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Author: John Smith commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Author: John Smith commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Author: John Smith commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Author: John Smith commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Author: John Smith
چگونه از دستور Git Log خارج شویم؟
ممکن است شرایطی پیش بیاید که دستور Git Log را اجرا و در آنجا گیر کنید و نتوانید به کامند لاین خود برگردید. برای این کار، باید دکمه Enter و Q را بفشارید.
Git Diff
این دستور برای نشاندادن تغییرها و تفاوتهای بین دو Commit، دو فایل و… استفاده میشود. Git Diff بخشهای مختلفی از دادهها را مقایسه میکند که میتواند بسیار کارآمد باشد. همچنین، میتوانید تغییرات را با کمک دستور Git log با گزینه p- پیگیری کنید. با این کار دستور Git Log بهعنوان یک دستور Git diff کار خواهد کرد.
۱. سینتکس
git diff
۲. روشهای رایج استفاده از Git Diff
- git diff: نمایش تفاوتها و…
- git diff –staged: برای بررسی تغییرات در منطقه مرحلهبندی، دستور Git Diff را بههمراه گزینه staged– اجرا کنید.
- git diff head: برای پیگیری تغییرات هِد فایلها، دستور Git Diff را با آرگومان Heaf اجرا کنید.
- git diff <commit1-sha> <commit2-sha>: فرض کنید میخواهیم تغییرات بین Commitهای e553fc08cb و f1ddc7c9e7 را دنبال کنیم. دستور Git Diff تغییرات بین دو Commit را نشان میدهد.
- git diff <branch 1> < branch 2>: امکان مقایسه شاخهها را فراهم میکند. میتوانید تغییرات شاخه را با دستور Git Status ردیابی کنید؛ اما چند دستور دیگر میتوانند آن را با جزئیات توضیح دهند. دستور Git Diff ابزاری پرکاربرد برای ردیابی تغییرات است.
۳. روش استفاده
diff --git a/example_diff.txt b/example_diff.txt
خروجی
index 532ce54..0f42eb5 100644 --- a/example_diff.txt +++ b/example_diff.txt @@ -1 +1 @@ -examplediff +example diff
لغو و برگرداندن تغییرات: Git Checkout ،Git Revert ،Git Reset و Git RM
گیت راهها و دستورهای زیادی برای بازگشت به نسخههای قبل ارائه داده است که میتوانید از آنها استفاده کنید.
Git Checkout
در گیت، اصطلاح Checkout برای جابهجایی بین نسخههای مختلف Branch در مخزن بهکار میرود. هنگام جابهجایی بین شاخهها، مراقب فایلهای مرحلهبندیشده و Commitهای خود باشید. اجرای این دستور میتواند خطرناک باشد؛ زیرا پس از جابهجایی فایل به نسخه قدیمی، دیگر نسخه فعلی دردسترس نخواهد بود و راه برگشتی ندارید. این دستور پس از اجرا Branchها را بررسی میکند و فایلهای موجود در سیستم شما را مطابق آن branch بهروزرسانی و بهروزرسانیها را به Git ارسال میکند تا تمام Commitهای جدید در آن شاخه ذخیره شوند.
۱. سینتکس
git checkout <branchname>
۲. روشهای رایج استفاده از Git Checkout
- git checkout <branchname>: برای جابهجایی بین Branchها، از این دستور استفاده کنید.
- git checkout -b <branchname>: دستور Git Checkout به شما امکان میدهد تا شاخهای جدید ایجاد و به آن سوئیچ کنید. گزینه git checkout -b فلگی راحت است که عملیات run git branch <new-branch> را قبل از اجرای git checkout <new-branch> انجام میدهد.
- git checkout <remotebranch>: در آخرین نسخههای Git، میتوانید بین Remote Branchها مانند Branch محلی سوئیچ کنید.
Git Revert
دستور Git Revert تغییرات ایجادشده Commit خاص را برمیگرداند و Commit جدید را با محتوای جدیدشده اضافه میکند. برای مثال، اگر در حال ردیابی باگ هستید و متوجه میشوید که این باگ را Commit اضافه کرده است، بهجای اینکه بهصورت دستی وارد آن بخش شوید و آن بخش را ویرایش و سپس کامیت جدیدی ثبت کنید، از Git Revert میتوانید برای انجام خودکار همه این کارها استفاده کنید.
۱. سینتکس
git revert <commit-ish>
۲. روشهای رایج استفاده از Git Revert
- git revert <commit-ish>: این دستور برای برگرداندن Commit خاصی استفاده میشود. برای برگرداندن Commit، به commit-id نیاز داریم. دستور Git Log شناسه آنها را به ما نشان میدهد.
- git revert -e <commit-ish>: این فلگ برای ویرایش پیام commit قبل از برگرداندن آن Commit استفاده میشود.
- git revert -n <commit-ish>: این گزینه ویرایشگر متن را باز نمیکند و مستقیماً آخرین Commit را برمیگرداند.
3. آموزش استفاده
git revert 099a8b4c8d92f4e4f1ecb5d52e09906747420814
Git Reset
برای بازنشانی تغییرات از دستور Git Reset استفاده میشود که سه شکل اصلی فراخوانی دارد:
- Soft
- Mixed
- Hard
این دستور بهعنوان ماشین زمان برای Git عمل میکند و بین Commitهای مختلف میتوانید سوئیچ کنید. بازنشانی هریک از این تغییرات کمی خطرناک است؛ زیرا تأثیری مستقیم بر پروژه و مخزن گیت شما میگذارد.
۱. سینتکس
git reset <option> <commit-sha>
۲. روشهای رایج استفاده از Git Reset
- git reset –hard: این روش مستقیمترین و ناامنترین و پرکاربردترین گزینه است. گزینه –hard ابتدا تاریخچه Commit را تغییر میدهد. سپس، فهرست مرحلهای و فهرست کاری (فایلهای سیستم شما) باید بازنشانی شوند تا با Commit مشخصشده مطابقت داشته باشند. این کار بهمعنای ازبینرفتن تمام ویرایشهای پس از آن کامیت مدنظر است و تمام پروژه را به کامیت انتخابشده برمیگرداند. بیایید با یک مثال فلگ hard– را بهتر درک کنیم. ابتدا فایلی جدید به مخزن اضافه کنید:
git add <file name>
سپس، برای بررسی وضعیت مخزن، دستور زیر را اجرا کنید:
git status
برای بررسی وضعیت Head و Commitهای قبلی، دستور زیر را اجرا کنید:
git log
تصویر زیر را بررسی کنید:
https://static.javatpoint.com/tutorial/git/images/git-reset2.png
در خروجی بالا، فایلی به نام newfile2.txt اضافه شده است. پس از بررسی وضعیت مخزن، مشاهده میکنید که Head هنوز تغییر نکرده است؛ زیرا تغییرات را Committed نکردهاید. اکنون، میخواهیم دستور reset –hard را اجرا کنیم. دستور Git Reset Hard بهصورت زیر انجام میشود:
git reset --hard
درادامه، خروجی زیر را میبینید:
https://static.javatpoint.com/tutorial/git/images/git-reset3.png
همانطورکه در خروجی بالا مشاهده میکنید، این گزینه تغییرات را بازنشانی میکند و با موقعیت Head آخرین تغییر ثبتشده مطابقت میدهد و تغییرات موجود را از ناحیه مرحلهبندی حذف میکند.
خروجی زیر را در نظر بگیرید:
https://static.javatpoint.com/tutorial/git/images/git-reset4.png
خروجی بالا وضعیت مخزن را پس از هارد ریست نمایش میدهد. میتوانید ببینید هیچچیزی برای commit در مخزن وجود ندارد؛ زیرا تمام تغییرات قبلی را گزینه reset hard برای مطابقت با وضعیت Head فعلی حذف کرده است. بنابراین، فایل newfile2.txt از مخزن حذف شده است.
بهطورکلی، حالت Git Reset Hard عملیات زیر را انجام میدهد:
- Head را به کامیت قبلی برمیگرداند.
- منطقه مرحلهبندی را با محتوایی بهروز میکند که Head جدید به آن اشاره میکند.
- دایرکتوری کاری را برای مطابقت با ناحیه مرحلهبندی بهروز میکند.
- git reset –mixed یا git reset: اگر هیچ آرگومانی را ارسال نکنید، این دستور بهعنوان گزینه پیشفرض در نظر گرفته میشود؛ گزینهای ترکیبی که مرجع را بهروز میکند. ناحیه مرحلهبندی نیز به وضعیت Commit مشخصی بازنشانی میشود. تغییرات انجامنشده در ناحیه مرحلهبندی هم به دایرکتوری کاری منتقل میشوند. بیایید با یک مثال این گزینه را بهتر درک کنیم. فایل جدیدی به نام newfile2.txt ایجاد و سپس وضعیت مخزن را بررسی کنید. برای بررسی وضعیت مخزن، دستور زیر را اجرا کنید:
git status
برای افزودن فایل به منطقه مرحلهبندی، دستور Git Add را بهصورت زیر اجرا کنید:
git add <filename>
دستور بالا فایل را به منطقه مرحلهبندی اضافه میکند. خروجی زیر را در نظر بگیرید:
https://static.javatpoint.com/tutorial/git/images/git-reset5.png
در خروجی بالا، فایل newfile2.txt را به مخزن محلی خود اضافه کنید. اکنون دستور Reset Mixed را در این مخزن کنید که بهصورت زیر عمل خواهد کرد:
git reset –mixed
یا
git reset
دستور بالا وضعیت Head را بازنشانی میکند و هیچ دادهای را از ناحیه مرحله حذف نمیکند تا با موقعیت Head مطابقت داشته باشد. خروجی زیر را در نظر بگیرید:
https://static.javatpoint.com/tutorial/git/images/git-reset6.png
از خروجی بالا میبینید که با اجرای دستور git reset -mixed موقعیت Head را ریست و وضعیت مخزن را نیز بررسی کردهاید. همانطورکه میبینید، وضعیت مخزن با این دستور تغییر نکرده است؛ بنابراین، واضح است که حالت mixed- هیچ دادهای را از ناحیه مرحلهبندی پاک نمیکند.
Git RM
در گیت، عبارت RM مخفف Remove است. برای حذف فایلها از مخزن گیت، میتوانید از این دستور استفاده کنید. همچنین، این دستور فایلها را از مرحله Staging حذف میکند تا دیگر تغییرات آن را گیت ثبت نکند.
۱. سینتکس
git rm <file Name>
۲. روشهای رایج استفاده از Git RM
- git rm –cached <file name>: این دستور همانند دستور اصلی، یک فایل را فقط از سیستم کنترل ورژن بههمراه کش حذف میکند و مخزن اصلی را تغییر نمیدهد.
دستور Git RM تا قبل از ثبت Commit جدید بازیابیشدنی است. تا زمانی که دستور Commit اجرا نشده است، فایلهای حذفشده را با دستورهایی مانند Git Reset یا Git Checkout میتوانید بازیابی کنید.
جمعبندی
گیت چیست؟ اکنون که توانستید گیت را نصب و به پروژههای خود اضافه کنید و تغییرات پروژهتان را ثبت و درصورت نیاز بازیابی کنید، گیت را بهصورت واقعی میتوانید در پروژههای خود بهکار ببرید. گیت سیستمی واقعاً سریع و ایمن و پرامکانات است که جزءبهجزء تغییرات پروژه شما را ثبت میکند و تاریخچهای کامل از پروژه را دراختیارتان قرار میدهد تا هر زمان که نیاز داشتید، پروژه را به نسخههای قبلی بازگردانید. البته گیت حاوی دستورها و امکانات بسیاری زیادی است که بهعنوان قدم بعدی میتوانید در مستندات گیت آنها را مطالعه کنید.
سؤالات متداول
۱. گیت چیست و چرا از گیت استفاده میکنیم؟
Git ابزار DevOps است که برای مدیریت سورس کد پروژه استفاده میشود.
۲. آیا گیت Git همان گیت هاب GitHub است؟
خیر.
- گیت سیستم کنترل ورژن (VSC) برای مدیریت تغییرات پروژه است.
- گیت هاب سیستم میزبانی برای ذخیره تاریخچهها و مخازن گیت برای دسترسی بهصورت آنلاین است.
۳. آیا گیت و گیت هاب رایگان هستند؟
بله.
۴. گیت برای چه زبان برنامهنویسی کاربردی است؟
از گیت برای مدیریت سورس کد پروژههای مختلف استفاده میشود و هر نوع فایل با هر زبان برنامهنویسی را میتوانید با آن ردیابی کنید.
۵. آیا گیت برای برنامهنویسان مبتدی مناسب است؟
خیر، برنامهنویسان تازهکار بهتر است مباحث ابتدایی را عمیق بیاموزند.
۶. Git به کدام زبان نوشته میشود؟
- Python
- C
- C++
- Perl
- Tcl
۷. در گیت تاریخچه کدها کجا ذخیره میشوند؟
در دایرکتوری پروژه شما و در فایل git.، گیت پایگاهداده مخصوص به خود را دارد که پس از رمزنگاری، تاریخچه کدها را در آن ذخیره میکند.
درود برشما امیدوارم همیشه موفق و پیروز باشید سایت شما بسیار خوب و تخصصی است مطمئنم جز سایت های محبوب مهندسان کامپیوتر خواهید شد
ممنون از شما