راه اندازی اولین پروژه با Git

تو این مقاله قصد داریم تا Git را برای یک پروژه فعال کنیم تا بتوانیم از این به بعد تغییرات کد را ثبت و رهگیری کنیم. به صورت کلی به دو صورت می توانیم یک پروژه را مبتنی بر git پیش ببریم:

  1. یک پروژه داخل سیستم دارید که تا حالا هیچ سیستم مدیریت نسخه ای روی آن اجرا نشده است.
  2. یک پروژه روی سایت های مبتنی بر git مثل gitlab یا github یا سرور شرکت وجود دارد که میخواهید توسعه آن را ادامه دهید.

به این نکته توجه کنید که این مقاله یک فرآیند کلی و البته کاربردی را در ساده ترین حالت ممکن انجام می دهیم و در مقالات دیگر به سراغ جزئیات می رویم. پس به صورت کلی نکاتی که تو این مقاله بررسی خواهیم کرد:

پس از پایان این مقاله شما می توانید یک مخزن Git ایجاد کنید، از دستورات کاربردی Git استفاده کنید، تغییرات یک فایل را ثبت یا Commit کنید، تاریخچه تغییرات پروژه خود را مشاهده و مخزن خود را به یک سرویس میزبانی Git مثل GitHub یا GitLab متصل و پروژه را به این سرویس ها ارسال کنید.

مخزن گیت یا Git Repository چیست؟

Git Repository یک فضای مجازی از پروژه شماست که به شما اجازه ذخیره تغییرات و نسخه های مختلف کد را می دهد تا در زمان مورد نیاز از آن استفاده کنید. به عبارت دیگر در حالت عادی هیچ تاریخچه تغییری در پروژه شما ثبت نمی شود (منظور اینکه فایل ها تغییر میکند اما این که چه فایلی، توسط چه کسی چه تغییری کرده ثبت نمی شود) اما وقتی پروژه خود را به یک مخزن گیت یا Git repository تبدیل کنید از این به بعد می توانید تمام تاریخچه تغییرات پروژه را ثبت و مشاهده کنید.

فعالسازی Git با دستور git init

اگر تا کنون git روی پروژه شما فعال نشده باشد باید برای راه اندازی اولیه یک repository جدید، باید از دستور git init استفاده کنید. دستور git init تنها یک بار آن هم در زمان ایجاد repository برای یک پروژه مورد استفاده قرار می‌گیرد که پروژه را مجهز به کنترل نسخه Git می کند تا از این به بعد تاریخچه تمام تغییرات شما ثبت و ضبط شود.

اجرای دستور git init یک پوشه به نام .git در پوشه فعلی شما یعنی داخل پوشه پروژه مد نظر شما ایجاد می کند که تمام تغییرات در این پوشه ثبت شده ولی این پوشه مخفی یا hidden است و ما به این پوشه کاری نداریم. همچنین بعد از ایجاد پوشه .git یک شاخه یا اصطلاحا branch اصلی هم در پروژه شما ایجاد می شود.

نکته: برای اینکه بفهمید git روی پروژه شما فعال شده است یا نه کافیست پس از نصب git از طریق خط فرمان به مسیر پوشه پروژه رفته و دستور git status را اجرا کنید اگر git روی پروژه شما فعال نبود به خطای زیر روبرو خواهید شد در غیر این صورت git روی پروژه شما فعال است.

fatal: not a git repository (or any of the parent directories): .git

فعالسازی Git روی پروژه موجود شما

بیاید فرض دستور git status را زدیم و با خطای بالا روبرو شدیم پس git روی پروژه ما فعال نیست و میخواهیم از الان به بعد پروژه تبدیل به یک Git Repository شود تا تمام تغییرات را ثبت کنیم. برای این کار ابتدا با دستور cd به صفحه اصلی پوشه پروژه خود بروید و دستور git init را اجرا کنید.

cd /path/to/your/existing/code 
git init

نکته در ویندوز: برای رفتن سریع به آدرس مورد نظر در command prompt ابتدا به مسیر پوشه پروژه رفته، سپس روی نوار آدرس کلیک کنید و cmd را تایپ و سپس Enter بزنید، با این کار بلافاصله command prompt در مسیر مورد نظر باز شده و نیاز به استفاده از cd نیست. اگر از Gitbash استفاده می کنید کافیست در پوشه پروژه جای خالی کلیک راست کرده و گزینه Git Bash here را انتخاب کنید.

دستور git init در واقع پوشه ای که داخل آن هستیم را به Git repository تبدیل می کند اما اگر بخواهیم پوشه دیگر را تبدیل کنید کافیست از دستور زیر استفاده کنیم و به جای <project directory> آدرس پوشه مورد نظر خود را جایگزین کنید:

git init <project directory>

برای جزئیات بیشتر میتوانید مطلب git init را مطالعه کنید.

کلون یا Clone یک Git repository موجود با دستور git clone

ایندفعه بیایید فرض کنیم که یک فرد یا تیم پروژه را روی سرویس های میزبانی Git مثل GitHub دارد و ما قرار است آن پروژه را دانلود کنیم و ادامه دهیم یعنی یک پروژه از قبل روی یک Repository مرکزی موجود است و ما می خواهیم از آن استفاده کنیم به همین منظور با دستور git clone میتوانیم یک نسخه از پروژه و repository را روی سیستم خود کپی یا کلون کنیم. مثل دستور git init دستور git clone هم تنها یک بار مورد استفاده قرار می گیرد. بعد از اینکه توسعه دهنده یک کپی از پروژه روی سیستم خود گرفت می تواند تمام تاریخچه تغییرات قبلی و جدید را روی سیستم خود مشاهده و مدیریت کنید.

git clone <repo url>

دستور git clone یک کپی یا کلون از repository از یک سرور میگیرد. شما باید آدرس Url آن repository را در دستور git clone استفاده کنید. Git از پرتکل های مختلف شبکه و فرمت Url پشتیبانی می کند. در این مقاله ما از پروتکل Git SSH استفاده کردیم. آدرس های Git SSH به این شکل هستند: git@HOSTNAME:USERNAME/REPONAME.git

یک مثال از آدرس Git SSH می تواند مثل زیر باشد:

git@bitbucket.org:rhyolight/javascript-data-store.git که دقیقا مطابق فرمت آن است:

HOSTNAME: bitbucket.org
USERNAME: rhyolight
REPONAME: javascript-data-store

وقتی این دستور اجرا می شود، آخرین نسخه فایل های مخرن ریموت روی شاخه اصلی دانلود شده و یه یک پوشه جدید دقیقا با عنوان REPONAME اضافه می شود. مثلا در اینجا اسم پوشه javascript-data-store هست. این پوشه دارای یک پوشه .git که شامل تمام تارخچه repository ریموت است.

برای مستندات بیشتر برای استفاده از دستور git clone برای فرمت های مختلف Url پیشنهاد میکنیم مطلب Git clone را مطالعه نمایید.

ثبت تغییرات در repository با دستور git add و git commit

حالا که repository خود را کلون(clone) یا ایجاد(init) کردید، می توانید تغییرات نسخه فایل ها را ثبت یا اصطلاحا commit کنید. در مثال زیر فرض بر است که یک پروژه در مسیر /path/to/project راه اندازی کردید. این گام ها را برای شروع کار اجرا کنید:

cd /path/to/project 
echo "test content for git tutorial" >> CommitTest.txt 
git add CommitTest.txt 
git commit -m "added CommitTest.txt to the repo"

پس از اجرای این مثال، به repository شما یک فایل CommitTest.txt اضافه شده و همچنین تغییرات این فایل در تارخچه repository ثبت شده و هر گونه تغییر در این فایل در تاریخچه تغییرات ثبت خواهد شد.

این مثال دو دستور جدید گیت را هم معرفی کرده است: دستور git add و git commit. البته این یک مثال خیلی خلاصه بود ولی در آینده به صورت مفصل سراغ بررسی دستور git add و git commit خواهیم رفت.

یک مورد رایج دیگر که در git استفاده می شود تنظیم پارامتر --all در خط فرمان است. اجرای دستور git add --all تمام تغییرات و فایل هایی که قرار نیست تاریخچه تغیرات آن ثبت شود(اصلاحات Untracked files) را به repository اضافه و ساختار repository را بروز میکند.

تفاوت بین Bare repository و Clone repository

اگر از دستور git clone که قبلا تو بخش ایجاد repository از طریق clone گفتیم استفاده کنیم، repository شما برای کار تیمی ریموت آماده ست. دستور git clone به صورت خودکار آدرس ریموت خود را دقیقا همان آدرسی تنظیم می کند که پروژه را از آن کلون کردید. این یعنی بعد از تغییر فایل می توانید آنها را ثبت یا commit کنید و با دستور git push تغییرات را به repository ریموت منتقل کنید.

اگر شما با دستور git init یک repository جدید ایجاد کنید، در ابتدا هیچ آدرس ریموتی برای ارسال تغییرات وجود ندارد. یک الگوی رایج در ایجاد یک repository جدید استفاده از سرویس های میزبانی Git مثل Bitbucket و ایجاد repository در آنجاست. این سرویس یک آدرس ریموت در اختیار شما قرار میدهد تا تغییرات روی سیستم خود را با دستور git push به آن سرور ارسال و میزبانی کنید.

دفعه اول که repository ریموت را ساختید با سرویس انتخابی خود لازم است که تا repository روی سیستم خود را با عملیات mapping تنظیم کنید. در خصوص این فرآیند در تنظیمات که در ادامه آماده بحث خواهی کرد اما به طور خلاصه یعنی اینکه مشخص کنید کدام شاخه یا branch باید به کدام آدرس ریموت ارسال شود.

اگر قرار است خودتا یک هاست ریموت برای میزبانی repository داشته باشیدنیاز به تنظیم repository از نوع Bare هست. هر دو دستور git init و git clone یک پارامتر --bare میگیرند. بیشترین مورد استفاده از این پارامتر زمانی است که یک مخزن گیت ریموت مرکزی می سازید.

ثبت و راه اندازی ریموت

قبل از اینکه بتوانید repository را روی یک سرور یا میزبان Git بفرستید یا اصلاحا به یک repository ریموت ارسال کنید اول باید در تنظیمات نام و آدرس remote این repository را مشخص کنید که طبق دستور زیر آدرس جدید تعریف می شود:

git remote add <remote_name> <remote_repo_url>

این دستور آدرس مخزن ریموت (<remote_repo_url>) را به همراه یک نام(<remote_name>) مشخص می کنیم. بعد از اینکه این ریموت را تعریف کردید حالا وقت ارسال پروژه به ریموت است که با دستور git push هم این کار قابل انجام است.

git push -u <remote_name> <local_branch_name>

در این دستور گفتیم که شاخه <local_branch_name> به ریموت <remote_name> ارسال یا push شود.

برای تنظیمات اضافه برای یک مخزن ریموت لازم است تا تنظمیات سراسری یا اصطلاحا global مثل نام کاربری یا ایمیل را در ابتدای نصب Git انجام دهید. دستور git config به شما این امکان را می دهد تا از طریق خط فرمان تنظیمات مورد نیاز را انجام دهید.

این دستور امکان تنظیم همه چیز از اطلاعات کاربر گرفته تا تنظیمات پروژه و رفتار یک مخزن. برای شما چند دستور برای تنظیم بخش های مختلف در زیر را مثال زدیم.

Git تنظیمات را دز سه فایل مجزا نگهداری می کند، که در واقع سه محدوده یا scope تنظیمات مجزا را برای کاربر ایجاد می کند. تنظیمات هر مخزن یا local، تنظیمات کاربر یا global و تنظیم کل سیستم شما یا system:

local یا تنظمات مخزن: /.git/config – تنظیمات مخصوص هر مخزن یا repository

Global یا تنظیمات سراسری کاربر: /.gitconfig – تنظیمات اختصاصی هر کاربر. این دقیقا همانجایی است که تنظیمات با --global ذخیره می شوند.

System یا تنظیمات سیستمی: $(prefix) /etc/gitconfig – تنظیمات سراسری کل سیستم شما

برای ثبت تغییرات ابتدا باید در تنظیمات git یک نویسنده تعریف کنید تا تغییرات با نام همین نویسنده در مخزن ثبت و نگهداری شود. در اینجا می توانید از --global استفاده کنید که از این به بعد با نام کاربری سیستم عامل خود هر مخزنی ایجاد کردید نویسنده و ثبت کننده تغییرات خود شما باشید.

git config --global user.name <name>
git config --global user.email <email>

مثال واقعی:

git config --global user.name "Hamed Moodi"
git config --global user.email "hamedmoodi2011@gmail.com"

خب الان نام کاربر مشخص شد و تمام تغییرات از این به بعد با همین نام در مخزن ثبت می شود.

خب حالا فرض کنید میخواهید برای هر مخزن یا repository به صورت جدا نویسنده مشخص کنید. بهترین کار این است که نویسنده را در سطح local تعریف کنید پس می توانید به جای --global از --local استفاده کنید.

git config --local user.name "Hamed Moodi"
git config --local user.email "hamedmoodi2011@gmail.com"

با این دستور این نام کاربری و ایمیل فقط برای مخزن فعلی مورد استفاده قرار میگیرد و برای پروژه های جدید بعدی یا باید مجدد به صورت local کاربر معرفی کنید در غیر این صورت از کاربر global استفاده می شود و اگر کاربر global تنظیم نشده باشد سراغ تنظیمات system می رود و اگر این هم تنظیم نشده باشد git به شما می گویند که برای ثبت یا commit نیاز به تعریف کاربر است.

نتیجه گیری

ما به صورت کلی استفاده از دو دستور اصلی گیت یعنی git init و git clone را بررسی کردیم. که برای ایجاد یک پروژه با کنترل نسخه گیت کافی است. برای توسعه و ثبت تغییرات و فرآیند ارسال و دریافت به سرور گیت هم دستورات git add و git commit و git push و git remote را معرفی کردیم. در حالت مقدماتی همین دستورات برای یک توسعه دهنده یک نفره برای مدیریت پروژه کافی است.

اما اگر بیش از یک نفر هستید نیاز به دانستن مفاهیم بیشتری دارید که در آینده سراغ مدیریت تیمی یک پروژه گیت هم خواهیم رفت.

منبع: https://www.atlassian.com/git/tutorials/setting-up-a-repository