****** ** GIT - درباره پروژه تاک

Download Report

Transcript ****** ** GIT - درباره پروژه تاک

‫پروژه اشتراک دانش تاک‬
‫معرفی‬
‫‪‬‬
‫‪ ‬پروژه تاک‬
‫‪ ‬اهداف‬
‫‪ ‬دعوت به همکاری‬
‫‪ ‬ارائه کننده‬
‫‪ ‬سید احسان محمودی‬
‫سرفصل های وبینار‬
‫‪‬‬
‫‪ ‬نگاهی اجمالی به مفاهیم اولیه‬
‫‪ ‬نگاهی به تاریخچه‬
‫‪ ‬معرفی ‪git‬‬
‫‪ ‬هدف وبینار ترغیب استفاده از‬
‫مدیریت نسخه برای همگان‬
‫‪ ‬جلسه اول مقدماتی‬
‫‪ ‬جلسه دوم مفاهیم پیشرفته تر‬
‫‪ ‬منبع اصلی کتاب ‪Pro Git‬‬
‫چرا مدیریت نسخه‬
‫‪‬‬
‫‪ ‬برای تولید نرم افزار حیاتی است‬
‫‪ ‬بدون مدیریت نسخه هیچ پروژه گروهی قابل انجام نیست‬
‫ً‬
‫و‬
‫و‬
‫‪ ‬معموال برای پر ژه های گر هی به کار می رفته‬
‫‪ ‬نیاز به پیکر بندی سرور بوده‬
‫پروژه های گروهی یا تک نفره‬
‫‪‬‬
‫ً‬
‫‪ ‬مدیریت نسخه معموال در پروژه های گروهی به کار می رفته‬
‫‪ ‬ساختار کالسیک ابزارها‬
‫‪ ‬دردسر راه اندازی سرور‬
‫‪ ‬اما در پروژه های تک نفره هم به همان اندازه کاربرد دارد‬
‫ٌ‬
‫‪ ‬برای بهتر فهمیدن ‪ git‬بهتر است که به عنوان یک ابزار کامال محلی و شخص ی به آن‬
‫نگاه شود‪.‬‬
‫عملکرد های اولیه مدیریت نسخه‬
‫‪‬‬
‫‪Checkout/Update ‬‬
‫‪ ‬آخرین نسخه‬
‫‪ ‬نسخه ها ‪ /‬بازبینی های قدیمی ‪ /‬مقایسه‬
‫‪Commit ‬‬
‫‪Branching ‬‬
‫‪Merging ‬‬
‫انشعاب )‪(Branching‬‬
‫‪‬‬
‫‪ ‬خیلی از اوقات الزم است که تغییرات از هم مجزا باشند‬
‫ً‬
‫‪ ‬کار روی دوقسمت کامال متفاوت‬
‫‪ ‬تغییرات عمده در کد‬
‫‪ ‬آزمایش روش های مختلف‬
‫سیر تکاملی مدیریت نسخه ‪1-‬‬
‫‪‬‬
‫ً‬
‫‪ ‬روش کامال ابتدایی‬
‫‪Rcs ‬‬
‫ً‬
‫‪ ‬کامال محلی )‪(Local‬‬
Client-Server ‫مدل‬

‫ اکثر ابزارهای کالسیک مدیریت نسخه‬
CVS 
VSS 
Subversion 
‫مشکالت مدل ‪Client-Server‬‬
‫‪‬‬
‫ً‬
‫‪ ‬کامال متکی به سرور‬
‫‪ ‬اگر سرور دچار مشکل شود همه اطالعات از بین میرود ( تاریخچه)‬
‫‪ ‬نیاز به راه اندازی سرور‬
‫‪ ‬دسترس ی روی اینترنت درسر ساز‬
‫‪ ‬کار کردن ‪ Offline‬سخت است‬
‫مدل گسترده‬
‫‪‬‬
‫بخش دوم‬
‫مدل تک نفره‬
‫‪‬‬
‫‪ Git ‬به عنوان یک ابزار مدیریت نسخه محلی )‪(Local‬‬
‫‪ ‬اکثر دستورات ‪ Git‬به شکل محلی اجرا می شوند‬
‫‪ ‬این تصور به فهم بهتر ‪ Git‬کمک می کند‬
‫نحوه نگهداری ‪ -‬تغییرات‬
‫‪‬‬
‫‪ ‬در ابزارها کالسیک‬
‫‪ ‬به ازای هر تغییر تنها تفاوت ها نگه داری می شود‬
‫نگه داری تغییرات ‪Snapshots -‬‬
‫‪‬‬
‫‪ ‬در ‪ Git‬در هر نسخه تمام فایل نگه داری می شود‪.‬‬
‫‪ ‬هر فایلی که تغییر نکرده باشد‪ ،‬یک نشانگر به نسخه قبلی را نگه می دارد‬
‫رشته جادویی ‪Git‬‬
‫‪‬‬
‫‪ ‬به ازای هر ‪ snapshot‬یک رشته به عنوان نشانگر تولید می شود‬
‫‪SHA-1 ‬‬
‫‪ ‬محتوای فایل ها‬
‫‪ ‬زمان تهیه‬
‫‪ ‬کاربر‬
‫‪ ‬عدد ‪ 40‬رقمی مبنای ‪16‬‬
‫‪24b9da6552252987aa493b52f8696cd6d3b00373 ‬‬
‫شروع کار‬

‫ نصب در ویندوز و لینوکس‬
msysgit ‫ ویندوز‬
‫ تنظیمات اولیه‬
‫ نام کاربری و ایمیل‬
)‫ پایان دهنده خط ها ( ویندوز و لینوکس‬
git config --global user.name "Your Name"
git config --global user.email [email protected]
git config --global core.autocrlf true
‫سه مرحله کد در ‪git‬‬
‫‪‬‬
‫دستورات اولیه‬
‫‪‬‬
‫‪ ‬برای کار بسیار ساده با ‪ Git‬به چهار دستور ساده نیاز دارید‬
‫‪ : git init ‬برای ایجاد یک ‪Repository‬‬
‫‪ git add ‬برای فرستادن فایل به ‪staging‬‬
‫‪git commit ‬‬
‫‪git checkout ‬‬
‫انشعاب‬
‫‪‬‬
‫‪ ‬انشعاب )‪(Branching‬‬
‫‪ ‬هر ‪ Snapshot‬یک نشانگر به ‪ Snapshot‬قبلی خود دارد‬
branch - ‫انشعاب‬

Head , Master 
git branch test
‫انشعاب ‪checkout -‬‬
‫‪‬‬
‫‪ ‬دستور ‪ checkout‬دو کار انجام می دهد‬
‫‪ ‬فایل های جاری را با محتوای انشعاب جایگزین می کند‬
‫‪ ‬نشانگر ‪ HEAD‬را جابجا می کند‬
‫‪git branch testing‬‬
‫‪git checkout testing‬‬
‫کار در یک انشعاب‬

#on branch testing
git commit
‫بازگشت به انشعاب‬

git checkout master
‫تغییر مستقل‬
‫‪‬‬
‫ادغام – ‪Merge‬‬
‫‪‬‬
‫‪ ‬دستور >‪git merge <other branch‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ابتدا سعی می کند که در میان اجداد دو انشعاب‪ ،‬یک ‪ Snapshot‬مشترک پیدا‬
‫کند‬
‫اگر نسخه حاضر از اجداد مستقیم انشعاب دیگر باشد ‪ ،‬کار راحت است و فقط‬
‫نشانگر جابجا می شود‪(Fast Forward) .‬‬
‫در غیر این صورت نزدیکتر نیای مشترک را پیدا کرده و سعی می کند آنها را با هم ادغام‬
‫کند‪.‬‬
‫اگر موفق نشد فایل ها را تغییر داده و از کاربر می خواهد که به شکل دستی این کار را‬
‫انجام دهد‬
Fast Forward

git checkout master
git merge hotfix
Fast forward ‫در این صورت‬
‫اتفاق می افتد‬
‫نیای مشترک‬
‫‪‬‬
‫حاصل ادغام‬
‫‪‬‬
‫مشاهده تاریخچه‬
‫‪‬‬
‫‪ ‬دستور ‪git log‬‬
‫‪ ‬تاریخچه تغییرات در این انشعاب را نمایش می دهد‬
‫‪ ‬دستور ‪git diff‬‬
‫‪ ‬تغییرات فایل ها نسبت به ‪ staging‬و یا ‪ Head‬و یا هر نسخه دلخواهی نمایش می‬
‫دهد‬
‫‪ git‬برای همه‬
‫‪‬‬
‫بخش سوم‬
‫کار گروهی‬
‫‪‬‬
‫‪ ‬در ‪ git‬همه کسانی که به ‪ Repository‬دسترس ی دارند همه تغییرات دیگران را‬
‫می توانند دریافت کنند‪.‬‬
‫‪ ‬هر ‪ git‬می تواند تعداد دلخواهی از ‪ git‬های دیگر را به عنوان ‪( remote‬فامیل‬
‫دور!) ثبت کند‪.‬‬
‫‪ ‬بعد از آن می توانید به تبادل ‪ sanpshot‬ها بپردازید‬
‫دستورات کار با ‪remote‬‬
‫‪‬‬
‫‪git remote add ‬یک فامیل دور به ‪ repository‬اضافه می کند‬
‫‪ git fetch ‬تغییرات را از فامیل دور دریافت می کند‬
‫‪ ‬این تغییرات به صورت یک ‪ branch‬با اسم خاص ذخیره می شوند‬
‫ً‬
‫‪ ‬مثال ‪origin/master‬‬
‫‪ ‬حاال برای این که انشعاب نهایی را داشته باشید باید با آن ادغم انجام دهید‬
‫ً‬
‫‪ ‬مثال ‪git merge‬‬
‫‪ ‬دستور ‪ git pull‬این دو کار را همزمان انجام می دهد‬
‫دستور فرستادن‬
‫‪‬‬
‫‪ git push ‬انشعاب حاضر را برای فامیل دور می فرستد‪.‬‬
‫‪ ‬این دستور تنها به صورت ‪ Fast forward‬کار می کند‬
‫‪ ‬یعنی اگر فامیل دور نسخه متفاوتی از شما داشته باشد‪ ،‬اجازه فرستادن را نمی دهد‬
‫نکته های استفاده از ‪git‬‬
‫‪‬‬
‫‪ ‬خیلی زیاد انشعاب کنید و خیلی سریع ادغام‬
‫‪ ‬برای کارهای تک نفره هم از ‪ git‬استفاده کنید‬
‫‪ ‬برای شروع الزم نیست همه دستورات را حفظ باشید‬
‫‪ ‬در صورت آشنایی با مفاهیم‪ ،‬یک جستجوی ساده برای هر کار کافی است‬
‫‪ ‬سایت هایی که سرویی مجانی ‪ git‬می دهند‬
‫‪Githup ‬‬
‫‪Bitbbucket.org ‬‬
‫‪…. ‬‬
‫جلسه بعدی‬
‫‪‬‬
‫‪ ‬پروتکل های ارتباطی‬
‫‪ ‬عمل گر های پیشرفته تر (‪rebase‬و ‪) ...‬‬
‫‪ ‬روال های کاری برای پروژه های مختلف‬
‫‪ git ‬به عنوان یک ساختار داده و فایل سیستم‬
‫‪ ‬نوشتن ‪hook‬‬
‫‪…‬‬