آشنایی با دستورهای گیت (قسمت اول)

img
img
img
img
shape
shape
blog-details
24
اسفند
آشنایی با دستورهای گیت (قسمت اول)
نویسنده : محمدرضا لیایی
دسته بندی : آموزش گیت کنترلر
زمان مطالعه : 35 دقیقه

در جلسه گذشته با نصب و راه اندازی گیت بر روی سیستم عامل های لینوکس و ویندوز آشنا شدیم و در این جلسه قصد داریم تا با دستورات مهم گیت آشنا شویم. تمامی این دستورات به command line در درون cmd ویندوز قابل اجرا است و می توانید به طور کامل با این دستورات پروژه خود را مدیریت کنید.

 

نکته: در کل git دارای 23 عدد کامند است در طی چند جلسه آینده تا پایان این دوره تقریبا با تمامی این دستورات در قالب پروژه های عملی آشنا می شویم. پس ما را در این جلسه و جلسات آینده دنبال کنید.

 در ابتدا می بایست برای انجام تست های این جلسه پروژه ای را تعریف کنیم. بدین منظور پوشه ای را در درون صفحه دسکتاپ ایجاد کنید و می توانید نام آن را به صورت دلخواه نام گذاری کنید. در اینجا ما نام این پروژه را asascript گذاشته ایم. بعد از باز کردن پوشه ایجاد شده در درون آن راست کنید و گزینه Git Bash Here را انتخاب کنید. صفحه ای به صورت command line برای شما باز می شود. که تمامی دستورات را در درون آن می بایست وارد کنیم.

git command lines 1

در درون فولدر دو عدد فایل index.html و style.css ایجاد نمائید و در درون index کد زیر را وارد کنید. داخل style.css نیاز به وارد کردن کدی نیست.

Index.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Hello World </title>
</head>
<body>
</body>
</html>

git command lines 2

دستور git:

با وارد کردن این command مجموعه کل دستورات گیت را در دروی صفحه کامند مشاهده می کنید. بعد از وارد کردن این دستور خروجی به صورت زیر در cmd مشاهده می شود.

$ git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone             Clone a repository into a new directory
   init              Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add               Add file contents to the index
   mv                Move or rename a file, a directory, or a symlink
   restore           Restore working tree files
   rm                Remove files from the working tree and from the index
   sparse-checkout   Initialize and modify the sparse-checkout

examine the history and state (see also: git help revisions)
   bisect            Use binary search to find the commit that introduced a bug
   diff              Show changes between commits, commit and working tree, etc
   grep              Print lines matching a pattern
   log               Show commit logs
   show              Show various types of objects
   status            Show the working tree status

grow, mark and tweak your common history
   branch            List, create, or delete branches
   commit            Record changes to the repository
   merge             Join two or more development histories together
   rebase            Reapply commits on top of another base tip
   reset             Reset current HEAD to the specified state
   switch            Switch branches
   tag               Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch             Download objects and refs from another repository
   pull              Fetch from and integrate with another repository or a local branch
   push              Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
 

نکته: گیت دارای یک فولدر مخزن و یا repository در پروژه است. این فولدر به نام .git در درون پوشه به صورت hidden ایجاد می شود و تمامی ورژن ها و فایل های git یک پروژه در درون این پوشه ذخیره می شوند پس در پروژه هایتان از آن به خوبی به خوبی نگهداری کنید.

 

نکته: بعد از ایجاد فولدر پروژه، فولدری به نام .git وجود ندارد و می بایست آن را ایجاد نمائید جهت ایجاد این پوشه می بایست از دستور init استفاده کنید که در ادامه به آن می پردازیم. 

 دستور init: 

با استفاده از این دستور می توانید پوشه مخزن git را در درون پروژه خود ایجاد نمائید. شما می بایست در هر پروژه جدید که می خواهید از گیت استفاده کنید باید حتما در ابتدای کار این دستور را وارد نمائید.

$  git init
 

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

 دستور status:

با استفاده از دستور status می توانید حالت فایل های موجود در git را مانیتور کنید. به این مفهوم که آیا این فایل ها در درون  stage قرار دارند یا در درون repository. به سادگی هر چه تمام تر می توان با این دستور شرایط را مورد بررسی قرار داد. برای پوشه asascript خروجی این دستور به صورت زیر است.

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        index.html
        style.css

nothing added to commit but untracked files present (use "git add" to track)
 

نکته: نوشته هایی که به صورت قرمز رنگ در درون cmd به نمایش در می آید در واقع نوشته هایی است که هنوز وارد مرحله repository نشده اند و در درون مرحله stage باقی مانده اند و قابلیت بازگردانی بر روی آن ها وجود دارد.

 دستور add:

برای اینکه فایل ها رو از مرحله stage به حالت repository منتقل کنید می بایست از دستور add استفاده کنید. با وارد کردن این دستور در پروژه، فایل ها به  مرحله مخزن منتقل شده و حالت status به رنگ سبز در می آیند. اما نکته ای در این جا وجود دارد. اگر شما این دستور را در کامند وارد کنید به شما اروری به صورت زیر به شما نشان می دهد.

$ git add
Nothing specified, nothing added.
hint: Maybe you wanted to say 'git add .'?
hint: Turn this message off by running
hint: "git config advice.addEmptyPathspec false"

همانطور که مشاهده می کنید از ما درخواست کرده که موردی را برای اضافه کردن به مخزن وارد کنیم. که در اینجا هیچ موردی وارد نشده است. برای وارد مورد به شکل زیر می بایست عمل کنیم.

$ git add index.html //تنها این فایل وارد مخزن می شود.
$ git add . //تمامی فایل ها در درون مخزن قرار می گیرند.
 

نکته: هرگاه فایل جدید در پروژه ایجاد گردد و یا تغییری در کد های پروژه به وجود آید این تغییرات از چشم git دور نمانده و آن تغییرات را به مرحله stage وارد می کند. این تغییرات تا موقعی که وارد مخزن نشوند بر روی کد های قبلی اعمال نمی شوند.

 

نکته: به نوشته های کنار دستور status بسیار دقت کنید. بعضی از مواقع نوشته شده new file و در مورد دیگر نوشته modified این دو مفهوم همانطور که از ترجمه کلمه ای مشخص دو حالت بسیار متفاوت است که می بایست مد نظر داشت.

 دستور commit:

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

برای commit کردن پروژه از دستور commit در درون گیت استفاده می کنیم. برای درک بهتر این موضوع با یک مثال این مورد را بیشترتوضیح می دهیم.

در قسمت قبل یک پروژه ایجاد کردیم. در درون این پروژه دو عدد فایل index.html و style.css را ایجاد کردیم. با گرفتن دستور git status در درون command این پروژه داریم:

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        index.html
        style.css

nothing added to commit but untracked files present (use "git add" to track)

فایل های index.html و style.css به صورت قرمز رنگ مشخص شده اند این فایل ها در مرحله stage نگهداری می شوند. با وارد کردن دستور زیر آن ها را به مرحله repository منتقل می کنیم.

$ git add .

بعد از وارد کردن add دوباره دستور git status را می زنیم. خروجی به صورت زیر است.

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   index.html
        new file:   style.css

همانطور که مشاهده می کنید دوفایل مورد نظر به عنوان فایل جدید وارد مخزن git شده و به رنگ سبز نمایش داده می شود. خود git در خط سوم از بالا گفته که هنوز این فایل ها commit نشده اند. حالا می خواهیم با استفاده از دستور commit آن را commit کنیم.

بدین منظور دستور زیر را وارد می کنیم:

$ git commit -m “Create Project files”

دستور commit می بایست حتما دارای یک توضیحات در درون دبل کوتیشن باشد که توصیف کننده تمامی تغییراتی است که در درون فایل ها اعمال شده است.

 

نکته: در برنامه نویسی comment نوشتن جزو یکی از مهمترین قسمت های کار برنامه نویسی است. شما خودتان را جای شخصی بگذارید که در آینده می خواهد کد های شما را خوانده و اصلاحاتی روی آن انجام دهد. کامنت ها و مستندات شما به این شخص بسیار کمک می کند پس سعی کنید همیشه در درون پروژه هایتان از کامنت های دقیق استفاده کنید.

$ git commit -m "create project files"
[master (root-commit) a742323] create project files
 2 files changed, 13 insertions(+)
 create mode 100644 index.html
 create mode 100644 style.css

خروجی بعد از commit شدن را در بالا مشاهده می کنید. حالا با دوباره status گرفتن خروجی به صورت زیر خواهیم داشت.

$ git status
On branch master
nothing to commit, working tree clean

حالا تغییر کوچکی درون فایل index.html ایجاد می کنیم و دوباره git status می گیریم. در زیر خروجی آن را مشاهده می کنید.

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

همان طور که ملاحظه می کنید فایل index.html به صورت modified در آمده است.

تا اینجا با چند مورد از دستورات اولیه git آشنا شدیم در ادامه این دوره به صورت مفصل با موارد دیگری از دستورات مهم و کاربردی گیت آشنا می شویم پس در جلسات آینده نیز ما را دنبال کنید.

 

نکته: برای سرعت بخشیدن به کار commit کردن می توانیم به صورت مستقیم فایل های درون stage را commit کنیم. بدین منظور از دستور زیر می توان استفاده برد.

$ git commit -a -m “Create Project files”

جمع بندی:

سه دستور status، add و commit را در این جلسه مرور کردیم. و در قالب یک پروژه بسیار ساده به بررسی خروجی این دستورات پرداختیم. همچنین در این جلسه با مفهوم های بسیار مهم و اساسی stage، repository و commit در git آشنا شدیم و دانستیم در چه مواقعی تغییرات کد ها در درون این سه قسمت قرار می گیرد.

لیست قسمت های این دوره:
رایگان 20 دقیقه
رایگان 30 دقیقه
رایگان 35 دقیقه
رایگان 15 دقیقه
رایگان 5 دقیقه
پرسش و پاسخ
client

حسین حسینی

3 سال پیش

سلام تشکر از آموزش خوبتون.

یه مشکل دارم توی ورژن های جدید. مدام اسم و ایمیل ازم می خواد نمی دونم چیکار کنم

کاربر

محمدرضا لیایی

3 سال پیش

سلام
بله باید ایمیل و نام کاربری خود را وارد کنید.