آشنایی با سامانه کنترل نسخه گیت (Git) - بخش دوم
دانستن تغییر یافتن یا نیافتن یک فایل به تنهایی دارای ارزش بالایی نیست مگر آن که بدانیم کدام قسمت از فایل و به چه شکلی تغییر کرده است. گیت امکان بررسی تغییرات ایجاد شده را فراهم می کند.
ایجاد تغییر در یک فایل
همان طور که در مقاله قبل ذکر شد، فایلی را باز کرده و تغییری در آن ایجاد می کنیم؛ به طور مثال، در انتهای فایل متنی و از سر خط جمله ای را به آن اضافه کرده و آن را ذخیره می کنیم. حال با توجه به این کار، با دستور git status وضعیت بررسی می شود و همان گونه که قبلاً دیده اید، فایل تغییر یافته در خروجی نشان داده می شود.
برای راحت شدن کار فرض کنید که فایل تغییر یافته new_file.txt و متن آن قبل و بعد از تغییر مانند زیر بوده است:
قبل از تغییر
This is my new test file.
This is my test sentence.
بعد از تغییر
This is my new test file.
This sentence is for a new test.
همان طور که در بالا می بینید، جمله دوم از فایل حذف و جای آن را فایل دیگری گرفته است.
دستور نمایش تغییرات فایل
دستور زیر را در ترمینال برای آن که تغییرات رخ داده را ببینیم، اجرا می کنیم:
git diff
واژه diff در دستور بالا، مخفف difference به معنی اختلاف و تفاوت است و به همین منظور برای این دستور در نظر گرفته شده است. با توجه به آن چه در بند قبلی گفته شد، اگر دستور بالا را در ترمینال اجرا کنید با خروجی زیر در ترمینال مواجه خواهید شد:
diff --git a/new_file.txt b/new_file.txt
index 6836b3e..20e7ed9 100644
--- a/new_file.txt
+++ b/new_file.txt
@@ -1,2 +1,2 @@
This is my new test file.
-This is my test sentence.
+This sentence is for a new test.
(END)
تفسیر خروجی دستور git diff
از آن جایی که تنها تصویر فایل بالا تغییر یافته است و جایگزین نسخه اصلی و نهایی فایل نشده است، همان طور که در مقاله قبل دیده اید، گیت دو نسخه از فایل با همان نام می شناسد. یکی از این دو، نسخه ای است که پیش از تغییرات ردیابی شده است و دیگری آن که پس از اعمال تغییرات، ردیابی می شود. فراموش نکنید که هر دو نسخه تنها تصاویری از فایل هستند که گیت آن ها را ضبط کرده است و در حقیقت فایل دوباره ایجاد نمی شود.
بنابر آن چه در بالا گفته شد، علت آن که علامت های a و b در ابتدای نام فایل دیده می شود، برای تمایز قایل شدن بین این دو نسخه از همان فایل است. اندیس نشان داده شده تنها روشی برای علامت زدن فایل ها و تعییرات آن است و به صورت خودکار توسط گیت ایجاد می شود. علامت های --- و +++ هم نشان از نسخه اول و دوم است.
آنچه بسیار مهم است نشانگر تغییرات است: عبارت درون دو @@ نشان دهنده تعداد خطوط و محل تغییر آن است. بنابراین عبارتی که در زیر می آید به این معنی است که خط دوم از فایل نسبت به نسخه قبلی حذف و به خط دوم (همان خط) نسبت به نسخه قبلی خطی اضافه شده است:
@@ -1,2 +1,2 @@
درست است که کمی پیچیده به نظر می رسد، اما اگر بدانید که سامانه های کنترل نسخه عمدتاً متن-محور هستند، هضم آن ساده تر می شود؛ چون این سامانه ها خط به خط ردیابی می کنند و این سبب می شود که تغییرات را هم بر همین مبنای خط-محور ردیابی کنند. در ادامه خروجی دستور، تغییرات نشان داده شده است و علامت های - و + به ترتیب نشان از خط حذفی و اضافی است. علامت (END)، نشان دهنده انتهای فایل است و با فشردن دکمه q می توانید از پنجره درون ترمینال خارج شوید.
نهایی کردن تغییرات و پاک شدن حافظه تغییرات
همان طور که در مقاله پیش گفته شد، با دستور git add می توان فایل ها را به اصطلاح staged کرد. پس از آن که تغییرات فایل ها نهایی شد، با استفاده از این دستور آن را برای ثبت در تاریخچه مخزن آماده می کنیم. در این حالت اگر دوباره دستور git diff را استفاده کنید، خروجی خالی خواهد بود که کاملاً منطقی است؛ چون تنها یک تصویر از فایل در حال ردیابی موجود است. حال اگر می خواهید تغییراتی را که آماده افزودن به تاریخچه شده اند را ببینید کافی است دستور را با پرچم staged در ترمینال وارد کنید:
git diff --staged
خروجی چیزی مانند این خواهد بود:
diff --git a/new_file.txt b/new_file.txt
new file mode 100644
index 0000000..20e7ed9
--- /dev/null
+++ b/new_file.txt
@@ -0,0 +1,2 @@
+This is my new test file.
+This sentence is for a new test.
(END)
ثبت یک رشته تغییرات در تاریخچه مخزن
هر بار که با یک سری تغییرات وابسته به هم در فایل ها، به هدف مورد نظر یا بخشی از آن می رسید، بهتر است تا برای پیشگیری از سردرگمی یا حفظ روند ایجاد تغییرات در سطح کلان، وضعیت فعلی فایل ها را در تاریخچه مخزن ذخیره کنید. فراموش نکنید هر تغییری که در فایل ها می دهید، تا زمانی که در تاریخچه مخزن ثبت نشود، تنها در حافظه سیستم وجود دارد. فرآیند ثبت از سه قسمت زیر تشکیل شده است:
- اجرای دستور اقدام به ثبت تغییرات؛
- درح پیام و افزودن توضیحات برای دلایل و اهداف ایجاد تغییرات؛
- افزوده شدن تغییرات به خط زمانی مخزن.
برای این کار از دستور زیر استفاده می کنیم:
git commit
با اجرای دستور بالا، ویرایشگر متن آغاز به کار کرده و می توانید پیام کامیت خود را بنویسید. این پیام باید روان، مشخص و شامل کلیه مواردی باشد که اهداف و دلایل اعمال تغییرات را توضیح می دهد. پیام نباید خالی رها شود وگرنه فرآیند خود به خود ملغی تلقی می گردد. با ذخیره کردن و خروج از ویرایشگر، تغییرات به تاریخچه افزوده خواهد شد.
اگر می خواهید پیام شما با تفصیلات فنی بیشتری همراه باشد، می توانید با پرچم v که مخفف verbose است، خروجی تغییرات فایل ها را به پیام خود بیافزایید:
git commit -v
در نهایت، خروجی عملیات در ترمینال ظاهر شده و اطلاعات مختصری از کامیت انجام شده را نشان می دهد. چیزی شبیه به این را در ترمینال خواهید دید:
[master (root-commit) 09f96f2] <پیامی که درج کردید>
1 file changed, 2 insertions(+)
create mode 100644 new_file.txt
اگر به خروجی دقت کنید، خواهید دید که فایل جدیدی ایجاد شده است و دو خط به آن افزوده شده است، که مطابق با آن چه در بالا آورده شده است، آن دو خط این هاست:
+This is my new test file.
+This sentence is for a new test.
البته راه سریع تری برای این عملیات نیز هست و آن این است که پیام را به صورت تک خطی در ادامه دستور و با استفاده از پرچم m که مخفف message است، درج نموده و تغییرات در تاریخچه ثبت گردد:
git commit -m "پیام موردنظر شما"
حتی از این فراتر هم می توان رفت و با پرچم a به یکباره همه تغییرات اعمالی را stage کرده و بلافاصله به ویرایشگر پیام بروید:
git commit -a
فهرست مقالات:
مقاله بعدی: