گیت (git) چیست؟(آموزش مختصر Git)

گیت چیست:

یک نرم‌افزار کنترل نسخه است که به صورت آزاد و متن‌باز منتشر شده و برای بازنگری و مدیریت کد است. کار اصلی آن دنبال کردن تغییر فایل‌های کامپیوتری و دنبال کردن کارهای انجام شده روی آن‌ها توسط افراد مختلف است. هدف اولیه این نرم‌افزار برای استفاده در پروژه‌های نرم‌افزاری بوده‌است ولی می‌توان از آن تنها برای دنبال کردن تغییر فایل‌ها هم استفاده کرد. (ویکیپدیا)

گیت ابتدا برای توسعهٔ لینوکس توسط لینوس تروالدز به وجود آمد. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچهٔ کامل تغییرها و قابلیت بازنگری آن‌ها است.

گیت به چه دردی می خورد!

این دیدگاه من از گیت هست: اگر شروع به نوشتن کد کنید بعد از گذشت مدتی واقعا دنبال کردن تغییراتی که روی کد دادیم ویرایش هایی که روی کد کردیم واقعا سخت میشه گیت باعث میشه تا بتوان روند کد را دنبال کرد. (البته این تعریف صرفا برای من که تنها کد مینویسم درست هست و گیت کارایی اصلیش اینه که بشه گروهی کد زد و در پروژه های بزرگ مشارکت کرد.)

شما می توانید مخرن گیت را به یکی از دو روش زیرایجاد کنید:

  1. یک پوشه محلی که ، آن را به مخرن گیت تبدیل کنید.
  2. از یک مخزن گیت موجود clone (نسخه برداری) کنید.

فعال کردن Git:

دستور git init یک مخزن گیت جدید می‌سازد. این مخزن برای تبدیل یک پروژه موجود و نسخه‌بندی نشده یا مقداردهی اولیه یک مخزن جدید و خالی استفاده می‌شود. (بنابراین اولین دستوری است که در یک پروژه جدید اجرا می‌شود.) اجرای git init یک زیر پوشه git. در پوشه کاری کنونی می‌سازد.

دستور git config:

گیت با ابزاری به نام git config ارائه می‌شود که به شما امکان تنظیم و خواندن متغیرهای پیکربندی گیت را می‌دهد. برای شروع به کار با git باید اسم و ایمیل خود را تنظیم کنید تا مشخص شود چه کسی چه تغییراتی را انجام می دهد.

دستور git status:

با این دستور وضعیت مخزن خود را بررسی کنید. ببینید چه فایل‌هایی داخل آن هستند. چه تغییراتی نیازمنداضافه شدن و یا Commit شدن هستند.

هر فایلی در پوشه کاری شما به طور کلی دو وضعیت دارد: tracked(دنبال شده). یا untracked(دنبال نشده).

trackedفایل ‌ها می‌توانند سه حالت داشته باشند :

  1. unmodified(باید توسط دستور add به پروژه اضافه شوند.)
  2. staged(با دستور add به پروژه اضافه شده ولی commit نشده است.)
  3. modified(در پایان با commit کردن فایل ها به این حالت در می آیند.) 

به طور خلاصه، tracked فایل‌ها آنهایی هستند که گیت آن‌ها را می‌شناسد. untracked فایل‌ها  هر فایلی که در اسنپ‌شات آخر شما نبوده باشد و شما را آن را add نکرده باشید.

دستور git add:

این دستور فایلی را به مخزن شما اضافه نخواهد کرد. در عوض، گیت را از وجود فایل‌های جدید خبردار می‌کند. بعد از اینکه فایل‌ها را add کردید، آن‌ها به “اسنپ‌شات‌های”مخزنتان اضافه خواهند شد.

اضافه کردن یک فایل: 

اضافه کردن همه فایل ها:

دستور git commit:

برای ثبت تغییرات یا به اصطلاح کامیت‌کردن تغییرات، از دستور commit استفاده می‌کنیم. در این مرحله فایل‌هایی را که با دستور add به حالت stage برده‌ایم در سیستم گیت ثبت می‌کنیم. برای ثبت هر تغییر نیاز است یک پیام هم با آن ثبت شود تا معلوم شود در این قسمت از تغییرات لحاظ شده چه کار کرده‌ایم، یا چه تغییراتی داده‌ایم. دستور کامیت بصورت زیر است:

که با اجرای این دستور ویرایش‌گرِ فایل شما باز شده و میتوانید پیام خود را در آن بنویسید و ذخیره کنید و به این صورت تغییرات فایل شما ثبت می‌شود و یک کامیت صورت می‌گیرد.

یک راه متداول‌تر هم که برای پیام‌های کامیت یک خطی کاربرد دارد، بصورت زیر است:

اگر برخی فایل‌ها را اضافه کردید یا یک باگ را اصلاح کرده‌اید؛ اما نمی‌خواهید پیام کامیت دیگری را اضافه کنید، در این صورت می‌توانید از دستور گیت زیر با فلگ –no-edit استفاده کنید:

در اینجا یک نکته بسیار مهم را باید به خاطر بسپارید و آن این است که متمم زدن به کامیت آخر موجب بازنویسی سابقه کامیت می‌شود. این بدان معنی است که id کامیت زمانی که متمم می‌زنید، تغییر خواهد یافت.

همیشه commit message خوب بنویسیم تا تغییرات قابل ردیابی شود. یک commit message خوب شامل این مشود که چه تغییراتی در کجای برنامه ایجاد شده است و به چه دلیل

ایجاد فایل gitignore. :

در این فایل مشخص میکنیم که باید چه فایل هایی جزو پروژه نباشد و توسط گیت دنبال نشود به عنوان مثال بعد از ایجاد فایل اگر در داخل آن بنویسم log.* همه فایل هایی که پسوند log دارند به پروژه اضافه نمی شوند.

دستور git stash:

تغییرات را به صورت موقت نگه میدارد تا بعد یه پروژه اضافه شود.

و برای اضافه کردن تغییرات به پروژه

دستور git diff:

دستور git diff تغییرات را با HEAD مقایسه می کند منظور تغییرات انجام شده نسبت به آخرین کامیت را نمایش میدهد. برای مقایسه با کامیت های قبل تر می توان بصورت زیر عمل کرد مثلا مقایسه با ۳ کامیت قبل تر

نمایش تغییرات فایل ها در حالت staged:

دستور git log:

git log  همه تاریخچه کامیت را ببینید. همچنین می‌توانید از این دستور به صورت git log -p file_name برای مشاهده یک فایل استفاده کنید. با زدن q از آن خارج می‌شوید. برای دین تاریخچه به صورت تک خطی:

دستور git blame :

git blame file_name  با این دستور می‌بینید که چه کسی چه چیزی را در file_name تغییر داده است.

دستور git tag :

با این دستور می توان روی کامیت های مهم tag اضافه کرد. برای دیدن همه کامیت ها :

برای اضافه کردن tag به آخرین commit :

دستور git clean :

 با این دستور فایل‌های ردگیری نشده را در دایرکتوری کاری محلی حذف کنید.

  • فلگ n- برای نشان دادن فایل هایی که قرار است حذف شود پیش از حذف کردن است.
  • فلگ f- برای حذف بدون تایید فایل‌ها است.
  • فاگ i- برای حذف تایید می خواهد.
  • از فلگ d- برای حذف دایرکتوری‌های ردگیری نشده استفاده میشود.

دستور git commit –amend :

فرض کنید که شما چندین فایل را commit کرده‌اید و متوجه شده‌اید که پیام Commit اصلا واضح نیست. اکنون می‌خواهید که پیام را تغییر دهید. برای این کار می‌توانید از دستور git commit –amend استفاده نمایید.

دستور git revert :

 این دستور به بازگردانی تأثیرات تغییرهای صورت گرفته در commit می‌پردازد.

دستور git reset :

برگرداندن پروژه به چند commit قبلی که به دو طریق soft و hard انجام می شود در حالت soft تغییرات به صورت staged در می آید و برای ثبت شدن تغییرات باید commit اجرا شود ولی در حالت hard تغییرات ثبت می شود و نیازی به کامیت نیست.

برای عدم ذخیره و unstated کردن یک فایل می توان از دستور زیر استفاده کرد.

دستور git checkout :

فرض کنیم که پشیمان شده و مجدد می‌خواهیم آخرین تغییرات را بازگردانی کنیم که در این صورت زیر می‌توان از کامند زیر استفاده کرد:

برای برگرداندن تغییرات فقط یک فایل به کامیت قبلی به صورت زیر عمل می کنیم:

دستور git :

از این دستور برای حذف فایل از پروژه و تاریخچه گیت استفاده می شود.

آشنایی با کاربرد Branch در Git (از سکان آکادمی)

زمانی که با استفاده از گیت یک ریپازیتوری جدید می‌سازیم، به صورت خودکار یک برنچ (شاخه) تحت عنوان master ساخته می‌شود که نقش شاخهٔ اصلی ریپازیتوری مذکور را بازی خواهد کرد و هر کامیتی که انجام دهیم نیز روی این شاخه اِعمال خواهد شد و این در حالی است که معمولاً‌ تیم‌های نرم‌افزاری از این شاخه به عنوان نسخه‌ای از نرم‌افزار استفاده می‌کنند که قرار است روی سرورهای اصلی دیپلوی گردد. با این تفاسیر، منطقی به نظر می‌رسد که این بِرَنچ به عنوان فضای آزمون و خطا در حین کدنویسی قملداد نشده بلکه فضاها یا بهتر بگوییم شاخه‌های فرعی دیگری ساخته و در آن‌ها اقدام به توسعهٔ فیچرهای جدید نموده سپس آن‌ها را با شاخهٔ مَستر ادغام نمود.

برای اضافه کردن یک branch :

برای رفتن به شاخه ای که ایجاد کرده ایم:

برای اضافه کردن تغییرات branch به شاخه اصلی:

برای حذف یک branch:

اضافه کردن یک پروژه از github :

برای اضافه کردن تغییرات به گیت هاب:

برای دریافت تغییرات از گیت هاب:

سخن پایانی

تا به اینجا تمام دستوراتی که برای ثبت تغییرات یا بازگردانی تغییرات و مقایسه تغییرات با فایل های قبلی را توضیح دادم فکر کنم برای کار کردن فعلا همین ها کافی است در صورت نیاز به دستورات جدید همین نوشته را آپدیت میکنم.

دیدگاهتان را بنویسید