از مبتدی تا نینجا: باز کردن قفل قدرت Git برای Devs
Summarize this content to 400 words in Persian Lang
Git یک ابزار ضروری در جعبه ابزار هر توسعه دهنده است. این نه تنها به شما کمک می کند تا پایگاه کد خود را به طور کارآمد مدیریت کنید، بلکه امکان همکاری یکپارچه با اعضای تیم را نیز فراهم می کند. با این حال، اغلب توسعهدهندگان برخی از ویژگیها و جریانهای کاری قدرتمندی را که Git ارائه میدهد نادیده میگیرند. در این وبلاگ، نکات و ترفندهای ضروری Git را بررسی میکنیم تا به توسعهدهندگان کمک کنیم گردش کار خود را سادهتر کنند، شاخهها را به طور مؤثرتری مدیریت کنند، تضادها را به راحتی حل کنند، و اقدامات GitHub را برای یکپارچهسازی مداوم/استقرار مستمر (CI/CD) یکپارچه کنند.
1. تسلط بر استراتژیهای شاخهبندی مؤثر
شاخهبندی یکی از قویترین ویژگیهای Git است. استفاده از شاخهها به توسعهدهندگان اجازه میدهد تا بر روی ویژگیهای مختلف یا رفع اشکال به صورت مجزا کار کنند و از پایدار ماندن پایگاه کد اصلی اطمینان حاصل کنند. در اینجا چند استراتژی کلیدی برای بهبود گردش کار شما آورده شده است:
Git Flow: Git Flow یک مدل شاخهبندی محبوب است که به مدیریت چرخه عمر توسعه شما کمک میکند. شاخه های اصلی در Git Flow هستند master (برای کد تولید پایدار) و develop (برای ویژگی های در حال توسعه). شاخه های ویژگی از ایجاد می شوند develop و پس از تکمیل ویژگی دوباره ادغام شدند. شاخههای رفع اشکال یا رفع فوری از آن ایجاد میشوند master برای رسیدگی به مسائل تولید
توسعه مبتنی بر تنه: این استراتژی توسعهدهندگان را تشویق میکند تا روی شاخههای کوتاهمدت کار کنند و تغییرات کوچک و تدریجی را اغلب در شاخهها ادغام کنند. main شاخه این برای توسعه سریع و یکپارچه سازی عالی است و شانس عدم هماهنگی شعب طولانی مدت با پایگاه کد اصلی را کاهش می دهد.
شاخه های ویژه: همیشه شاخه های جداگانه ای برای ویژگی ها ایجاد کنید (به عنوان مثال، feature/login-page) و آنها را جدا نگه دارید تا زمانی که آماده ادغام شوند. شاخه های ویژگی به تمایز واضح بین وظایف مختلف کمک می کند و پیچیدگی مدیریت تغییرات متعدد در یک شاخه را کاهش می دهد.
نکته: استفاده کنید git branch -a فهرست کردن تمام شعب محلی و راه دور، و git branch -d برای حذف شاخه هایی که دیگر مورد نیاز نیستند.
2. مدیریت و حل تعارضات ادغام
تداخل ادغام زمانی اتفاق می افتد که تغییرات در خطوط یکسان کد در شاخه های مختلف ایجاد شود. در حالی که آنها اجتناب ناپذیر هستند، دانستن نحوه برخورد با آنها می تواند در زمان و استرس شما صرفه جویی کند.
قبل از ادغام: همیشه کشیدن آخرین تغییرات از شاخه هدف (به عنوان مثال، git pull origin master) قبل از ادغام به شاخه ویژگی شما. این تضمین می کند که با به روزترین کد کار می کنید، که می تواند از بسیاری از درگیری ها جلوگیری کند.
در طول یک درگیری: هنگامی که یک تضاد رخ می دهد، Git فایل های متناقض را علامت گذاری می کند. میتوانید این تضادها را با ویرایش فایلها، انتخاب تغییرات برای حفظ و سپس انجام تغییرات حلشده به صورت دستی حل کنید.
# To see conflicting files
git status
# After resolving conflicts
git add
git commit -m “Resolved merge conflict”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با استفاده از ابزار Merge: ابزارهایی مانند KDiff3 یا ویرایشگر تفاوت داخلی VSCode می تواند با ارائه یک رابط بصری برای مقایسه تغییرات، حل تعارضات را آسان تر کند.
3. Rebase تعاملی برای یک تاریخچه تمیزتر
یک تاریخچه ارتکاب کثیف می تواند درک تکامل یک پایگاه کد را دشوارتر کند. اینجاست که rebase تعاملی به کار می آید این به شما امکان می دهد تا قبل از ادغام آنها در شاخه اصلی، commit ها را له کنید، ویرایش کنید یا دوباره ترتیب دهید.
# Start an interactive rebase for the last X commits
git rebase -i HEAD~X
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Squashing Commits: اگر شاخه ویژگی شما دارای تعهدات کوچک و غیر ضروری زیادی است (به عنوان مثال، fix typo)، می توانید آنها را در طول فرآیند rebase به یک commit معنادار تبدیل کنید. این کار تاریخچه تعهد شما را تمیز نگه میدارد و بازبینی آن آسانتر میشود.
نکته حرفه ای: همیشه قبل از ادغام به شاخه اصلی، مجدداً پایه گذاری کنید تا از تعهدات ادغام غیر ضروری جلوگیری کنید. به عنوان مثال:
git checkout feature-branch
git rebase main
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
4. پنهان کردن تغییرات: کار خود را به طور موقت ذخیره کنید
مواقعی وجود دارد که باید شاخه ها را تغییر دهید یا روی یک باگ فوری کار کنید، اما نمی خواهید تغییرات ناقصی انجام دهید. آنجاست git stash به کمک می آید.
# Stash your current changes
git stash
# Apply the stashed changes later
git stash apply
# Drop the stash once it’s applied
git stash drop
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
git stash به شما اجازه می دهد تا تغییرات غیرمتعهد خود را بدون انجام آنها ذخیره کنید و به شما اجازه می دهد شاخه ها را تغییر دهید یا روی کارهای دیگر کار کنید. وقتی در میانه چیزی هستید اما باید سریع بچرخید، نجات دهنده است.
5. GitHub Actions برای CI/CD
یکپارچه سازی مداوم و استقرار مستمر (CI/CD) شیوه های ضروری برای حفظ کیفیت کد و خودکارسازی استقرار هستند. با GitHub Actions، می توانید به راحتی گردش کار را مستقیماً در مخزن خود خودکار کنید.
در اینجا یک فایل ساده GitHub Action YAML برای راهاندازی یک گردش کار پایه CI وجود دارد که با هر بار فشار دادن کد، آزمایشهایی را اجرا میکند:
name: CI Pipeline
on:
push:
branches:
– main
jobs:
test:
runs-on: ubuntu-latest
steps:
– uses: actions/checkout@v2
– name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: ’16’
– run: npm install
– run: npm test
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این اقدام کد را بررسی میکند، Node.js را راهاندازی میکند، وابستگیها را نصب میکند و مجموعه آزمایشی شما را اجرا میکند. می توانید این را برای استقرار برنامه با استفاده از خدماتی مانند AWS، Heroku یا Vercel گسترش دهید.
نکته حرفه ای: همیشه خطوط لوله CI/CD خود را با ذخیره کردن وابستگی ها و اجرای آزمایشات به صورت موازی کارآمد نگه دارید تا زمان ساخت را کاهش دهید.
6. برچسب گذاری انتشار
برچسبگذاری commitها با شمارههای نسخه معنیدار راهی عالی برای ردیابی نسخههای مهم و بازگشت به نسخه پایدار در صورت نیاز است. شما می توانید یک برچسب سبک وزن مانند این ایجاد کنید:
git tag -a v1.0.0 -m “First major release”
git push origin v1.0.0
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برچسب ها به علامت گذاری نکات مهم در جدول زمانی پروژه شما کمک می کنند، مانند انتشار تولید یا تکمیل یک ویژگی اصلی.
7. استفاده از نام مستعار برای دستورات مشترک
تایپ دستورات طولانی Git می تواند زمان بر باشد، بنابراین استفاده از نام مستعار Git می تواند گردش کار شما را سرعت بخشد.
git config –global alias.co checkout
git config –global alias.br branch
git config –global alias.ci commit
git config –global alias.st status
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با این نام های مستعار می توانید جایگزین کنید git checkout با git co، git branch با git br، و غیره. این کار تایپ کردن را کاهش می دهد و کار روزانه شما را سرعت می بخشد.
نتیجه گیری
Mastering Git می تواند کارایی و بهره وری شما را به عنوان یک توسعه دهنده نرم افزار به شدت بهبود بخشد. از استفاده از استراتژیهای انشعاب مؤثر و مدیریت تضادهای ادغام گرفته تا استفاده از GitHub Actions برای CI/CD، این نکات به شما کمک میکند گردش کار خود را ساده کنید و پروژههای خود را به خوبی سازماندهی کنید. چه به صورت انفرادی و چه به صورت تیمی کار می کنید، اتخاذ این شیوه ها همکاری نرم تری را ممکن می کند و اطمینان حاصل می کند که پایگاه کد شما تمیز و قابل مدیریت باقی می ماند.
Git یک ابزار ضروری در جعبه ابزار هر توسعه دهنده است. این نه تنها به شما کمک می کند تا پایگاه کد خود را به طور کارآمد مدیریت کنید، بلکه امکان همکاری یکپارچه با اعضای تیم را نیز فراهم می کند. با این حال، اغلب توسعهدهندگان برخی از ویژگیها و جریانهای کاری قدرتمندی را که Git ارائه میدهد نادیده میگیرند. در این وبلاگ، نکات و ترفندهای ضروری Git را بررسی میکنیم تا به توسعهدهندگان کمک کنیم گردش کار خود را سادهتر کنند، شاخهها را به طور مؤثرتری مدیریت کنند، تضادها را به راحتی حل کنند، و اقدامات GitHub را برای یکپارچهسازی مداوم/استقرار مستمر (CI/CD) یکپارچه کنند.
1. تسلط بر استراتژیهای شاخهبندی مؤثر
شاخهبندی یکی از قویترین ویژگیهای Git است. استفاده از شاخهها به توسعهدهندگان اجازه میدهد تا بر روی ویژگیهای مختلف یا رفع اشکال به صورت مجزا کار کنند و از پایدار ماندن پایگاه کد اصلی اطمینان حاصل کنند. در اینجا چند استراتژی کلیدی برای بهبود گردش کار شما آورده شده است:
Git Flow: Git Flow یک مدل شاخهبندی محبوب است که به مدیریت چرخه عمر توسعه شما کمک میکند. شاخه های اصلی در Git Flow هستند
master
(برای کد تولید پایدار) وdevelop
(برای ویژگی های در حال توسعه). شاخه های ویژگی از ایجاد می شوندdevelop
و پس از تکمیل ویژگی دوباره ادغام شدند. شاخههای رفع اشکال یا رفع فوری از آن ایجاد میشوندmaster
برای رسیدگی به مسائل تولیدتوسعه مبتنی بر تنه: این استراتژی توسعهدهندگان را تشویق میکند تا روی شاخههای کوتاهمدت کار کنند و تغییرات کوچک و تدریجی را اغلب در شاخهها ادغام کنند.
main
شاخه این برای توسعه سریع و یکپارچه سازی عالی است و شانس عدم هماهنگی شعب طولانی مدت با پایگاه کد اصلی را کاهش می دهد.شاخه های ویژه: همیشه شاخه های جداگانه ای برای ویژگی ها ایجاد کنید (به عنوان مثال،
feature/login-page
) و آنها را جدا نگه دارید تا زمانی که آماده ادغام شوند. شاخه های ویژگی به تمایز واضح بین وظایف مختلف کمک می کند و پیچیدگی مدیریت تغییرات متعدد در یک شاخه را کاهش می دهد.
نکته: استفاده کنید git branch -a
فهرست کردن تمام شعب محلی و راه دور، و git branch -d
برای حذف شاخه هایی که دیگر مورد نیاز نیستند.
2. مدیریت و حل تعارضات ادغام
تداخل ادغام زمانی اتفاق می افتد که تغییرات در خطوط یکسان کد در شاخه های مختلف ایجاد شود. در حالی که آنها اجتناب ناپذیر هستند، دانستن نحوه برخورد با آنها می تواند در زمان و استرس شما صرفه جویی کند.
قبل از ادغام: همیشه کشیدن آخرین تغییرات از شاخه هدف (به عنوان مثال،
git pull origin master
) قبل از ادغام به شاخه ویژگی شما. این تضمین می کند که با به روزترین کد کار می کنید، که می تواند از بسیاری از درگیری ها جلوگیری کند.در طول یک درگیری: هنگامی که یک تضاد رخ می دهد، Git فایل های متناقض را علامت گذاری می کند. میتوانید این تضادها را با ویرایش فایلها، انتخاب تغییرات برای حفظ و سپس انجام تغییرات حلشده به صورت دستی حل کنید.
# To see conflicting files
git status
# After resolving conflicts
git add
git commit -m "Resolved merge conflict"
- با استفاده از ابزار Merge: ابزارهایی مانند KDiff3 یا ویرایشگر تفاوت داخلی VSCode می تواند با ارائه یک رابط بصری برای مقایسه تغییرات، حل تعارضات را آسان تر کند.
3. Rebase تعاملی برای یک تاریخچه تمیزتر
یک تاریخچه ارتکاب کثیف می تواند درک تکامل یک پایگاه کد را دشوارتر کند. اینجاست که rebase تعاملی به کار می آید این به شما امکان می دهد تا قبل از ادغام آنها در شاخه اصلی، commit ها را له کنید، ویرایش کنید یا دوباره ترتیب دهید.
# Start an interactive rebase for the last X commits
git rebase -i HEAD~X
-
Squashing Commits: اگر شاخه ویژگی شما دارای تعهدات کوچک و غیر ضروری زیادی است (به عنوان مثال،
fix typo
)، می توانید آنها را در طول فرآیند rebase به یک commit معنادار تبدیل کنید. این کار تاریخچه تعهد شما را تمیز نگه میدارد و بازبینی آن آسانتر میشود.
نکته حرفه ای: همیشه قبل از ادغام به شاخه اصلی، مجدداً پایه گذاری کنید تا از تعهدات ادغام غیر ضروری جلوگیری کنید. به عنوان مثال:
git checkout feature-branch
git rebase main
4. پنهان کردن تغییرات: کار خود را به طور موقت ذخیره کنید
مواقعی وجود دارد که باید شاخه ها را تغییر دهید یا روی یک باگ فوری کار کنید، اما نمی خواهید تغییرات ناقصی انجام دهید. آنجاست git stash
به کمک می آید.
# Stash your current changes
git stash
# Apply the stashed changes later
git stash apply
# Drop the stash once it’s applied
git stash drop
git stash
به شما اجازه می دهد تا تغییرات غیرمتعهد خود را بدون انجام آنها ذخیره کنید و به شما اجازه می دهد شاخه ها را تغییر دهید یا روی کارهای دیگر کار کنید. وقتی در میانه چیزی هستید اما باید سریع بچرخید، نجات دهنده است.
5. GitHub Actions برای CI/CD
یکپارچه سازی مداوم و استقرار مستمر (CI/CD) شیوه های ضروری برای حفظ کیفیت کد و خودکارسازی استقرار هستند. با GitHub Actions، می توانید به راحتی گردش کار را مستقیماً در مخزن خود خودکار کنید.
در اینجا یک فایل ساده GitHub Action YAML برای راهاندازی یک گردش کار پایه CI وجود دارد که با هر بار فشار دادن کد، آزمایشهایی را اجرا میکند:
name: CI Pipeline
on:
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- run: npm install
- run: npm test
این اقدام کد را بررسی میکند، Node.js را راهاندازی میکند، وابستگیها را نصب میکند و مجموعه آزمایشی شما را اجرا میکند. می توانید این را برای استقرار برنامه با استفاده از خدماتی مانند AWS، Heroku یا Vercel گسترش دهید.
نکته حرفه ای: همیشه خطوط لوله CI/CD خود را با ذخیره کردن وابستگی ها و اجرای آزمایشات به صورت موازی کارآمد نگه دارید تا زمان ساخت را کاهش دهید.
6. برچسب گذاری انتشار
برچسبگذاری commitها با شمارههای نسخه معنیدار راهی عالی برای ردیابی نسخههای مهم و بازگشت به نسخه پایدار در صورت نیاز است. شما می توانید یک برچسب سبک وزن مانند این ایجاد کنید:
git tag -a v1.0.0 -m "First major release"
git push origin v1.0.0
برچسب ها به علامت گذاری نکات مهم در جدول زمانی پروژه شما کمک می کنند، مانند انتشار تولید یا تکمیل یک ویژگی اصلی.
7. استفاده از نام مستعار برای دستورات مشترک
تایپ دستورات طولانی Git می تواند زمان بر باشد، بنابراین استفاده از نام مستعار Git می تواند گردش کار شما را سرعت بخشد.
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
با این نام های مستعار می توانید جایگزین کنید git checkout
با git co
، git branch
با git br
، و غیره. این کار تایپ کردن را کاهش می دهد و کار روزانه شما را سرعت می بخشد.
نتیجه گیری
Mastering Git می تواند کارایی و بهره وری شما را به عنوان یک توسعه دهنده نرم افزار به شدت بهبود بخشد. از استفاده از استراتژیهای انشعاب مؤثر و مدیریت تضادهای ادغام گرفته تا استفاده از GitHub Actions برای CI/CD، این نکات به شما کمک میکند گردش کار خود را ساده کنید و پروژههای خود را به خوبی سازماندهی کنید. چه به صورت انفرادی و چه به صورت تیمی کار می کنید، اتخاذ این شیوه ها همکاری نرم تری را ممکن می کند و اطمینان حاصل می کند که پایگاه کد شما تمیز و قابل مدیریت باقی می ماند.