Visual Studio and GitHub - Part 2

مطالعه بخش اول : Visual Studio and GitHubنحوه مرور کردن Git Repository ها و مقایسه commit ها در ویژوال استودیو پنجره Git Changes روشی بی‌نظیر برای تعامل با Git در حین کدنویسی بدون نیاز به تغییر کد شما ارائه می‌کند. به عنوان مثال، ممکن است لازم باشد تصویر خوبی از آنچه تیم شما روی آن کار کرده است به دست آورید یا شاید دو commit را برای بررسی یک باگ مقایسه کنید.پنجره Git Changesبرای شروع، پنجره Git Repository را با انتخاب Git Repository در منوی View باز کنید. همچنین می توانید با انتخاب لینک های outgoing/incoming در پنجره Git Changes و در نوار وضعیت، به پنجره Git Repository دسترسی پیدا کنید.پنجره Git Repositoryپنجره Git Repository شامل سه بخش اصلی است که در تصویر بالا شماره گذاری شده است:1.شاخه‌ها(Branch ها) که قبلا و در قسمت اول از این مبحث به آن پرداخته شد.2.گراف(Graph): این بخش وضعیت branch شما را به تصویر می کشد. دارای سه زیربخش است: یک : Incoming در واقع commit های ورودی را نشان می دهد که تیم شما در آن مشارکت داشته است و هنوز آن را pull نکرده اید. دو : Outgoing در واقع commit محلی شما را نشان می دهد که هنوز آنها را push نکرده اید. سه : Local History مابقی commit هایی را نشان می دهد که توسط مخزن محلی شما ردیابی شده اند.3.کامیت(Commit): با انتخاب هر commit در بخش Graph، جزئیات آن باز می شود. می توانید تغییراتی که یک commit معرفی کرده است را با انتخاب آنها بررسی کنید که تفاوت را نشان می دهد. به عنوان مثال، اسکرین شات قبلی تغییراتی را نشان می دهد که یک commit در فایل Files.csproj ایجاد کرده است. وقتی commitی را پیدا کردید که می‌خواهید روی آن تمرکز کنید، دکمه Open in New Tab را انتخاب کنید تا commit در یک برگه دیگر باز شود.برای نمایش commit خود به صورت تمام صفحه، تب Commit خود را جدا کرده و با استفاده از دکمه Maximize پنجره Commit را به حداکثر برسانید. همچنین می توانید با انتخاب Diff Configuration (نماد چرخ دنده)، پیکربندی مورد نظر خود را انتخاب کنید.مقایسه Commit ها برای مقایسه دو commit در branch خود، از کلید Ctrl استفاده کنید تا دو commit را که می خواهید مقایسه کنید انتخاب کنید. سپس روی یکی از آنها کلیک راست کرده و Compare Commits را انتخاب کنید.مشابه Commit Details، می‌توانید از دکمه Open in New Tab برای باز کردن مقایسه در یک برگه دیگر یا به حداکثر رساندن آن در صفحه استفاده کنید.ایجاد یک Branch از یک Commit در ویژوال استودیو، می‌توانید از پنجره Git Graph در پنجره Git Repository برای ایجاد branch هایی از commit‌ های قبلی استفاده کنید. برای انجام این کار، روی commitی که می‌خواهید یک شاخه جدید از آن ایجاد کنید کلیک راست کرده و New Branch را انتخاب کنید.مقایسه branch هامقایسه branch ها نمای کلی تفاوت بین دو branch را ارائه می دهد که می تواند قبل از ایجاد یک درخواست pull، ادغام(merg) یا حتی حذف یک branch بسیار مفید باشد.برای مقایسه branch جاری با سایر branchها با استفاده از ویژوال استودیو، می‌توانید روی شاخه مورد نظر کلیک راست کرده و Compare with Current Branch را انتخاب کنید. همچنین، می‌توانید از فهرست branch ها در پنجره Git Repository برای دسترسی به همان فرمان استفاده کنید.چیزی شبیه به تصویر زیر :بررسی commit ها(Checkout commits)بررسی یک commit می تواند به جهات مختلفی سودمند باشد. به عنوان مثال، به شما امکان می دهد به نقطه قبلی در تاریخچه repository خود بازگردید، جایی که می توانید کد خود را اجرا یا آزمایش کنید. همچنین اگر بخواهید کدهای یک remote branch (مثلاً branch یکی از همکاران) را مرور کنید، می تواند مفید باشد. به این ترتیب، اگر قصد مشارکت در آن را ندارید، نیازی به ایجاد یک local branch ندارید. در این صورت، فقط می توانید Head، آن remote branch را که می خواهید، بررسی کنید.برای بررسی commit قبلی در ویژوال استودیو، پنجره Git Repository را باز کنید، روی commitی که می‌خواهید به آن بازگردید راست کلیک کرده و checkout را انتخاب کنید (–detach). ویژوال استودیو یک confirmation dialog را نشان می دهد که به این معنا می باشد : HEAD مخزن شما مستقیماً به جای یک branch به یک commit اشاره می کند.اکنون که در حالت detached head state هستید، با خیال راحت کد خود را اجرا و آزمایش کنید یا حتی تغییرات را کاوش و انجام دهید. وقتی کاوش را تمام کردید و می‌خواهید به branch خود بازگردید، می‌توانید با بررسی یک branch موجود تغییرات خود را نادیده بگیرید یا ابتدا با ایجاد یک branchجدید، تغییرات خود را حفظ کنید.نکته مهم : commit ایجاد شده در حالت detached head state با هیچ branchی مرتبط نیستند و ممکن است پس از checkout یک branch توسط Git garbage collected یا سیستم زباله جمع کن git پاک شود. به همین دلیل است که برای حفظ تغییرات خود، توصیه می شود قبل از بررسی یک branch، یک branch جدید ایجاد کنید. به عنوان مثال، اگر بدون ایجاد branch جدید، Main را بررسی کنیم، commit های C5 و C6 بعنوان زباله جمع آوری می شوند.اگر می‌خواهید به سرعت یک درخواست pull را مرور کنید و آخرین به‌روزرسانی‌ها را ارزیابی کنید، بررسی Head یک remote branch می‌تواند مفید باشد. برای انجام این کار در ویژوال استودیو، ابتدا مطمئن شوید که آخرین به روز رسانی ها را از remote branch خود را fetch و دریافت می کنید. سپس روی remote branchی که می‌خواهید بررسی کنید کلیک راست کرده و Checkout Tip Commit را انتخاب کنید.مدیریت Git repositories در Visual Studioپنجره Git Repository به شما کمک می کند مخزن Git خود را مدیریت کنید و در پروژه های تیم خود به روز بمانید. برای مثال، ممکن است لازم باشد commit‌ های cherry-pick(کپی Commit ها) را بازنشانی، بازگردانی یا انتخاب کنید یا فقط تاریخچه commit خود را پاک کنید. پنجره Git Repository همچنین مکانی عالی برای تجسم و مدیریت branch های شما است.اصلاح آخرین commit (اصلاح/amend)به روز رسانی آخرین commit اصلاح(amending) در Git نامیده می شود و یک مورد استفاده رایج است. گاهی اوقات شما فقط باید commit message خود را به روز کنید، یا ممکن است لازم باشد یک تغییر لحظه آخری را اضافه کنید.پنجره Git Repository به روز رسانی commit message را آسان می کند. commit details از آخرین commit را با دوبار کلیک بر روی آن باز کنید و سپس گزینه Edit را در کنار commit message انتخاب کنید.پس از اتمام ویرایش commit message خود، Amend را انتخاب کنید.اگر نیاز دارید تغییرات کد را در آخرین commit خود اضافه کنید، می توانید این کار را در پنجره Git Changes انجام دهید. چک باکس Amend را انتخاب کنید و سپس تغییرات خود را انجام دهید.ادغام(Merge) commit ها (squash)برای ادغام یک سری از commit ها، Git گزینه ای را ارائه می دهد که commit ها را به یک commit تبدیل می کند. اگر commitهای مکرر انجام دادید و در نهایت با لیست بلندبالایی از commit ها روبرو شده اید که می خواهید قبل از push کردن به یک remote repository آنها را پاکسازی کنید، این گزینه می تواند مفید باشد.برای ادغام commit ها در ویژوال استودیو، از کلید Ctrl برای انتخاب چندین commit که می خواهید ادغام شوند استفاده کنید. سپس کلیک راست کرده و Squash Commits را انتخاب کنید. ویژوال استودیو به طور خودکار commit messages شما را ترکیب می کند، اما گاهی اوقات بهتر است یک message به روز ارائه شود. پس از بررسی و به روز رسانی commit message خود، دکمه Squash را انتخاب کنید.ادغام(Merge) و rebase کردن Branch هااگر از branchهای Git برای کار بر روی ویژگی‌های(features) مختلف استفاده می‌کنید، در برخی مواقع باید به‌روزرسانی‌های معرفی‌شده به branchهای دیگر را اضافه کنید. این ممکن است زمانی اتفاق بیفتد که هنوز در حال کار بر روی feature branch خود هستید. همچنین ممکن است زمانی اتفاق بیفتد که کار بر رویfeature branch خود را تمام کرده اید و باید تغییرات خود را با افزودن آنها به branch دیگری حفظ کنید. در Git، می‌توانید این به‌روزرسانی‌ها را با ادغام یا تغییر branch ها اضافه کنید.دستورالعمل های زیر از New_Feature به عنوان نام نمونه برای feature branch استفاده می کنند. (آن را با نام branch خود جایگزین کنید.)برای انجام این کار در ویژوال استودیو، feature branch خود را با دوبار کلیک کردن بر روی آن در لیست branch بررسی کنید. سپس روی main راست کلیک کرده و Merge 'main' into 'New_Feature' را انتخاب کنید.برای تغییر main branch به feature branch خود با دوبار کلیک کردن بر روی آن در لیست branch بررسی کنید. سپس روی main راست کلیک کرده و Rebase 'New_Feature' را روی 'main' انتخاب کنید.کپی Commit ها (cherry-pick)خوب cherry-pick در Git به معنای کپی یک commit از یک شاخه و اعمال آن در شاخه دیگر است.زمانی می‌توانید از آن استفاده کنید که نمی‌خواهید کل یک branch را در Master ادغام کنید، اما همچنان می‌خواهید تغییراتی را از feature branch اعمال کنید.(بنابراین git merge نمی تواند در این مورد استفاده شود)این دستور متفاوت با روش‌های دیگری مانند merge و rebase است که معمولاً بسیاری از commit‌ها را روی شاخه دیگری اعمال می‌کنند.cherry-picking به جای همه تغییرات در یک branch، فقط تغییرات را از commit هایی که انتخاب می کنید به ارمغان می آورد.اینجاست که git cherry-pick مفید می شود. آنچه از نامش پیداست(چیدن گیلاس) را انجام می‌دهد - یک commit را از feature branch می‌گیرد، آن را به صورت جداگانه انتخاب می‌کند و آن را در شاخه اصلی اعمال می‌کند یا به عبارتی این commit را کپی می کند، به طوری که یک commit کاملاً جدید در branch هدف وجود دارد.توجه داشته باشید که هیچ "خط" واقعی برای اتصال commit جدید در شاخه اصلی به commit قدیمی وجود ندارد. commit جدید cherry-picked ایجاد شده در master اصلاً به commit منبع اشاره نمی کند، commit به سادگی کپی می شود. هنگامی که branch ها را دوباره با هم merge کنید، Git همچنان آن را نگهداری می کند.بنابراین Cherry-picking یک راه عالی برای مقابله با این مشکلات رایج زیراست: می تواند برای لغو تغییرات مفید باشد. به عنوان مثال، بگوییم commitی به طور تصادفی به branch اشتباهی اعمال شده است. می‌توانید به branch درست بروید و commit را به جایی که باید تعلق داشته باشد اعمال کنید.نکته : git cherry-pick یک ابزار مفید است اما همیشه بهترین روش نیست. چرا که می تواند باعث commit های تکراری شود اما راه حل چیست؟ استفاده از git rebase برای حذف commit های تکراری cherry-picked. پیشنهاد می کنم کمی در مورد آن تحقیق کنید.شاید شما در حال کار بر روی یک ویژگی(feature) هستید و برای انتشار آماده نیست، اما یک اشکال را در feature branch که می‌خواهید در نسخه هفتگی خود وارد کنید، برطرف کرده‌اید. می‌توانید از cherry-pick برای کپی کردن رفع اشکال در Master استفاده کنید تا آن را زودتر اجرا کنید.شاید چندین branch برای تولید و توسعه دارید، و می‌خواهید یک رفع فوری اشکال را از تولید به توسعه کپی کنید.برای انجام این کار در ویژوال استودیو، روی commit مورد نظر کلیک راست کرده و Cherry-Pick را انتخاب کنید.برگرداندن تغییرات(Revert changes)از دستور revert برای لغو تغییرات ایجاد شده در commit های push داده شده به branchهای مشترک استفاده کنید. دستور revert یک commit جدید ایجاد می کند که تغییرات ایجاد شده در commit قبلی را لغو می کند. دستور revert تاریخچه repository را بازنویسی نمی کند، که استفاده از آن را در هنگام کار با دیگران ایمن می کند.برای انجام این کار در ویژوال استودیو، روی commitی که می خواهید برگردانید کلیک راست کرده و سپس Revert را انتخاب کنید. پس از اینکه اقدام خود را تایید کردید و عملیات کامل شد، ویژوال استودیو یک پیام موفقیت آمیز نمایش می دهد و یک commit جدید در قسمت Outgoing ظاهر می شود.یک commit جدید را انتخاب کنید تا تأیید کنید که تغییرات commit برگردانده شده(reverted commit) را لغو کند.بازنشانی یک branch به حالت قبلی از دستور reset برای بازگرداندن یک branch در local repository خود به محتویات یک commit قبلی استفاده کنید. این اقدام تمام تغییراتی را که از زمان انجام commitی که branch خود را به آن بازنشانی می‌کنید، رخ داده است، کنار می‌گذارد.برای انجام این کار در ویژوال استودیو، روی commit که می‌خواهید branch خود را به آن بازنشانی کنید، راست کلیک کرده و سپس Reset > Delete Changes (--hard) را انتخاب کنید.در صورت استقبال از این مطلب قسمت سوم با مباحث تکمیلی را نیز تکمیل خواهم نمود.بیشتر بخوانید : نقشه راه توسعه دهندگان Asp.NET Core