Git - مفاهیم پایه


Advertisements

سیستم کنترل نسخه

Version Control System (VCS) یک نرمافزار است که به برنامهنویسان کمک میکند تا در کنارهم فعالیت کنند و تاریخچه کارهایشان را با هم به اشتراک بگذارند و به خوبی با یکدیگر تعامل داشته باشند.

اهداف اصلی یک VCS:

  • برای برنامهنویسان امکان فعالیت همزمان روی کدها را فراهم میکند.
  • برنامهنویسان بر روی تغییرات 1 یکدیگر، تغییر را بازنویسی 2 نمیکنند.
  • تاریخچه تمام تغییرات را حفظ کرده و در اختیار افراد میگذارد.

در زیر انواع VCS:

  • یک VCS متمرکز ایجاد میکند) CVCS
  • یک VCS گسترده ایجاد میکند) 3DVC

در این فصل، ما تنها در توزیع سیستم کنترل نسخه و به خصوص در تمرکز Git. Git تحت توزیع سیستم کنترل نسخه.

ابزار کنترل نسخه

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

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

ابزار کنترل نسخه

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

در صورتی که سرور دچار مشکل شود و نسخه پشتیبان مناسبی از اطلاعات فراهم نشدهباشد، فعالیتهای بسیاری باید از ابتدا تکرار شوند، حتی ممکن است پروژه به دلیل محدودیت زمانی از بین برود.

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

مزایای GIT

رایگان و متن باز 4 بودن

دستگاه گوارش تحت مجوز منبع باز GPL منتشر شد. آن را آزادانه از طریق اینترنت در دسترس است. شما می توانید از Git برای مدیریت پروژه های اختصاصی بدون پرداخت یک پنی تک استفاده کنید. آن را به عنوان منبع باز است، شما می توانید کد منبع آن را دانلود کنید و همچنین تغییرات انجام با توجه به نیاز خود را.

سریع و کوچک بودن

انجام کارها به صورت محلی 5 باعث سریع شدن کارها میشود، هسته اصلی GIT با استفاده از زبان C نوشته شده است، از این رو بسیار سریعتر و سبکتر از زبانهای سطح بالاتر کار میکند.

Implicit backup

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

امنیت

GIT از الگوریتم رمزنگاری معمول HASH استفاده میکند، و قابلیت ایجاد کلیدواژه 2 را برای کاربر فراهم آورده است، همچنین از Checksum استفاده میکند،و با اینکار تمام فایلها و Commit ها به شکلی ذخیره میشوند، که بدون آشنایی با GIT ، امکان تغییر یا دستکاری آنها وجود نخواهد داشت.

عدم نیاز به سخت افزار قوی

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

ایجاد آسانتر و کاربردی تر شاخه ها

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

اصطلاحات اصلی در DVCS

انبار محلی

هر VCS یک فضای کاری شخصی، برای هر کاربر ایجاد میکند که بر روی رایانه شخصی کاربر قرار دارد، فرد میتواند انبار شخصی خود را داشته باشد و تمام فعالیت هایش را بدون اتصال به اینترنت انجام دهد.

Working Directory and Staging Area or Index

در CVCS ها افراد فایلها را دستکاری 6 میکنند و تغییرات همان لحظه ثبت میشوند، اما در GIT در سه مرحله فعالیتها و دستکاریها انجام میشوند:

Let us see the basic workflow of Git.

فایلها را دستکاری میکنیم

فایلها را به Staging area یا Index منتقل میکنیم.

یک Commit انجام میدهیم و حالا فایلهای Commit شده، میتوانند به سرور اصلی منتقل شوند.

Git Tutorial

دقت داشته باشیم، برای مثال اگر بخواهیم دو فایل را با دو Commit متفاوت دستکاری کنیم، ابتدا باید یکی را به 1SA منتقل کنیم، Commit را انجام دهیم، سپس این کار را برای فایل دیگر، تکرار کنیم.

# First commit
[bash]$ git add sort.c

# adds file to the staging area
[bash]$ git commit –m “Added sort operation”

# Second commit
[bash]$ git add search.c

# adds file to the staging area
[bash]$ git commit –m “Added search operation”

Blobs

مخفف Binary Large Object است، هر نسخه از فایلها در انبار 2 با یک BLOB شناخته میشود، یک BLOB یک فایل باینری است، که اطلاعات یک فایل را به صورت باینری و نه Meta data نگهداری میکند، که با SH1 Hash آدرسدهی میشود، در GIT database تمام فایلها اینگونه آدرس دهی میشوند.

Trees

درختها BLOB ها را با همان سطحبندی و آدرسدهی Directory هایی که فایلها در آنها ذخیره شدهاند، به صورت SHA1 نگهداری میکند.

Commits

وضعیت جاری یک انبار را در خود نگهداری کرده و نمایش میدهد،در واقع هر دستکاری که روی DVCS انجام دهیم، یک Commit انجام دادهایم، Commit هم با SHA1 نامگذاری میشود، میتوان Commit را به عنوان یک گره 3 در لیست فعالیتهای انبار در نظر گرفت، میتوان با مراجعه به یک Commit اطلاعات یا کامنتهای درج شده در آن، نظیر تاریخ و زمان، توضیحات فردی که آن را انجام داده و یا تغییراتی که نسبت به فایل قبلی در آن Commit ایجاد شده است را مشاهده کرد

Branches

برای ایجاد خطها و شاخههای مختلف، در هنگام توسعه نرم افزار به کار میرود، به طور معمول برای ایجاد و توسعه یک ویژگی جدید در پروژه یک Branch ایجاد میشود، به صورت پیشفرض همه فعالیتها در Master انجام میشوند، میتوانیم شاخههای مختلفی ایجاد کنیم، هر با یک Branch Head شناخته میشود، به این شکل که اگر ما در یک Branch ، یک Commit انجام دهیم، آن Commit ، Head را در آن Branch ، به روز میکند.

Tags

مفهومی بسیار نزدیک به Branch دارد، با این تفاوت که یک TAG غیرقابل دستکاری 1 است، در واقع هر گاه بخواهیم Branch ای ایجاد کنیم که کسی نتواند تغییرش بدهد، یک Tag ایجاد میکنیم.

Clone

با Clone یک کپی کامل از انبار، به صورت محلی ایجاد میکنیم، میتوانیم تمام تغییرات را روی آن اعمال کنیم، و تنها هنگامی به اشتراک گذاشته میشود، که همزمانسازی 2 شود.

Pull

دریافت اطلاعات از یک Remote Directory به داخل یک Local Directory ، برای همزمان سازی انبار محلی استفاده میشود.

Push

تغییرات یک انبار محلی را به یک Remote Directory منتقل میکند، در واقع کارهایمان را به اشتراک میگذاریم.

HEAD

نمایشگر 3 آخرین تغییرات در یک Branch است، هروقت که یک Commit انجام دهیم، Head به روزرسانی میشود. Head ها در .git/refs/heads/ ذخیره میشوند.

[CentOS]$ ls -1 .git/refs/heads/
master

[CentOS]$ cat .git/refs/heads/master
570837e7d58fa4bccd86cb575d884502188b0c49

Revision

Revision نمایش دهنده ویراش 4 کد منبع 5 است، Revision ها با انجام Commit ایجاد میشوند و اینها هم با SHA1 آدرس دهی میشوند.

URL

آدرسی است که انبار در آن قرار دارد و در .git/url ذخیره میشود.

[tom@CentOS tom_repo]$ pwd
/home/tom/tom_repo

[tom@CentOS tom_repo]$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = gituser@git.server.com:project.git
fetch = +refs/heads/*:refs/remotes/origin/*
Advertisements