این کتاب عمدتاً به این موضوع میپردازد که چگونه میتوان با حدود ۳۰ زیرفرمان اصلی گیت مانند checkout، branch، remote و … کار کرد.
اما باید توجه داشت که گیت در ابتدا بهعنوان یک جعبهابزار (toolkit) برای مدیریت نسخه طراحی شد، نه یک سیستم کنترل نسخه (VCS) کامل و کاربرپسند. به همین دلیل، بخشی از زیرفرمانهای آن عملیات سطحپایین انجام میدهند و برای استفاده در زنجیرههای یونیکسی (Unix pipelines) یا فراخوانی از اسکریپتها ساخته شدهاند.
همانطور که احتمالاً تا حالا متوجه شدهاید، نه فصل اول این کتاب تقریباً منحصراً با فرمانهای لعاب سروکار دارند. اما در این فصل بیشتر با فرمانهای سطحپایینِ لولهکشی سروکار خواهید داشت، زیرا آنها دسترسی به سازوکار درونی گیت را فراهم میکنند و به نشان دادن این که گیت چگونه و چرا کارهایش را انجام میدهد کمک میکنند. بسیاری از این فرمانها قرار نیست بهصورت دستی در خط فرمان استفاده شوند، بلکه به عنوان بلوکهای سازنده برای ابزارهای جدید و اسکریپتهای سفارشی به کار میروند.
وقتی در یک دایرکتوری جدید یا موجود git init اجرا میکنید، گیت دایرکتوری .git را ایجاد میکند که تقریباً همه چیزهایی را که گیت ذخیره و دستکاری میکند در آن قرار دارد.
اگر بخواهید مخزن خود را پشتیبانگیری یا کلون کنید، کپی کردن این تک دایرکتوری به مکان دیگری تقریباً همه چیز مورد نیازتان را در اختیارتان میگذارد.
کل این فصل اساساً به آنچه در این دایرکتوری میتوانید ببینید میپردازد.
در اینجا نمایی از آنچه معمولاً یک دایرکتوری تازهسازیشده .git به نظر میرسد آمده است:
$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/بسته به نسخهی گیت شما، ممکن است محتوای اضافی دیگری در آنجا ببینید، اما این یک مخزن تازهساختهشده با دستور git init است — همان چیزی که بهطور پیشفرض میبینید.
فایل description تنها توسط برنامهی GitWeb استفاده میشود، پس نگران آن نباشید.
فایل config شامل گزینههای پیکربندی مخصوص پروژهی شماست و دایرکتوری info یک فایل استثنا (global exclude) نگه میدارد برای الگوهای نادیدهگرفتن که نمیخواهید در فایل .gitignore پیگیری شوند.
دایرکتوری hooks اسکریپتهای هوک سمت کلاینت یا سرور شما را در خود دارد که بهصورت مفصل در ch08-customizing-git.asc توضیح داده شدهاند.
اینجا چهار ورودی مهم باقی میماند: فایلهای HEAD و (هنوز ساختهنشده) index، و دایرکتوریهای objects و refs.
اینها اجزای اصلی گیت هستند.
دایرکتوری objects تمام محتوای پایگاه دادهی شما را ذخیره میکند، دایرکتوری refs اشارهگرهایی به آبجکتهای commit در آن دادهها را نگه میدارد (شاخهها، تگها، ریموتها و غیره)، فایل HEAD به شاخهای که در حال حاضر چکاوت شده اشاره میکند، و فایل index جایی است که گیت اطلاعات ناحیهی آمادهسازی (staging area) را در آن ذخیره میکند.
اکنون هر یک از این بخشها را با جزئیات بیشتری بررسی خواهید کرد تا ببینید گیت چگونه کار میکند.