آشنایی با سامانه کنترل نسخه گیت (Git) - بخش چهارم

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

شبیه‌سازی (کلون کردن) مخزن گیت

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

  • ایجاد دایرکتوری شامل کلیه محتواهای مخزن مرجع در ماشین محلی (مانند رایانه شخصی شما)؛
  • ایجاد کانال ارتباطی و ردیابی تغییرات محتوای مرجع نسبت به نسخه‌های محلی.

از آن جایی که کلون کردن نسبت به یک مرجع انجام می‌شود، در ادامه فرض می‌گیریم این مرجع از نوع راه دور (Remote Repository) و یک سرویس‌دهنده مخازن گیت باشد؛ مانند گیت‌هاب، بیت‌باکت یا گیت‌لب.

کلون کردن از مخزن گیت

برای شبیه سازی یک مخزن، می توان آن را با دستور زیر و از طریق شیوه امن اتصال SSH کلون کرد:

git clone <لینک پروتکل امن>

به طور مثال و با فرض آن که سرویس دهنده مخزن، گیت هاب باشد:

git clone git@github.com:yourproject.git 

البته راه امن دیگر کلون کردن همین مخزن، استفاده از کلون تحت پروتکل امن Https است. به طور مثال:

git clone 

افزودن مخزن گیت راه دور به عنوان مرجع مخزن محلی

مخزن راه دور رونوشتی از مخزن مادری است که از طریق اینترنت یا اینترانت سازمانی امکان دسترسی به آن، برای همکاری کاربران گروه‌های توسعه و پشتیبانی نرم‌افزار فراهم می‌گردد. این مخازن، امکان پویایی بیشینه را برای گروه‌های کاری فراهم می‌آورد؛ به این شکل که زمان لازم برای افزودن یا حذف کردن آن‌ها بسیار اندک بوده و همکاری بر روی پروژه‌های گوناگون را برای همکاران و حتی کاربران مهمان را فراهم می‌کنند.

بررسی مخازن راه دور موجود

با  دستور زیر می توان ریموت‌های در دسترس را فهرست کرده و دید:

git remote

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

origin

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

ایجاد مرجع راه دور برای مخزن محلی

اگر بخواهید به صورت دستی یک ریموت ایجاد کنید، از دستور زیر استفاده کنید:

git remote add <remote's name> <remote's URL>

به طور مثال،

git remote add my-remote http://my-remote.com

بنابراین، خروجی ترمینال پس از فهرست کردن ریموت‌ها چنین خواهد بود:

my-remote
origin

دریافت و به‌روز‌ رسانی ریموت

برای این که ریموت به‌روز‌ رسانی شود، از دستور زیر استفاده می‌شود:

git fetch

به روز رسانی مخزن محلی با ریموت

پس از به‌روز‌ رسانی ریموت، برای این که اطلاعات دریافت شده را با محتوای مخزن محلی ترکیب و آن را به‌روز رسانی کنید، از دستور زیر استفاده کنید:

git merge <remote's branch> <local branch>

در مقالات بعدی مفهوم شاخه (branch) را توضیح خواهم داد؛ اما در حال حاضر، همین اندازه کافی است که بدانید اولین شاخه که با ایجاد مخزن پدید می‌آید، شاخه master است و معمولاً همین شاخه از مرجع برای کلون کردن و به‌روز رسانی محتوای محلی استفاده می‌شود.

بنابر این دستور بالا معمولاً به صورت زیر است:

git merge origin/master master

به‌روز رسانی مخزن ریموت و مرجع آن

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

git push <remote's name> <local branch's name>

به طور مثال:

git push origin master

دستور میانبر برای دریافت و ترکیب محتوای مرجع

برای سریع‌تر شدن کار و با توجه به این که به طور معمول پس از دریافت اطلاعات از مرجع نیاز به ترکیب آن ها با محتوای محلی است، از دستور زیر استفاده می شود:

git pull 

که معادل است با:

git fetch && git merge origin/master master

نمایش جزییات یک مخزن ریموت

برای آن که اطلاعات تفصیلی مربوط به یک ریموت را در خروجی ترمینال ببینید، از دستور زیر استفاده کنید:

git remote show <remote's name>

حذف یک مخزن ریموت

این دستور به مرجع ریموت موردنظر ما آسیبی نمی‌زند؛ بلکه تنها سبب حذف ارتباط مخزن محلی با مرجع مربوط به آن می‌شود و هر گاه بخواهید، می‌توانید دوباره آن را ایجاد کنید. برای حذف ریموت باید دستور زیر را در ترمینال وارد کنید:

git remote remove <remote's name>

نشانه‌گذاری تغییرات مهم مخزن

برای آن که بتوان خط زمانی و نحوه پیشرفت توسعه برنامه را به نحو مؤثری قابل درک کنید، بهترین کار نشانه‌گذاری است. در مخازن گیت با به کار بردن مناسب تگ(Tag)ها که از جنس رشته‌اند، نه تنها می‌توانید کامیت‌های مهم مانند نسخ انتشار(release) برنامه را مشخص نمایید؛ بلکه می‌توانید دسته‌بندی دقیقی برای مشخص نمودن حوزه‌ای که تغییرات در آن انجام شده است، ایجاد نمایید.

برای نمایش فهرست تگ‌ها از دستور زیر استفاده کنید:

 git tag

و چنانچه بخواهید تگ‌هایی که از یک الگوی عام تبعیت می‌کنند را بیابید، دستور زیر را اجرا کنید:

git tag --list <الگوی عام>

در گیت، دو نوع تگ وجود دارد: عادی و تفصیلی. برای تگ عادی از دستور زیر استفاده می‌شود:

git tag "<تگ موردنظر>"

و برای تگ تفصیلی که بیش از یک برچسب عادی است و شامل مواردی چون پیام تگ، کاربر تگ‌کننده و تاریخ ایجاد تگ، از دستور زیر در ترمینال استفاده کنید:

git tag -a "<تگ موردنظر>" -m "<پیام تگ>"

برای آن که کامیتی که تگ خاصی دارد را ببینید، این دستور را در ترمینال وارد کنید:

git show "<تگ موردنظر>"

و برای این که تگ دلخواهتان را به مرجع ارسال کنید:

git push <remote's name> <tag>

به طور مثال:

git push origin 1.1.2

توجه داشته باشید که تگ از جنس رشته است؛ حتی اگر کاملاً از اعداد تشکیل شده باشد و تنها در برخی موارد، مانند مورد بالا، درون نشانگران رشته (") قرار نگرفته است. در ادامه خالی از لطف نیست که بدانید می‌توانید با دستور زیر همه تگ‌ها را با هم به مخزن مرجع بفرستید:

git push <remote's name> --tags

فراموش نکنید که هنگام به‌روز رسانی مخزن مرجع با محتوای مخزن محلی، تگ‌ها ارسال نمی‌شوند و باید حتماً آنها را از ترمینال و با اجرای دستورات ذکر شده انتقال دهید.

 

فهرست مقالات: