17 روز پیش آموزش Git - github - gitlab
afshin160

 
سلام .
با اجازه از اساتید و برنامه نویسان

قصد دارم در سلسله مطالبی توضیحی کوتاه بر آموزش git - github - gitlab
داشته باشم . که البته بیشتر سعی می کنم دستورات git را توضیح بدم و مختصری هم gitlab - github را توضیح میدم
البته به اندازه سوادم ...
16 روز پیش Git
afshin160

 
Git چیست ؟

Git یک سیستم کنترل نسخه توزیع شده رایگان و متن باز است که برای مدیریت همه کارها از پروژه های کوچک تا بسیار بزرگ طراحی شده است. که با سرعت و کارایی زیادی دارد .
شما یک تایپ پایان نامه بگیر تا پروژه های بزرگ برنامه نویسی همه و همه را می تونید با Git کنترول کنید و همه تغییرات را داشته باشید و یا برای کار گروهی روی پروژه هاتون می تونید از اون استفاده کنید به طوری که به شما میگه چه کسی و در چه زمانی چه چیزی را تغییر داده است ۱؟ WOW وقتی متوجه نحوه کارش شدم و دیدم چقدر کار باهاش ساده هست یک دل نه صد دل عاشقش شدم !!! ... (فقط همسر محترم متوجه نشه .... ) من واقعا ازش راضیم خداهم ازش راضی باشه

خوب بریم سر اصل کار اول از همه این سایت محترم git و حالا برای دانلود اون برای نسخه های Windows یا macOS و Linux/Unix می تونید برید به این آدرس برید و آخرین نسخه را دانلود کنید .

وقتی اون را نصب می کنید دو نوع دسترسی به git در اختیار شما میگذارد یکی به صورتی UI و گرافیکی و یکی به صورت Command ی که من با بخش commandی اون کار دارم . و من باهاش راحت تر م.
پس بعد از نصب دو کزینه داریم :
1- Git GUI Here بخش گرافیکی
2- Git Bash Here بخش Command ی

فرض کنیم یک فایل به نام index.html در فلدر A قراردارد . حال به داخل فلدر A رفته و کلیک راست می کنیم و گزینه git bash here را می زنیم .



دستورات با نوشتون git جلوی علامت $ شروع میشود .

برای اینکه git را در این فلدر پیکر بندی کنیم
git init $



در کل ما سه قسمت کاری تو git داریم :
Working |---(add)--->> Stage |---(commit)--->> Repository
working : قسمتی هست که محل کار ما می باشد یا فایل ورد یا محل کد نویسی هست ویا هر ادیتوری دیگه ای ...
stage : تغییرات اعمال شده روی فایل را نگه می دارد .
repository : فایل تغییر کرده و نهایی در اون نگه داری میشه

.
.
.
16 روز پیش git - status
afshin160

 
برای پیگیری اینکه در این فلدر چه اتفاقاتی افتاده و وضعیت ما در working گزارش دهد : git status $



خوب عکس چی میگه : میگه یک فایل به نام index.html در این فلدر هست که من دونبالش نمی کنم و در واقع گیت مورد بررسی قرارش نداده و میگه که اکر می خواهید دنبال یا موردبررسی قرار بگیره بیا add کن . یعنی اطلاعات را از working اتقال بده به stage . چشم .



دیدید ... بعد از add سریع status گرفتم . حالا ببینم چی کار کردم ...
دقت کنید وقتی که فایل در محیط working هست قرمز رنگ می نویسه و وقتی رفت تو قسمت stage سبز رنگ شد ... و گفته یک فایل با نام index.html اضافه کردی و من از این به بعد پیگیریش می کنم ولی حواست باشه که هنوز commit نکرده ای . !
آهان داشت یادم میرفت ترکیب + و Ctrl باعث بزرگ شدن فونت و نوشته درون command git میشه .
.
.
16 روز پیش Git - commit - error
afshin160

 
سلام دوباره ...
به عکس پست قبل دقت کنید میگه شما هنوز این فایل را commit نکرده اید . وبرای بردن به مرحله Repository باید کامیت بشه یعنی اطلاعات و تغییرات نهایی اعمال بشه که دستورش به این شکل هست :

" git commit -m " add index file $


m- برای کامنت گذاشتن هست که توصیه اکید میشه حتما کامنتی با معنا بگذارید تا بعدا برای ارجاعات بعدی بدونید چکار کرده اید .
خوب اگر بار اول هست که از git استفاده می کنید به خطایی بر می خورید که به شما میگه اول خودت را به من معرفی کن تا من بدونم تغییرات را به نام کی باید ثبت کنم . که شما باید نام و ایمیل خود را معرفی کنید . و برای این کار از دو دستور زیر استفاده می کنیم :


"git config --global user.name "afshin $
"git config --global user.email "ae_afshin@gmail.com $



ببخشید نتونستم این قسمت را عکس بگیرم چون قبلا این کاروکرده بودم. حال

" git commit -m " add index file $

این دستور جواب میده .
خوب برای اینکه بدونیم چکار کردیم log میگیریم :

git log $





جالب بود نه !.. میگه کی با چه ایمیلی و در چه تاریخی چه کارکرده ، چه کار کرده همان پیغام دلخواهی هست که ما با سویچ m- اضافه کردیم .

توجه :

یه چی این آخر بگم اونم اینه که اگر git bash here تو لیست کلیک راستتون نیامد می تونید هر جایی اون را run کنید و بعد با دستور cd: d $ به درایو d برید وبا cd a $ به فلدر مربوطه A برید .
15 روز پیش git -commit - log
afshin160

 
حالا اگر git status $ بزنیم به ما میگه شاخه کاری ما تمیز هست . درواقع چیزی برای اعمال تغییرات جدید نداریم و آخرین تغییرات هم نهایی شده .
حال فایل index.html را باز می کنیم و یک تگ h2 به اون اضافه می کنیم . وذخیره می کنیم . خوب حالا تغییرات جدید به داخل محل کاری repository انتقال می دهیم . با دستور خط اول زیر و
با دستور status مشخص میشه که شاخه کاری شما تمیز هست یعنی چیزی برای commit نمونده .و با دستور log به ما میگه کی چی را چه وقتی تغییر داده است .


"git commit -m "add h2 tag $
git status $
git log $






حال یه نکته در رابطه با log بگم اینکه یه id به هر تغییری که روی فایل انجام میدهید اختصاص میده که در لاگ به رنگ زرد هست که یونیک می باشد و ما اغلب با 7 کاراکتر اخرش کارداریم .
گاهی احتیاج نداریم که تمام توضیحات لاک را ببینیم لذا برای اینکه خلاصه آنها را داشته باشیم از دستور زیر استفاده می کنیم .

git log --oneline $



توجه :
با دستور clear جلوی $ میتوانید صفحه محیط کاری git را تمیز کنید .
15 روز پیش show - diff - git
afshin160

 
خوب حالا بریم سر نمایش تغییرات بینیم چطور می تونیم بفهمیم که در هر مرحله چکار کردیم و چی را تغیی داده ایم
اول یه git log --oneline می گیریم تا id های هر مرحله نشان داده بشه و بعد برای اینکه تفاوت working با repository را ببینیم از diff استفاده می کنیم

(git diff id(7char $




حالا اگر نگاه کنید می بینید که تفاوت دو تا commit را نشان میدهد . و میگه کدام خط اضافه شده یا حذف شده و در واقع تفاوت های اون cimmet را با commit بعدیش نشان میدهد .

یه دستور دیگه هم داریم به نام show که تفاوتش با diff اینه که تمام تغییرات از آخرین commit تا اون id log که بهش میدیم را نشان میدهد .

( git show idlog(7char $
مثلا
git show 84ad9er2 $

دو هفته پیش git -am log -n
afshin160

 
یه نکته یادم رفت نگاه کنید هر وقت تغییری داه میشه چون تو working هست اول باید add کنید تا بیاد در stage و بعد باید commit کنید تا تغییرات به repository برسه و تایید نهایی بشه
خوب یه سویچ داریم که این دو کار را یک دفعه انجام میده و اون am- هست .
من در عکس زیر تغییراتی را در فایل index.html خود دادم و بابت هر خط تغییر یه commit هم کردم .

git commit -am "add tag h1 " $



,نکته بعدی سویچی برای log هست که به شما میگه چه تعداد از لاگ ها را نشان بده

git log --onelog -2 $




این دو نکته یادم رفته بود گفتم بگم تا یادم نرفته ....
دو هفته پیش git reset --hard
afshin160

 
خوب ما دستور diff را گفتیم . حالا آمدیم تغییرات را دیدیم و متوجه شدیم که یه جای کار اشتباه کردیم و میخواهیم به عقب برگردیم .
حال یه فایل به نام index2.html در فلدر A می سازیم . و وقتی status میگیریم میگه git این فایل را دنبال نمی کند . و خوب چون بار اول هست که git می خواهد اون را دنبال مند می بایست بار اول با دستور add اضافه بشه که یا از دستور . git add $ استفاده می کنیم که تمام فایل ها را add می کند و یا از دستور git add index2.html $ استفاده می کنیم . که فقط همین فایل را اضافه می کند



حال می خواهیم به عقب برگردیم .
توجه : چون برگشت به عقب باعث از بین رفتن لاگ ها میشه اول یه git log --oneline $ بگیرید و تمام لاگها تا اون لحظه را کپی و در یه فایل notpad ذخیره کنید و برای خود داشته باشید . و بعد از دستور reset --hard استفاده کنید . البته چون میشه با این دستور جلو ه رفت ولذا احتیاج به id لاگ ها داریم .



خوب دقت کنید ما 3-4 مرحله قبل برگشتیم .!! حتی فایل index2.html که درست کرده بودیم هم حذف شد و تغییرات فایل index.html هم به زمانی که تگ a را اضافه کردیم بر گشت .



git reset --hard id(7char) $ این هم دستور برگشت به عقب .



حال دوباره به جلو حرکت می کنیم و برمی گردیم سر نقطه قبلی یعنی زمانی که فایل index2 را ساختیم


دو هفته پیش git - Branch
afshin160

 
خوب بریم سر branch ها : برنچ یعنی شاخه
خوب برای چی خوبه : مثلا برای تیمی کار کردن روی پروژه یکی داره رو گرافیک پروژه کار می کنه و یکی داره کد های کپچا رو می نویسه و یکی هم داره کد های دیتابیس را می نویسد .و بعد از اتمام کار هر سه باید پروژه را یکی کنیم که همه اخرین تغییرات را داشته باشن دیگه و یه راه اینه که هرکسی یک شاخه از شاخه اصلی بگیره و کار خودش را بکنه و در آخر همه شاخه ها را merge کنیم با شاخه اصلی که همه تغییرات برای همه اعمال بشه .
همیشه branch master برنچ اصلی هست .

git branch $ لیست تمام branch ها را میدهد .البته غیر از branch های آنلاین

git branch -a $ لیست تمام branch ها را میدهد . حتی برنچ های انلاین موجود در github , gitlab

git branch Namebranch $ یک branch جدید می سازد .

git checkout Namebranch $ حرکت بین برنچ ها



باتوجه به عکس بالا ما الان تو برنچ afshin هستیم . حال می آیم فایل index2.html را تغییر میدهیم و یک تگ P به اون اضافه می کنیم . git add $ و بعد commit می کنیم .




حال می خواهیم تفاوت های بین دو برنچ را ببینیم :
git diff branchname1 .. branchname2 $
مثلا
git diff afshin.. master $




دو هفته پیش git - branch - deleted - merge
afshin160

 
خوب حالا بگیم چطور یک برنچ را حذف می کنیم

git branch -d branchname $
مثلا :
git branch test $




توجه :
وقتی تو برنچی هستیم نمی توانیم برنچ جاری را حذف کنیم و باید به برنچ دیگری بریم و بعد اون برنچ را حذف کنیم .


خوب بریم سر merge کردن - بعد از تغییرات در هر شاخه چون می خواهیم تغییرات نهایی را به اشتراگ بزاریم و پروژه را تکمیل کنیم می بایست شاخه خودمان را با شاخه اصلی merge کنیم لذا به شاخه master میریم و
git merege afshin $
یعنی تمام تغییرات شاخه afshin به شاخه اصلی و master اعمال می کنیم .