git

این نوشته یادداشت های مربوط به دوره git از مکتب خانه است.

فرض میکنیم git را نصب کرده ایم. با تایپ کردن عبارت git bash در منوی استارت در ویندوز پنجره زیر ظاهر میشود:

تمرین 1:

لیست فایلهای موجود را در git bash را مشاهده کنید:

ls

2- با دستور git version میتواند وزژن گیت نصب شده را بدست آورد.

git version

نکته:

git در تمام سیستم عامل ها قابل استفاده است. ویندوز- لینوکس- mac

ترمینولوژی گیت:

repository : مجموعه ای از کامیت ها را گویند.

staging area : محل نگهداری کامیت ها قبل از اضافه شدن به repository – سکوی پرتاب-

working tree : ساخار پروژه را گویند. در واقع پروژه تحت گیت ما و تمام دایرکتوری ها و فولدرهای آن را گویند.

commit : تغییرات کوچک را گویند. در واقع تغییرات هر حالت از پروژه نسبت به حالت قبلی را گویند.

Branch : اسم کامیت را که خود گیت به صورت پیشفرض به آن یک کد هگز به آن اختصاص میدهد، ما آدمها به آن یک برنچ میگوییم. برنچ بچه هم دارد.

tag : این هم اسمی است که به کاممیت ها میدهیم . با ین تو=فاوت که قرار نیست بچه داشته باشد.

سه عبارت پر کاربرد:

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

head : آخرین کامیت را گوییم.

origin : جایی است که ریپازیتوری را از آن دریافت کرده ایم. ما یا میخواهیم خودمان را update کنیم و یا بعد از اعمال تغییرات ، دیپازیتوری را برای origin ارسال کنیم.

git init

لینک مرنبط با این بخش.

ابتدا با دستور زیر cd یا current directory خود را به desktop تغییر میدهیم:

 cd desktop

حال با کد زیر یک فولدر در دستکتاپ میسازیم. mkdir به معنای make folder است:

mkdir myfolder

با دستور cd myfolder دایرکتوری خود را به myfolder تغییر میدهیم. , و با دستور git inint داستان را شروع میکنیم.

با دستور زیر به parent یعنی به دایرکتوری قبلی برمیگردیم:

cd . .

فایل جدید ایجاد میشود اما hidden هست.

در مورد .git صحبت کردیم . در working tree ما باید یک فایل دات گیت موجود باشد.

init یک repository میسازد. آنچه بعد از git init نوشته میشود به محل repository ما تبدیل میشود.

git clone

git clone هم برای ما repository میسازد اما از یک جای remote . که میتواند سرور خودمان باشد یا سایت گیت هاب یا سایت گیت لب یا حتی یک لوکیشن دیگر از کامپیوتر خودمان باشد. وقتی کلون میکنیم ، همه موارد (repo و کامیت ها و همه و همه ) را انتقال میدهیم. یعنی در upstream همه را داریم و در محل کپی شده نیز همه چیز را داریم.

با رجوه به آدرس https://github.com/explore میتوانیم لیت پروژه هایی که در حال ترند شدن هستند را ببینیم. حال میتوانیم از میان پروژه های موجود یکی را انتخاب کرده و کلون کنیم. مفهوم origin در اینجا مصداق پیدا میکند. مطابق شکل زیر برای clone کردن آدرس مربوط به پروژه انتخابی خود را کپی میکنیم:

و سپس دستور زیر را وارد و آدرس کپی شده را به آن خوراک میدهیم:

git clone  https://github.com/asharifiz/Introduction_to_Machine_Learning.git

با اجرای دستور فوق تمام working tree پروژه انتخابی در دایرکتوری ما کپی میشود. حال میتوانیم به هر تاریخ مورد نظر از پروژه انتخابی خود بازگردیم.

گاهی میخواهیم فقط برنچ master را clone کنیم. در واقع به صورت select شده میخواهیم clone را انجام دهیم.

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

git clone -- branch=main https://github.com/mosaicml/composer.git

ما حتی میتوانیم در pc خود نیز عملیات clone را انجام دهیم.

با دستور زیر به دسکتاپ برمیگردیم و فولدری به نام ss میسازیم و دایرکتوری خود را به آن تغییر میدهیم:

cd desktop
mkdir ss
cd ss
 git clone ../composer

با دریافت پیام done عمل کلون کردن به پایان رسیده است.

نکته پایانی clone:

زمانی که بخواهیم سورس کد دیگران را بخوانیم باید از clone استفاده کنیم.

تا این ویئو

تنظیمات repository و Git config

ترجیحات شخصی، مانند نوع editor و یا اسم و ایمیل نویسنده. تا بدانیم هر تغییری را چه کسی انجام داده است.

فرض کنیم که یک ریپازیتوری به نام git-learn ساخته باشیم. حال میخواهیم به آن بازگردیم:

 cd git-learn

با دستور زیر config را شروع میکنیم:

git config

با نوشتن عبارت زیر ، این کانفیگ برای تمام ریپوهای این یوزر اجرایی میشود:

git config  - - global user.name "ali"
git config  - - global user.email"felan@dotcom"

َسوال: برای ست کردن اطلاعات کاربر از چه فعلی استفاده میشود؟
جواب: git config

ذخیره تغییرات

ما سه حالت برای هر فایل داریم:
Unmodified
modified
Untracked
حالت چهارمی نیز وجود دارد به نام commited

git status

همه تغییرات را میتوان توسط git status مشاهده نمود.

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

clear

با دستور زیر یک فایل خالی متنی میسازیم:

touch main.txt

با دستور زیر میتوان فهمید که اوضاع از چه قرار است:

git status

اگر کار خاصی انجام نداده باشیم، با پیام زیر مواجه خواهیم شد:

حال با دستور git add یک فایل ساخته شده را می افزاییم تا کاری کرده باشیم:

git add main.txt

حال اگر git status بگیریم، با پیام متفاوتی مواجه میشویم:

فایلهای روی استیج قابل مشاهده و آماده کامیت هستند.

نکته: با نوشتن تنها عبارت git add و فشردن کلیدهای shift +tab تمام فایلهای untracked برای ما نمایش داده میشود.

تغییرات هر مرحله را نیز توسط git diff میتوان چک کرد.

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

cd
cd desktop
mkdir myfolder
cd myfolder
git init
touch main.txt
git status
git add main.txt
git status
git commit -m " it is the message from shahram" 

استفاده از nano

با دستور nano main.txt میتوان محتویات فایل main.txt را تغییر داد.

برای مثال در خگ:ط اول مینویسیم line1 و در خط دوم مینویسیم line 2 . سپس با ctrl+x میتوان خارج شد و البته قبل از خروج تغییرات را ذخیره نمود. به محیط cmd وارد میشویم. حال اگر git diff بگیریم تغییرات اعمال شده به ما داده میشود.

سوال پایان فصل:
1- اگر یک فایل خام در ریپازیتوری ایجاد کنیم ،status آن چیست؟
جواب: untracked
2- داخل یک ریپازیتوری، یک فایلی که نسبت به آخرین کامیت، هیچ تغییری نداشته را باز می‌کنیم و یک خط از این فایل را حذف می‌کنیم. Status این فایل چه خواهد بود؟
modified

Commit و Commit message

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

Git ignore

فایلی متنی که با دات شروع میشود: .ignor یا ignor.
بخش هایی از پروژه هستند که در پروژه نمیخواهیم در ریپازیتوری شوند. مانند pycash در پایتون. یا مثلا فایلهای build شده در برخی از زبان ها. مثلا فایلهای dist
فایل gitignor این گونه فایلها را در خود قرار میدهد و دیگر track نمیشود.


تمرین:
میخواهیم فایلهای با پسوند log. را نادیده بگیریم.(اصطلاحا تغییرات آنها راTrack نکنیم.)
1- ابتدا با touch فایل test.log را میسازیم.
2- باgit status وضعیت را مشاهده میکنیم که چیزی در حالتtracked به جز همین فایل test در آن نیست.
3- با دستور زیر فایل ignor را میسازیم.

git .ignor

این فایل hidden است. میتوان به صورت دستی یا با استفاده از nano آن را تغییر داد . عبارت زیر را باید درون آن بنویسیم تا دیگر فایلهای با پسوند log را track نکند.

*.log


حال اگر status بگیریم ، میبینیم که دیگر فایلهای با پسوند مورد نظر ما track نمیشود.

تا این ویدئو ++++++++++++

git stash

حالتی بین آخرین کامیت یا head و استیج را استش گویند. درواقع زمانی که بخواهیم آخرین کامیت stable را تغییر دهیم از stash استفاده میکنیم. برای توضیحات بیشتر به این ویدئوی 9 دقیقه ای رجوع شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.