آشنایی با 5 مورد از ویژگی های پیشرفته گیت برای کار کردن با گیت
سه شنبه 24 تیر 1399ویژگی های پیشرفته گیت می تواند برای کار کردن با این سیستم به شما کمک کند، ما در این مطلب قصد داریم کمی بیشتر درباره ویژگی های پیشرفته گیت صحبت کنیم.
اگر شما امروزه به عنوان یک توسعه دهنده فعالیت دارید، حتما با کار کردن با گیت آشنایی دارید و دوست دارید که با ویژگی های پیشرفته گیت بیشتر آشنا شوید. این سیستم کنترل ورژن که مهمترین عنصر در جریان کاری مدرن در زمینه نرم افزار به شمار می آید. شما احتمالا اصول اولیه کار کردن با گیت را می دانید( به عنوان مثال چگونه یک مخزن کار می کند، چگونه انشعاب های جدید را ایجاد کنیم، چگونه تغییرات را اعمال کنیم و چگونه این تغییرات را با درخواست های pull ادغام کنیم).
حال که شما اصول کار کردن با گیت را می دانید زمان آن است که سطح خود را بالاتر ببرید تا از مزایای استفاده از ویژگی های پیشرفته گیت در جریان کاری خود بهره مند شوید. ما در این مطلب قصد داریم 5 مورد از ویژگی های پیشرفته گیت را به شما معرفی کنیم که می توانند به میزان زیادی بر روی تلاش های شما در توسعه دهندگی تاثیر گذار باشند.
ادغام تاریخچه چند انشعاب در پروژه
زمانی که شما دو انشعاب در پروژه خود دارید( به عنوان مثال انشعاب توسعه دهندگی و انشعاب ارشد و اصلی) هر دو آنها دارای تغییراتی می باشند که باید با یکدیگر ادغام شوند. دستور git merge یک روش طبیعی و مستقیم برای ادغام کردن این دو به شمار می آید. یک دستور merge تاریخچه توسعه در یک انشعاب را به عنوان یک merge commit به یک انشعاب دیگر اضافه می کند. در حالی که این کار تاریخچه هر دو انشعاب را به صورت کامل و با جزئیات حفظ می کند می تواند باعث شود تا دنبال کردن تاریخچه کلی پروژه کار سختی شود. در برخی از موارد ممکن است شما قصد داشته باشید که این کار را به روش ساده تری و با استفاده از ویژگی های پیشرفته گیت انجام دهید.
ساده سازی تاریخچه commit پروژه با دستور git rebase از جمله ویژگی های پیشرفته گیت
دستور git rebase که از ویژگی های پیشرفته گیت است می تواند دو انشعاب را با یکدیگر ادغام کند اما این کار به روش متفاوت تری انجام می شود. این دستور در واقع تاریخچه commit یک شاخه را بازنویسی می کند و بنابراین شاخه یا انشعاب دیگر از نقطه ای که ساخته شده بود با آن ترکیب می شود. این کار باعث می شود تا ترکیب کردن این دو کمتر مشکل ساز شود و به صورت خطی این عملیات انجام شود. البته باید دقت داشته باشید که این کار ممکن است باعث شود برخی از جزئیات مفید درباره انشعاب دیگر و همینطور پروسه ادغام کردن حذف شود.
به عنوان نکته پایانی باید بدانید که rebase زمانی بهترین عملکرد را دارد که شما چند انشعاب خصوصی داشته باشید که قصد دارید آنها را در یک انشعاب عمومی ادغام کنید. با استفاده از این دستور شما می توانید به سادگی تاریخچه commit را قبل از ادغام کردن پاک کنید. با این روش شما می توانید از تمامی مزیت های این مورد از ویژگی های پیشرفته گیت بهره مند شوید( تاریخچه commit خود را به سادگی و به صورت خطی بسازید) بدون این که نیاز داشته باشید تا جزئیات مهم را نیز نسخه ادغام شده داشته باشید.
ادغام کردن ساده با دستور git merge –squash یکی دیگر از ویژگی های پیشرفته گیت
روش دیگری که برای ادغام کردن با دردسر کمتر وجود دارد استفاده از گزینه –squash در ادغام سازی در گیت است. این دستور می تواند تمامی commit ها را از یک انشعاب ورودی دریافت کند و آنها را درون یک commit واحد و یکپارچه جمع آوری کند.
نکاتی مهم درباره این دستور
یکی از زیبایی های استفاده از این روش برای ادغام این است که شما می توانید به سادگی انتخاب کنید که کدام فایل های در نتیجه نهایی اعمال شوند. شما می توانید تمامی تغییرات را درون یک commit اعمال کنید و یا این که می توانید تنها برخی از فایل ها که تغییرات آنها به یکدیگر وابسته هستند را در یک زمان خاص اعمال کنید. اگر تاریخچه commit انشعاب ورودی تنها در context همان انشعاب مفید است استفاده از این روش برای ادغام کردن می تواند به میزان زیادی مفید باشد. البته زمانی که تاریخچه commit از یک انشعاب خصوصی آمده باشد نیز می توانید از این روش استفاده کنید. با استفاده کردن همزمان از rebase این تکنیک می تواند بهترین نتیجه را برای ادغام کردن انشعاب های درونی در یک انشعاب اصلی داشته باشد و البته می تواند برای درخواست های pull نیز به صورت گسترده ای مورد استفاده قرار گیرد.
افزایش سرعت جستجوی باگ ها با دستور git bisect از بهترین ویژگی های پیشرفته گیت
برای توضیح دادن درباره این مورد از ویژگی های پیشرفته گیت فرض کنید که شما تنها یک تست را به پایگاه کدهای خود اضافه کرده اید تا بتوانید یک باگ را درون کدهای خود پیدا کنید اما شما مطمئن نیستید که این باگ برای اولین بار در کجا ظاهر شده است و مجددا فرض کنید که شما صدها و یا حتی هزاران commit در مخزن خود دارید. دستور git bisect به شما این اجازه را می دهد به میزان بسیار زیادی حجم کدهایی که باید جستجو کنید تا بتوانید commit که باعث ایجاد باگ شده است پیدا کنید را کاهش می دهد.
زمانی که شما bisect را فعال می کنید شما در واقع دو نقطه را در پایگاه کدهای خود انتخاب می کنید تا محدوده جستجو را تعیین کرده باشید. اولین نقطه جایی است که شما می دانید ممکن است مشکلاتی در آن وجود داشته باشد( معمولا بخش HEAD) و دومین نقطه جایی است که شما مطمئن هستید همه چیز در آن خوب و بدون مشکل است. در نتیجه با تعیین این دو نقطه bisect بین این دو نقطه به دنبال commit که باعث ایجاد باگ شده است می گردد و به شما اجازه می دهد تا تست های خود را اجرا کنید. این روند تقسیم باینری تا زمان پیدا شدن commit مربوطه ادامه پیدا می کند.
git bisect که از بهترین ویژگی های پیشرفته گیت است می تواند یک قابلیت بسیار پیشرفته برای پایگاه های کد بزرگ و گسترده با تاریخچه های commit طولانی و پیشرفته باشد. معمولا پیدا کردن باگ در این پایگاه های کد می تواند بسیار سخت باشد. شما دیر یا زود این باگ را پیدا خواهید کرد ولی با استفاده از این ابزار می توانید زمان جستجو را نصف و یا حتی کمتر کنید.
اعمال مجدد commit ها با دستور cherry-pick یکی دیگر از ویژگی های پیشرفته گیت
بسیاری از دستورات پیشرفته گیت تنها در شرایط مشخصی مفید هستند و به همین علت نیز معمولا توسط توسعه دهندگان پیشرفته نیز نادیده گرفته می شوند. با این حال زمانی که با یکی از این شرایط خاص رو به رو می شوید مجبور هستید که بیشتر با ویژگی های پیشرفته گیت آشنا شوید.
cherry-pick را در گیت در نظر بگیرید. این قابلیت به شما اجازه می دهد تا commit معینی را بردارید( دقت کنید که می توانید هر commit از هر انشعابی دریافت کنید) و آن را بر روی یک انشعاب دیگر اعمال کنید بدون آن که نیاز داشته باشید تا سایر تغییرات دیگر را از تاریخچه آن commit اعمال کنید. این قابلیت می تواند در چند شرایط خاص بسیار مفید باشد که در ادامه بیان می کنیم.
شرایطی که cherry-pick می تواند مفید واقع شود
- یکی از شرایطی که این دستور می تواند مفید باشد زمانی است که شما یک commit را برای انشعاب اشتباهی ساخته اید و قصد دارید که به سرعت آن را برای انشعاب درستی مورد استفاده قرار دهید.
- زمانی که شما قصد دارید قبل از ادامه دادن برنامه نویسی یک اصلاح را در انشعاب مد نظر خود انجام دهید.
دقت داشته باشید که علاوه بر استفاده مستقیم از دستور cherry-pick برای اعمال commit شما برخی از گزینه های دیگر را نیز پیش رو دارید. به عنوان مثال اگر شما مقدار --no-commit را به این دستور ارسال کنید commit مد نظر شما در قسمت جلویی انشعاب فعلی قرار می گیرد.
7
پروژه های خود را با زیر ماژول های گیت با ظرافت سازماندهی کنید
دقیقا مانند اکثر زبان های برنامه نویسی که راهی را فراهم می کنند تا بتوانید پکیج ها و ماژول ها را import کنید یکی از مهمترین ویژگی های پیشرفته گیت نیز این است که روشی را پیشنهاد می دهد که بتوانید به صورت خودکار محتوای یکی از مخازن خود را درون یک مخزن دیگر include کنید. شما برای این کار می توانید یک زیر پوشه را درون repo ایجاد کنید و به صورت خودکار آن را با محتوای یک repo دیگر جمع کنید.
نکته ای که باید به آن دقت داشته باشید این است که زیرماژول های گیت می توانند در برخی از شرایط به شکل بهتری کار کنند که در ادامه این شرایط را به صورت دقیق تر بیان خواهیم کرد.
شرایطی که زیر ماژول های گیت بهتر کار می کنند
- زمانی که نیاز است تا زیر ماژول ها در برخی مواقع تغییر نکنند و یا با یک commit قفل شوند. هر کاری که در زیر ماژول انجام می شود به جای زیر ماژول باید به صورت جداگانه مدیریت شود.
- هر کسی که با یک نسخه از گیت کار می کند که از زیر ماژول ها و ویژگی های پیشرفته گیت پشتیبانی می کند نیازمند این است که کار کردن با این ویژگی را یاد بگیرد. به عنوان مثال پوشه های زیر ماژول معمولا به صورت خودکار با استفاده از محتوای مخزن یک زیر ماژول جمع آوری نمی شوند. شما احتمالا مجبور هستید تا از دستور بروزرسانی شده زیر ماژول گیت استفاده کنید و تمامی آنها را جمع آوری کنید.
- برنامه نویسان
- 2k بازدید
- 1 تشکر