از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
اصول Git را بیاموزید – یک کتابچه راهنمای روی وظایف توسعه روزانه
سرفصلهای مطلب
به راهنمای جامع من خوش آمدید روی Git، سیستم کنترل نسخه توزیع شده که همکاری و مدیریت کد را در توسعه نرم افزار متحول کرده است.
چه یک توسعه دهنده با تجربه باشید و چه به تازگی سفر خود را در برنامه نویسی شروع کرده اید، درک Git برای به دست آوردن کنترل مناسب بر روی کد خود، مدیریت کارآمد پروژه های خود و همکاری با دیگران ضروری است.
در این آموزش، من شما را با اصول Git آشنا میکنم که همه چیز را از گردش کار اولیه آن گرفته تا استراتژیهای شاخهبندی پیشرفته و تکنیکهای rebasing را پوشش میدهد.
در پایان این راهنما، شما درک کاملی از مفاهیم اصلی Git خواهید داشت و با اعتماد به نفس و مهارت های لازم برای استفاده موثر از آن در گردش کار توسعه خود مجهز خواهید بود.
پیش نیازها:
تنها چیزی که باید به میز بیاورید یک طرز فکر کنجکاو و مشتاق برای یادگیری است. این راهنما با در نظر گرفتن مبتدیان ساخته شده است، بنابراین هیچ دانش قبلی در مورد سیستم های کنترل نسخه یا برنامه نویسی مورد نیاز نیست. خواه کاملاً مبتدی باشید یا تجربه ای در زمینه کدنویسی داشته باشید، این آموزش را در دسترس و آسان خواهید یافت.
فهرست مطالب:
- گیت چیست؟
– تفاوت با سایر سیستم های کنترل نسخه
– گردش کار سه حالت و پایه گیت - راه اندازی Git برای اولین بار
- در Git راهنمایی دریافت کنید
- چگونه یک مخزن Git دریافت کنیم
– یک مخزن را در یک دایرکتوری موجود راه اندازی کنید
– یک مخزن موجود در Git را شبیه سازی کنید - روش ثبت تغییرات در مخزن
- مشاهده commit History در Git
- لغو کارها در Git
- مخازن راه دور در Git
- برچسب گذاری در Git
- نام مستعار Git
- Git Branching
– یک شعبه جدید در Git ایجاد کنید
– شناخت شاخه ها
– به یک شعبه دیگر در Git بروید
– Branches را در Git تجسم کنید - روش مدیریت شاخه ها در Git
– مدیریت شعب ادغام شده
– تغییر نام شعب
– تغییر نام شعبه پیش فرض - انشعاب گردش کار
- Rebasing در Git
- نتیجه
گیت چیست؟
Git یک سیستم کنترل نسخه توزیع شده است که به شما و تیمتان کمک می کند تا در عین ایمن نگه داشتن تاریخچه پروژه خود، به طور مؤثر با یکدیگر همکاری کنید. مثل این است که یک ماشین زمان برای کد خود داشته باشید!
چه چیزی Git را از سایر سیستم های کنترل نسخه متمایز می کند؟
تفاوت مفهومی:
نکته مهمی که Git را از سایر ابزارها متمایز می کند روش تفکر آن در مورد داده است. به جای ذخیره تغییرات در فایلها، Git دادههای خود را به عنوان مجموعهای از عکسهای فوری از پروژه شما در نظر میگیرد، یعنی هر بار که تغییری ایجاد میکنید و آن را ذخیره میکنید (متعهد)، Git یک عکس فوری از تمام فایلهای شما در آن لحظه میگیرد. اگر فایلی تغییر نکرده باشد، Git فقط یک پیوند به فایل مشابه قبلی را نگه می دارد.
Local عملیات:
با Git، بیشتر کارهایی که انجام می دهید نیازی به اتصال به سرور ندارند. زیرا شما کل تاریخچه پروژه را دارید روی کامپیوتر شما، عملیات فوق العاده سریع است. می توانید تاریخچه پروژه را مرور کنید یا تغییرات بین نسخه ها را بدون منتظر ماندن برای سرور مشاهده کنید.
یکپارچگی داده:
Git مطمئن می شود که هیچ چیز گم نمی شود یا خراب نمی شود. هر فایل و دایرکتوری چک جمع می شود و Git می داند که آیا چیزی تغییر کرده است.
Git از یک هش SHA-1 استفاده می کند، یک کد منحصر به فرد برای هر نسخه از یک فایل. اگر هر گونه تغییری در محتوا ایجاد شود، حتی یک کاراکتر، منجر به یک هش SHA-1 متفاوت می شود.
مدل فقط ضمیمه:
در Git تقریباً همه چیز به پروژه داده اضافه می کند و از دست دادن تصادفی اطلاعات را دشوار می کند. هنگامی که تغییرات را انجام دهید، آنها با خیال راحت ذخیره می شوند. آزمایش با Git خطر کمتری دارد.
گردش کار سه حالت و پایه Git
درک سه حالت Git – اصلاح شده، مرحلهبندی شده و متعهد – برای کنترل نسخه موثر ضروری است:
- اصلاح شده: تغییرات ایجاد شده در فایل های موجود در شما درخت کار که هنوز متعهد نشده اند.
- صحنه سازی شد: تغییرات علامت گذاری شده برای commit بعدی در منطقه صحنه سازی در commit بعدی گنجانده شود.
- متعهد شد: تغییرات به طور دائم در محلی ذخیره می شود دایرکتوری Git.
Basic Git Workflow:
- فایل ها را اصلاح کنید در درخت کار شما
- تغییرات مرحله ای می خواهید در commit بعدی قرار دهید.
- تغییرات را متعهد شوید، که به طور دائم عکس های فوری را در فهرست Git ذخیره می کند.
راه اندازی Git برای اولین بار
راه اندازی Git برای اولین بار شامل سفارشی کردن محیط Git برای مطابقت با ترجیحات شما است. اما ابتدا باید Git را از Git – Downloads دانلود کنید یا از بسته Chocolatey استفاده کنید. سپس فقط دستورالعمل های نصب را دنبال کنید و باید آماده باشید.
پیکربندی Git
ما استفاده می کنیم git config
ابزاری برای سفارشی کردن محیط Git ما. این ابزار به ما اجازه می دهد تا متغیرهای پیکربندی را که روش عملکرد Git را دیکته می کنند، بازیابی و تنظیم کنیم. این متغیرها را می توان در سه مکان مختلف ذخیره کرد:
- پیکربندی کل سیستم:
ذخیره شده در/etc/gitconfig
فایل، این تنظیمات برای همه کاربران اعمال می شود روی سیستم و تمام مخازن ما می توانیم با این فایل با استفاده از--system
گزینه باgit config
. - پیکربندی خاص کاربر:
ذخیره شده در~/.gitconfig
یا~/.config/git/config
، این مقادیر مختص شما به عنوان یک کاربر است. ما می توانیم با این فایل با استفاده از--global
گزینه باgit config
، روی تمام مخازنی که با آنها کار می کنید تأثیر می گذارد روی سیستم شما - پیکربندی خاص مخزن:
ذخیره شده در.git/config
فایل در یک مخزن خاص، این تنظیمات پیکربندی های جهانی را لغو می کند و فقط برای آن مخزن اعمال می شود.
هر سطح از پیکربندی مقادیر سطح قبلی را لغو می کند. به عنوان مثال، مقادیر در .git/config
کسانی که در آن هستند را لغو خواهد کرد ~/.gitconfig
.
برای مشاهده تمام تنظیمات پیکربندی و منابع/منشاهای آنها:
$ git config --list --show-origin
روش پیکربندی هویت خود در Git:
هویت در Git برای نسبت دادن به درستی commit ها استفاده می شود. بیایید نام کاربری و آدرس ایمیل شما را تنظیم کنیم.
$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@example.com"
اگر برای پروژههای خاصی نیاز به لغو آن دارید، میتوانید آن را حذف کنید --global
هنگام تنظیم مقادیر، گزینه ای را انتخاب کنید، و آنها فقط برای آن مخزن خاص اعمال می شوند.
چگونه ویرایشگر متن پیش فرض خود را پیکربندی کنید
پس از پیکربندی هویت خود، مهم است که ویرایشگر متن پیش فرض خود را در Git راه اندازی کنید. این ویرایشگر متن زمانی استفاده میشود که Git به شما برای وارد کردن پیامها نیاز دارد، مانند هنگام نوشتن پیامهای commit یا حل تضادهای ادغام.
به طور پیش فرض، Git از ویرایشگر متن پیش فرض سیستم شما استفاده می کند. با این حال، اگر ترجیح می دهید از ویرایشگر متن دیگری مانند Emacs استفاده کنید، می توانید آن را به صورت زیر تنظیم کنید:
$ git config --global core.editor "emacs"
در سیستمهای ویندوز، راهاندازی یک ویرایشگر متن دیگر مستلزم مشخص کردن مسیر کامل فایل اجرایی آن است. برای مثال، اگر میخواهید از Notepad++ استفاده کنید، میتوانید از دستور زیر استفاده کنید:
$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
مطمئن شوید که مسیر صحیح فایل اجرایی ویرایشگر متن خود را ارائه کرده اید.
به هر حال، اینها – "-multiInst -notabbar -nosession -noPlugin"
– گزینه هایی هستند که برای سفارشی کردن رفتار Notepad++ هنگام راه اندازی Git استفاده می شوند.
روش تغییر نام شعبه پیش فرض در Git (اختیاری):
به طور پیش فرض، زمانی که یک مخزن جدید را با git init
، Git یک شاخه به نام ایجاد می کند master
. اما از Git نسخه 2.28 به بعد، شما این امکان را دارید که نام دیگری برای شاخه اولیه تعیین کنید.
روش بررسی پیکربندی/تنظیمات در Git:
می توانید پیکربندی Git خود را با استفاده از:
$ git config --list
$ git config user.name # To check a specific setting (e.g., user name):
این git config --list
دستور تمام تنظیمات پیکربندی را که Git می تواند در آن لحظه پیدا کند فهرست می کند.
روش دریافت کمک در Git
سه راه معادل برای دریافت راهنمایی دقیق برای هر دستور Git وجود دارد:
- دستور راهنمای Git:
$ git help <verb>
- با استفاده از
--help
گزینه:$ git <verb> --help
- صفحات دستی (صفحه های انسانی):
$ man git-<verb>
عوض کن <verb>
با هر دستوری که به کمک نیاز دارید. به عنوان مثال، برای کمک گرفتن برای config
دستور، می توانید تایپ کنید:
$ git help config
or
$ man git-config
این دستورات به صورت آفلاین نیز کار می کنند، که مفید است.
اگر به اطلاعات سریع و مختصر در مورد گزینه های موجود برای دستور Git نیاز دارید، می توانید از آن استفاده کنید -h
گزینه:
$ git add -h # This will display options available for the add command
چگونه یک مخزن Git دریافت کنیم
برای شروع استفاده از Git، معمولاً یک مخزن Git دریافت می کنید. اساساً دو راه اصلی برای شروع وجود دارد:
1. روش راه اندازی یک مخزن در یک دایرکتوری موجود در Git
a را باز کنید terminal یا خط فرمان استفاده کنید cd
دستور تغییر دایرکتوری به محل پروژه شما: cd /path/to/your/project
.
هنگامی که در فهرست پروژه خود قرار گرفتید، یک مخزن Git را با اجرای:
$ git init
این دستور یک زیر شاخه جدید به نام ایجاد می کند .git
جایی که Git تمام فایل های لازم را برای مخزن Git شما ذخیره می کند. در این مرحله، هیچ یک از فایل های پروژه شما هنوز ردیابی نمی شود.
حال، فرض کنید فایل های خاصی دارید که می خواهید Git شروع به ردیابی کند:
$ git add *.py # Add all Python files
$ git add README.md # Add README file
$ git commit -m 'Initial commit'
git add
فایل ها را به قسمت مرحله اضافه می کند که نشان می دهد می خواهید آنها را در commit بعدی قرار دهید و سپس تغییرات را انجام دهید. این -m
flag به شما امکان می دهد یک پیام توصیفی به commit اضافه کنید.
2. روش کلون کردن یک مخزن موجود در Git:
راه دوم برای به دست آوردن یک مخزن Git، شبیه سازی یک مخزن موجود است. این زمانی مفید است که می خواهید کار کنید روی پروژه ای که قبلاً در جای دیگری وجود دارد (به عنوان مثال، پروژه ای که می خواهید در آن مشارکت داشته باشید).
توجه داشته باشید: وقتی یک مخزن را شبیه سازی می کنید، Git یک کپی کامل از تقریباً تمام داده هایی را که سرور دارد بازیابی می کند. این شامل هر نسخه از هر فایل برای تاریخچه پروژه است. این بدان معناست که شما یک کپی کامل از تاریخچه مخزن خواهید داشت روی ماشین محلی شما
برای شبیه سازی یک مخزن، از git clone
دستور به دنبال URL مخزن مورد نظر برای شبیه سازی. به عنوان مثال، برای شبیه سازی مخزن grok-1، می توانید از موارد زیر استفاده کنید:
$ git clone https://github.com/xai-org/grok-1.git
این یک دایرکتوری به نام grok-1 ایجاد می کند که a را مقداردهی اولیه می کند .git
دایرکتوری داخل آن، و تمام داده های آن مخزن را پایین می کشد.
BTW، .git
فقط یک قرارداد برای نشان دادن این است که URL به یک مخزن Git اشاره می کند. می توانید از آن استفاده کنید یا نه، مهم نیست.
اگر میخواهید در فهرستی با نام دیگری کلون کنید، میتوانید آن را مشخص کنید. برای کلون کردن مخزن grok-1 در فهرستی به نام “chatgpt” به جای “grok-1″، این کار را انجام دهید:
$ git clone https://github.com/xai-org/grok-1.git chatgpt
Git پروتکل های انتقال مختلفی را ارائه می دهد که می توانید از آنها برای شبیه سازی مخازن استفاده کنید. مثال بالا از https://
پروتکل، اما شما همچنین ممکن است ببینید git://
یا user@server:path/to/repo.git
، که از پروتکل انتقال SSH استفاده می کند.
روش ثبت تغییرات در مخزن
اکنون که یک مخزن Git راه اندازی کرده اید، اغلب نیاز به ایجاد تغییرات و ثبت آن تغییرات در مخزن خود دارید. این process شامل ردیابی فایل ها، مرحله بندی تغییرات و انجام عکس های فوری است. بیایید مراحل مربوطه را بررسی کنیم:
1. روش بررسی وضعیت فایل های خود در Git:
هنگام کار با یک مخزن Git، درک وضعیت فایل های خود بسیار مهم است.
گیت فایلها را به دو نوع ردیابی شده و ردیابی نشده دستهبندی میکند. فایلهای ردیابیشده آنهایی هستند که Git آنها را تشخیص میدهد، یا به این دلیل که بخشی از آخرین عکس فوری (تعهد) بودند یا مرحلهبندی شدهاند. فایلهای ردیابی نشده همه چیز دیگری هستند – فایلهایی که Git در حال حاضر نظارت نمیکند. برای بررسی وضعیت مخزن خود:
$ git status
این دستور اطلاعات جامعی در مورد شاخه فعلی، وضعیت همگام سازی آن و وضعیت فایل های شما ارائه می دهد.
git status
همچنین اقداماتی را که می توانید انجام دهید را پیشنهاد می کند. به عنوان مثال، زمانی که فایل ها اصلاح می شوند اما برای commit مرحله بندی نمی شوند، git status
استفاده را پیشنهاد می کند git add <file>
برای صحنه سازی آنها همچنین استفاده از آن را پیشنهاد می کند git checkout -- <file>
برای حذف تغییرات در دایرکتوری کاری این پیشنهادات گردش کار شما را با دسترسی سریع به دستورات مربوط به Git ساده می کند.
همچنین، git status
یک حالت وضعیت کوتاه ارائه می دهد (git status -s
) که نمای مختصرتری از تغییرات شما با استفاده از نمادهایی مانند M (اصلاح شده)، A (اضافه شده) و ?? (ردیابی نشده) برای نشان دادن وضعیت فایل.
2. روش ردیابی فایل های جدید در Git
هنگامی که یک فایل جدید در پروژه خود ایجاد می کنید، Git در ابتدا آن را ردیابی نشده در نظر می گیرد. برای شروع ردیابی یک فایل جدید، باید آن را با استفاده از git add
فرمان
به عنوان مثال، اجازه دهید یک فایل جدید به نام ایجاد کنیم index.html
برای پروژه ما و اضافه کردن آن به منطقه صحنه:
$ touch index.html
$ git add index.html
پس از افزودن، در حال اجرا است git status
دوباره نشان خواهد داد که index.html
فایل اکنون ردیابی و برای commit مرحله بندی می شود.
3. روش مرحله بندی فایل های اصلاح شده در Git
اگر فایل ردیابی شده موجود را تغییر دهید، باید تغییرات را با استفاده از مرحله بندی انجام دهید git add
. فرض کنید یک فایل موجود به نام را اصلاح می کنیم styles.css
$ vim styles.css
پس از ایجاد تغییرات، فایل را مرحله بندی کنید:
$ git add styles.css
اکنون، وقتی وضعیت را بررسی می کنید، هم فایل اصلاح شده و هم فایل جدید را که برای commit مرحله بندی شده اند، می بینید.
4. روش نادیده گرفتن فایل ها در Git
اغلب، فایلها یا دایرکتوریهایی در یک پروژه وجود دارند که برای ردیابی Git در نظر گرفته نشدهاند. اینها ممکن است شامل فایلهای گزارش، آرتیفکتهای ساخت یا اطلاعات حساس مانند تنظیمات محیط محلی (مانند *.env یا config.json) باشد. می توانید با استفاده از a مشخص کنید که این فایل ها نادیده گرفته شوند .gitignore
فایل.
ایجاد یک .gitignore
فایل :
$ nano .gitignore
الگوهای فایل ها یا دایرکتوری هایی را که می خواهید نادیده بگیرید را فهرست کنید.:
$ echo '*.log' >> .gitignore
$ echo 'build/' >> .gitignore
در اینجا، به Git میگوییم که همه فایلهای دارای a را نادیده بگیرد .log
پسوند و build/
فهرست راهنما.
توجه داشته باشید: فایلهایی که قبلاً توسط Git ردیابی شدهاند قبل از اینکه به آن اضافه شوند .gitignore
فایل پیگیری خواهد شد. برای حذف آنها، باید به صورت دستی با استفاده از دستورات Git ردیابی آنها را بردارید.
در اینجا چند الگو وجود دارد که می توانید از آنها برای کار موثرتر در Git استفاده کنید.
- فایلها یا پسوند فایلها را دقیقاً هدف قرار دهید: مثلا،
test.txt
در حالی که فقط آن فایل خاص را نادیده می گیرد*.log
تمام فایلهایی که به آن ختم میشوند را نادیده میگیرد.log
. - حروف عام برای مسابقات گسترده تر: ستاره (
*
) حروف با هر تعداد کاراکتر مطابقت دارد. مثلا،*.doc
همه فایلهای دارای را نادیده میگیرد.doc
پسوند، صرف نظر از نام آنها.
5. روش مشاهده تغییرات در Git:
اگر میخواهید تغییرات دقیقی را که در فایلهای خود ایجاد کردهاید مشاهده کنید، میتوانید از آن استفاده کنید git diff
فرمان
برای دیدن تغییرات بدون مرحله:
$ git diff
و برای مشاهده تغییرات مرحلهای:
$ git diff --cached README.md
git diff
نمای دقیقی از تغییرات واقعی ارائه می دهد. استفاده کنید git diff <filename>
برای تمرکز روی تغییرات در یک فایل خاص
6. روش انجام تغییرات:
هنگامی که آماده انجام تغییرات خود هستید، از آن استفاده کنید git commit
فرمان این ویرایشگر متن شما را برای شما باز می کند تا یک پیام commit ارائه دهید. به طور متناوب، می توانید از -m
برای افزودن مستقیم پیام commit، پرچم گذاری کنید:
هنگامی که تغییراتی را که می خواهید در commit قرار دهید را مرحله بندی کردید، می توانید آنها را با استفاده از آن انجام دهید git commit
$ git commit -m "Your commit message here"
7. روش حذف فایل ها در Git:
اگر نیاز به حذف یک فایل از ردیابی Git دارید، می توانید استفاده کنید git rm
. فایل را هم از مخزن و هم از دایرکتوری کاری حذف می کند. فرض کنید می خواهید فایلی به نام را حذف کنید temp.txt
:
$ git rm temp.txt
اگر فقط می خواهید آن را از مخزن حذف کنید اما آن را در دایرکتوری کاری نگه دارید، از آن استفاده کنید --cached
گزینه:
$ git rm --cached temp.txt
8. روش انتقال (یا تغییر نام) فایل ها در Git:
Git به صراحت حرکات فایل را ردیابی نمی کند. اما می توانید استفاده کنید git mv
برای تغییر نام یا انتقال فایل ها در مخزن خود. به عنوان مثال، برای تغییر نام old_file.txt
به new_file.txt
:
معادل انتقال دستی فایل و سپس استفاده از آن است git rm
برای حذف فایل قدیمی و سپس git add
برای اضافه کردن فایل جدید git mv
اساساً این مراحل را در یک فرمان واحد ادغام می کند.
این دستورات گردش کار اصلی را برای ایجاد تغییرات، مرحله بندی آنها و متعهد کردن آنها به مخزن Git شما تشکیل می دهند.
روش مشاهده commit History در Git
پس از ایجاد چندین commit یا شبیه سازی یک مخزن، git log
دستور به شما امکان می دهد تا تاریخچه commit را بررسی کنید.
بهطور پیشفرض، commitها را به ترتیب زمانی معکوس فهرست میکند و هر commit را با چکجمع SHA-1، نام نویسنده و ایمیل، تاریخ و پیام commit نمایش میدهد.
حال بیایید ببینیم چگونه می توانیم این خروجی را افزایش دهیم:
روش مشاهده تفاوت های commit در Git:
برای مشاهده تفاوت معرفی شده در هر commit می توانید از -p
یا --patch
گزینه:
$ git log -p -2 # -2 is used to view the differences introduced in each of the last two commits
روش نمایش آمار در Git:
این --stat
گزینه آمار خلاصه ای را برای هر commit ارائه می دهد، از جمله فایل های اصلاح شده، خطوط اضافه/حذف شده و خلاصه.
$ git log --stat
روش سفارشی کردن فرمت خروجی Git Log:
این --pretty
گزینه به شما امکان می دهد فرمت خروجی گزارش را تغییر دهید. گزینه های مختلفی برای فرمت های مختلف موجود است:
oneline
: خلاصه تک خطی هر کامیت.short
: فرمت پیش فرض با نویسنده، تاریخ و پیام.full
: فرمت دقیق با هش commit، نویسنده، تاریخ، پیام و تفاوت.fuller
: فرمت دقیق تر، از جمله مسیرهای فایل کامل.format
: خروجی را با استفاده از مشخص کننده های فرمت سفارشی کنید.
$ git log --pretty=oneline
مشخص کننده های قالب مفید برای --pretty=format
:
%h:
مخفف commit هش%an:
نام نویسنده%ae:
ایمیل نویسنده%ad:
تاریخ نویسنده%s:
موضوع (پیام متعهد)
$ git log --pretty=format:"%h %an %ad %s"
نمودار اسکی:
استفاده کردن --graph
، همچنین می توانید تاریخچه شاخه و ادغام را تجسم کنید.
$ git log --pretty=format:"%h %s" --graph
روش محدود کردن خروجی Git Log:
علاوه بر گزینه های قالب بندی، git log
گزینه های محدود کننده مختلفی را برای اصلاح تاریخچه commit نمایش داده شده ارائه می دهد.
-<n>:
فقط آخرین n commit را نشان می دهد.--since, --until:
Limits به مواردی که بعد از/قبل از تاریخ مشخص شده ایجاد شده اند متعهد می شود.--author:
تنها توسط یک نویسنده خاص، تعهدات را نشان می دهد.--grep:
فیلترها توسط یک کلمه کلیدی در پیام های commit انجام می شود.-S:
تغییر تعهدات را نشان می دهد
مثال استفاده: مشاهده 3 تعهد آخر نویسنده Abbey از تاریخ معین، با جزئیات پچ:
$ git log --author="Abbey" --since="1403-01-01" -p -3
روش لغو کارها در Git
لغو تغییرات یک نیاز رایج در Git است و چندین گزینه برای این منظور در دسترس است.
چگونه یک Commit را در Git لغو کنیم
اگر خیلی زود تعهد کرده اید یا نیاز به ایجاد تغییرات اضافی در آخرین commit دارید، از این دستور استفاده کنید:
$ git commit --amend
این ویرایشگر پیام commit را باز می کند و به شما امکان می دهد پیام را تغییر دهید. اگر از آخرین commit تغییری ایجاد نشده باشد، به سادگی به شما امکان می دهد پیام commit را ویرایش کنید.
توجه داشته باشید: فقط تعهداتی را اصلاح کنید که هنوز محلی هستند و هنوز تحت فشار قرار نگرفته اند تا از مشکلاتی برای همکاران جلوگیری شود.
چگونه یک فایل مرحلهبندیشده را با آنها Unstage کنیم git reset
برای جداسازی فایلی که به طور تصادفی اضافه شده است، می توانید از git reset HEAD <file>
فرمان مثلا:
$ git reset HEAD CONTRIBUTING.md
فایل بدون مرحله است و به شما امکان می دهد بدون انجام تغییرات ناخواسته تغییرات بیشتری ایجاد کنید.
چگونه یک فایل اصلاح شده را با git checkout
فرض کنید تغییراتی در فایل هایی ایجاد کرده اید که بعداً متوجه می شوید نمی خواهید آنها را نگه دارید. استفاده کنید git checkout -- <file>
برای حذف تغییرات ایجاد شده در یک فایل و برگرداندن آن به حالت قبلی.
$ git checkout -- CONTRIBUTING.md
این فایل اصلاح شده را با آخرین نسخه مرحلهای یا متعهد جایگزین میکند.
لغو کارها با git restore
بیایید جایگزین های معرفی شده توسط Git نسخه 2.23.0 را بررسی کنیم، git restore
، که به عنوان جایگزینی برای git reset
برای بسیاری از عملیات خنثی سازی
چگونه یک فایل استیج شده را با git restore
اگر به طور تصادفی فایلی را که قصد انجام آن را نداشتید استیج کردید، می توانید از آن استفاده کنید git restore --staged <file>
آن را از صحنه خارج کند.
$ git restore --staged CONTRIBUTING.md
فایل بدون مرحله است، شبیه به git reset HEAD <file>
، به شما امکان می دهد بدون انجام تغییرات ناخواسته تغییرات بیشتری ایجاد کنید.
چگونه یک فایل اصلاح شده را با git restore
برای حذف تغییرات ایجاد شده در یک فایل در پوشه کاری، از استفاده کنید git restore <file>
:
$ git restore CONTRIBUTING.md
شبیه به git checkout -- <file>
، این دستور تغییرات ایجاد شده در فایل مشخص شده را کنار گذاشته و آن را به حالتی که در آخرین commit بود برمی گرداند.
یادداشت مهم: از دستوراتی مانند استفاده کنید git reset
، git checkout --
،git restore
با احتیاط زیرا می توانند تغییرات محلی را برای همیشه کنار بگذارند. وقتی مطمئن هستید که تغییرات لازم نیست و هیچ تغییر محلی ذخیره نشده ای ندارید از این دستورات استفاده کنید.
جایگزین، گزینه ها: پنهان کردن و شاخهبندی روشهای جایگزینی برای کنار گذاشتن موقت تغییرات بدون حذف کامل آنها هستند. اگر در مورد حذف تغییرات مطمئن نیستید، این روشها ایمنتر هستند.
روش کار با ریموت در Git
مخازن راه دور نسخه هایی از میزبانی پروژه شما هستند روی اینترنت یا شبکه همکاری با دیگران شامل مدیریت این مخازن راه دور، از جمله افزودن، حذف و بازرسی آنها است. بیایید یاد بگیریم که چگونه آنها را به طور موثر مدیریت کنیم.
چگونه ریموت های خود را در Git نشان دهیم
برای شروع، بیایید ببینیم کدام سرورهای راه دور برای پروژه ما با استفاده از پیکربندی شده اند:
$ git remote
این دستور نام کوتاه تمام دسته های راه دور که ما مشخص کرده ایم را فهرست می کند. به عنوان مثال، اگر یک مخزن را شبیه سازی کرده باشیم، معمولاً خواهیم دید origin
، نام پیش فرض Git را به سروری که از آن کلون کردیم اختصاص می دهد.
اضافه کردن -v
گزینه جزئیات بیشتری مانند URL های مرتبط با هر کنترل از راه دور را ارائه می دهد.
$ git remote -v
این نشانیهای وب واکشی و فشاری را برای هر کنترل از راه دور نمایش میدهد و به ما امکان میدهد بفهمیم پروژه ما در کجا میزبانی میشود و چگونه با آن تعامل داریم.
روش اضافه کردن مخازن از راه دور در Git
برای افزودن صریح یک مخزن راه دور جدید، استفاده کنید git remote add <shortname> <url>
:
$ git remote add example https://github.com/example/example.git
در اینجا، ما یک کنترل از راه دور به نام اضافه کرده ایم example
با URL مشخص شده این به ما امکان می دهد با استفاده از نام کوتاه به این مخزن راه دور ارجاع دهیم example
در دستورات ما
روش واکشی و کشیدن از راه دور در Git
برای واکشی داده ها از یک مخزن راه دور، از git fetch
دستور به دنبال نام راه دور:
$ git fetch origin // Here we are not specifying any particular branch.
هر گونه تغییر جدید را از قسمت دانلود می کند origin
مخزن از راه دور به مخزن محلی ما، به ما امکان می دهد تا از آخرین پیشرفت ها به روز بمانیم.
از طرف دیگر، اگر بخواهیم تغییرات را از یک شاخه راه دور به شاخه فعلی خود در یک مرحله واکشی و ادغام کنیم، از git pull
دستور:
$ git pull origin master
در اینجا، ما به طور خاص تغییرات را از master
شعبه از origin
مخزن از راه دور در شعبه فعلی ما.
چگونه تغییرات را در Remote در Git اعمال کنیم
برای به اشتراک گذاشتن کار خود با دیگران، تغییرات خود را به یک مخزن راه دور با استفاده از:
$ git push origin main
در این مثال، ما تغییرات محلی خود را به سمت سوق می دهیم main
شعبه از origin
مخزن از راه دور
روش بازرسی ریموت در Git
در نهایت، میتوانیم یک مخزن راه دور را برای جمعآوری اطلاعات بیشتر در مورد آن با استفاده از:
$ git remote show origin
این دستور جزئیاتی مانند URL های واکشی و فشاری، شاخه های ردیابی شده و تنظیمات شاخه محلی مرتبط با origin
مخزن از راه دور
روش تغییر نام ریموت ها در Git
حال فرض کنید میخواهیم نام کوتاه یک کنترل از راه دور را تغییر دهیم example
به new-example
:
$ git remote rename example new-example
روش حذف ریموت ها در Git
اگر به دلایلی دیگر نیازی به مخزن راه دور نداریم و بخواهیم آن را از پروژه خود حذف کنیم:
$ git remote remove new-example
or
$ git remote rm new-example
پس از حذف، شاخه های ردیابی از راه دور و تنظیمات پیکربندی مرتبط نیز حذف می شوند.
برچسب گذاری در Git
برچسب گذاری در Git یک ویژگی اساسی است که به توسعه دهندگان اجازه می دهد نقاط خاصی را در تاریخچه مخزن به عنوان مهم علامت گذاری کنند. معمولاً از برچسبها برای نشان دادن نقاط انتشار مانند v1.0، v2.0 و غیره استفاده میشود.
روش فهرست کردن برچسب های موجود در Git
تصور کنید در حال کار هستید روی پروژه ای با چندین نسخه منتشر شده برای فهرست کردن برچسب های موجود:
$ git tag
همچنین، میتوانید برچسبهای مطابق با یک الگوی خاص را با استفاده از -l
یا --list
گزینه. مثلا:
$ git tag -l "v2.0*"
این دستور برچسب هایی مانند را فهرست می کند v2.0
، v2.0-beta
، و غیره روی، مطابق با الگوی مشخص شده است.
روش ایجاد برچسب در Git
Git از دو نوع برچسب پشتیبانی می کند: سبک وزن و حاشیه نویسی.
برچسب های سبک وزن
هنگامی که می خواهید یک commit خاص را بدون اضافه کردن اطلاعات اضافی علامت گذاری کنید، از برچسب های سبک استفاده کنید. مثال:
$ git tag v1.1-lw
برای مشاهده اطلاعات commit مرتبط با این تگ، از:
برچسب های حاشیه نویسی شده
برچسب های حاشیه نویسی، روی از سوی دیگر، حاوی اطلاعات اضافی مانند اطلاعات برچسبگذاری، تاریخ و پیام برچسبگذاری باشد.
ایجاد یک تگ مشروح شامل استفاده از -a
گزینه با git tag
دستور، همراه با یک پیام برچسب گذاری. به عنوان مثال:
$ git tag -a v2.0 -m "Release version 2.0"
برای مشاهده اطلاعات دقیق در مورد این تگ، از جمله تعهدی که به آن اشاره می کند و پیام برچسب گذاری، از:
$ git show v2.0
چگونه یک commit قدیمی را در Git تگ کنیم
گاهی اوقات، ممکن است فراموش کنید که یک commit خاص را تگ کنید. نگران نباشید، میتوانید بعداً با تعیین چکسام commit آن را تگ کنید
مثال: فرض کنید فراموش کرده اید یک commit را با ID تگ کنید abcdefg
. می توانید آن را به صورت زیر تگ کنید:
روش فشار دادن برچسب به مخزن از راه دور در Git
برای فشار دادن یک برچسب خاص به یک سرور راه دور، می توانید از موارد زیر استفاده کنید:
$ git push origin <tagname>
اگر چندین تگ دارید و می خواهید همه آنها را به یکباره فشار دهید، می توانید از آن استفاده کنید --tags
گزینه:
$ git push origin --tags
روش حذف برچسب ها در Git
برای حذف یک برچسب به صورت محلی (حذف از مخزن محلی):
$ git tag -d <tagname>
به عنوان مثال، برای حذف یک برچسب سبک وزن به نام v1.4-lw
:
$ git tag -d v1.4-lw
از طرف دیگر، شما می توانید یک برچسب را از یک سرور راه دور به دو روش حذف کنید:
- با استفاده از
git push
دستور با refspec:
2. با استفاده از --delete
گزینه با git push
:
روش بررسی برچسب ها در Git
برای مشاهده وضعیت فایل ها در یک برچسب خاص، می توانید آن تگ را بررسی کنید:
$ git checkout v2.0
این دستور مخزن شما را در حالت “جداشده HEAD” قرار می دهد، جایی که می توانید فایل ها را مشاهده کنید اما نمی توانید مستقیماً تغییرات ایجاد کنید.
اگر نیاز به کار دارید روی فایل های موجود در آن تگ، بهتر است یک شاخه جدید ایجاد کنید:
$ git checkout -b v2.0-branch v2.0
اکنون می توانید تغییرات و commit ها را بدون تغییر تگ اصلی ایجاد کنید.
نام مستعار Git
نام مستعار Git میانبرها یا دستورات سفارشی هستند که می توانید برای ساده سازی و ساده سازی گردش کار Git خود ایجاد کنید.
برای ایجاد نام مستعار Git، از git config
فرمان با --global
برای در دسترس قرار دادن نام مستعار در تمام مخازن Git خود پرچم گذاری کنید.
نام مستعار اصلی برای دستورات مشترک
میتوانید برای دستورات Git که اغلب استفاده میشوند، نام مستعار ایجاد کنید تا به خاطر سپردن و تایپ آنها آسانتر شود. مثلا:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
اکنون، به جای تایپ کردن دستورات کامل، می توانید از نام مستعار کوتاه تری مانند استفاده کنید git co
، git br
، و git ci
به ترتیب.
شما همچنین می توانید نام مستعار سفارشی برای اقداماتی که اغلب انجام می دهید ایجاد کنید یا برای بهبود خوانایی دستور. مثال:
$ git config --global alias.unstage 'reset HEAD --'
در حال حاضر، شما می توانید استفاده کنید git unstage <file>
بجای git reset HEAD -- <file>
برای unstage کردن یک فایل
روش ترکیب چند دستور در Git
همچنین می توان از نام مستعار برای ترکیب چند دستور Git در یک نام مستعار استفاده کرد. به عنوان مثال، بیایید یک نام مستعار ایجاد کنیم تا همه تغییرات را مرحله بندی کنیم و سپس آنها را با یک دستور واحد انجام دهیم:
$ git config --global alias.commitall '!git add -A && git commit'
در حال حاضر، در حال اجرا git commitall
تمام تغییرات را انجام خواهد داد (git add -A
) و سپس آنها را متعهد کنید و در وقت و زدن کلید صرفه جویی کنید.
Git Branching
شعبهها در Git یک راه قدرتمند برای مدیریت پایگاه کد پروژه شما ارائه میدهند، که امکان توسعه و آزمایش موازی را بدون تأثیر بر پایگاه کد اصلی فراهم میکند.
انشعاب Git به شما امکان می دهد از خط اصلی توسعه، کار منحرف شوید روی ویژگی ها یا اصلاحات، و سپس تغییرات خود را دوباره ادغام کنید. بر خلاف بسیاری از سیستم های کنترل نسخه دیگر، مدل انشعاب Git سبک و کارآمد است و عملیات انشعاب را تقریباً آنی می کند.
Branches در Git چیست؟
شاخه یک اشاره گر سبک وزن و متحرک برای یک commit است. نام شعبه پیشفرض اغلب “master” است، اما خاص نیست – مانند هر شاخه دیگری است.
ایجاد و جابجایی بین شاخه ها به شما امکان می دهد کار کنید روی ویژگی های مختلف به طور همزمان
روش ایجاد یک شعبه جدید در Git:
زمانی که می خواهید شروع به کار کنید روی یک ویژگی جدید یا آزمایش با یک ایده، می توانید یک شاخه جدید در Git ایجاد کنید. این شعبه جدید به عنوان یک خط توسعه جداگانه عمل می کند و به شما امکان می دهد بدون تأثیر بر شاخه اصلی تغییرات ایجاد کنید.
$ git branch new_feature
این دستور یک شاخه جدید به نام “new-feature” ایجاد می کند که به همان commit شعبه فعلی اشاره می کند. شاخه ها می توانند همزیستی داشته باشند و Git یک اشاره گر خاص به نام نگه می دارد HEAD
برای نشان دادن شاخه فعلی
درک شاخه ها
ابتدا، بیایید اصول اولیه شاخه ها را در Git درک کنیم. هنگامی که یک مخزن Git را مقداردهی اولیه می کنید، با یک شاخه پیش فرض شروع می کنید که معمولاً «master» یا «main» نام دارد. شاخه ها اساساً نشانه هایی برای تعهد هستند که شما را قادر به کار می کنند روی ویژگی های مختلف یا به طور مستقل رفع می شود.
برای مشاهده تمام شاخه های موجود در مخزن خود از دستور زیر استفاده کنید:
$ git branch
با این کار لیستی از شاخه ها با ستاره نمایش داده می شود روی نشان دهنده شعبه خارج شده فعلی. برای اطلاعات بیشتر مانند آخرین commit
$ git branch -v
هر شاخه، از:
روش تغییر به شعبه دیگر در Git: git checkout
برای جابجایی به یک شاخه مختلف موجود، استفاده کنید
$ git checkout new_feature
.
این دستور نشانگر ‘HEAD’ را به شاخه ‘new-feature’ تغییر می دهد و آن را به شاخه فعال فعلی تبدیل می کند.
$ git checkout -b <newbranchname>
برای ایجاد و تغییر به یک شاخه جدید در یک عملیات: git switch
در Git نسخه 2.23 به بعد می توانید استفاده کنید git checkout
بجای
- .
git switch existing-branch
جابجایی به یک شعبه موجود: - .
git switch -c new-branch
ایجاد و جابجایی به شعبه جدید:
.
روش تجسم شاخه ها در Git:
$ git log --oneline --decorate --graph --all
پس از ایجاد و تغییر شاخه ها، می توانید ساختار شاخه را با استفاده از:
این دستور یک نمایش مختصر و گرافیکی از تاریخچه commit و نشانگرهای شاخه را نشان می دهد و به شما این امکان را می دهد که ببینید چگونه شاخه ها در طول زمان واگرا می شوند و ادغام می شوند.
روش مدیریت شاخه ها در Git
روش مدیریت شاخه های ادغام شده
$ git branch --merged
همانطور که پروژه شما تکامل می یابد، پس از نهایی شدن تغییرات آنها، شاخه ها را دوباره در شاخه اصلی ادغام خواهید کرد. برای شناسایی شاخه های ادغام شده، اجرا کنید:
$ git branch -d branch_name
این دستور شاخه هایی را فهرست می کند که با موفقیت در شاخه فعلی ادغام شده اند. این شاخه ها به طور کلی با استفاده از موارد زیر قابل حذف هستند:
$ git branch --no-merged
با این حال، برای شاخه هایی که حاوی کار ادغام نشده هستند، از موارد زیر استفاده کنید:
$ git branch -D branch_name
حذف چنین شاخه هایی به پرچم “-D” نیاز دارد:
این تضمین میکند که بهطور ناخواسته تغییرات ادغام نشده را از دست ندهید.
روش تغییر نام شعب
$ git branch --move old_branch_name new_branch_name
برای تغییر نام یک شعبه محلی: روی این دستور نام شعبه را به صورت محلی به روز می کند. برای انعکاس تغییر
$ git push --set-upstream origin new_branch_name
مخزن راه دور، شاخه تغییر نام داده شده را فشار دهید:
$ git branch --all
بررسی تغییرات با استفاده از: روی از حذف شاخه قدیمی اطمینان حاصل کنید
$ git push origin --delete old_branch_name
کنترل:
این یکنواختی را در بین مخازن محلی و راه دور تضمین می کند.
روش تغییر نام شعبه پیش فرض
$ git branch --move master main
تغییر نام شعبه پیشفرض، که اغلب «master» است، نیازمند احتیاط و هماهنگی است، زیرا بر ادغام پروژه و همکاران تأثیر میگذارد.
$ git push --set-upstream origin main
پس از تغییر نام، شاخه به روز شده را به مخزن از راه دور فشار دهید: روی مطمئن شوید که بهروزرسانی مراجع و پیکربندیها را در بین وابستگیها، آزمایشها، اسکریپتها و میزبانهای مخزن به خاطر دارید. پس از اتمام، شاخه اصلی قدیمی را حذف کنید
$ git push origin --delete master
کنترل: این هست $ git config --global init.defaultBranch main
متفاوت از
$ git branch --move master main
که در قسمت پیکربندی به روش های زیر بحث کردیم:$ git config --global init.defaultBranch main
: این دستور شاخه موجود با نام “master” را به “main” در مخزن فعلی تغییر نام می دهد. این یک نوع عملیات محلی است که فقط مخزن را تحت تأثیر قرار می دهد.
: این دستور نام شعبه پیش فرض را برای مخازن جدید در سطح جهانی تنظیم می کند. این شاخههای موجود را تغییر نام نمیدهد، اما تضمین میکند که هر مخزن جدیدی که پس از آن ایجاد میشود، از «main» بهعنوان نام شعبه پیشفرض به جای «master» استفاده میکند.منبع اضافی روی : این منبع رسمی Git را برای تصاویر و نمودارهای آموزنده آن بررسی کنید که می تواند وضوح بیشتری به شما ارائه دهد.
شاخه های راه دور و مفاهیم مدیریت شعب
انشعاب گردش کار
بیایید شاخه ها را با جزئیات بیشتری درک کنیم و به یک گردش کار انشعاب رایج که در پروژه های بزرگ استفاده می شود نگاه کنیم.
شاخه های طولانی مدت:
در Git، شعب طولانی مدت شعبه هایی هستند که در مدت طولانی باز می مانند.
Topic
شاخه های موضوع:Feature
/
شاخه ها شاخه های کوتاه مدتی هستند که برای ویژگی ها یا قطعات کاری خاص ایجاد می شوند. برخلاف شاخههای طولانی مدت که در طول زمان ادامه مییابند، شاخههای موضوعی ایجاد میشوند، استفاده میشوند و اغلب پس از اتمام کار حذف میشوند. مثال: master
بیایید سناریویی را در نظر بگیریم که در آن یک تیم دو شعبه طولانی مدت دارد: develop
و
- .
master
این - شعبه فقط حاوی کدهای پایدار است، احتمالاً آنچه منتشر شده یا منتشر خواهد شد.
develop
این
شعبه به عنوان یک منطقه صحنه سازی برای توسعه مداوم عمل می کند. اگرچه ممکن است همیشه پایدار نباشد، اما به عنوان محل آزمایشی برای ویژگیهای جدید عمل میکند. develop
توسعه دهندگان تغییرات را از شاخه های ویژگی در ادغام می کنند master
شعبه برای آزمایش هنگامی که ویژگی ها به طور کامل آزمایش و پایدار شدند، آنها با هم ادغام می شوند
.
توجه داشته باشید که چگونه تغییرات در سطوح مختلف پایداری پیشرفت میکنند و از کمپایدارترین (شاخههای ویژگی) به سمت با ثباتتر (مانند شاخه توسعه)، حرکت میکنند، زیرا آنها تحت آزمایش و پالایش قرار میگیرند و در نهایت به پایدارترین شاخه اصلی/مستر ادغام میشوند. .
این یک جدایی واضح بین کد پایدار و توسعه را حفظ میکند و تضمین میکند که فقط ویژگیهای کاملاً آزمایششده به نسخه پایدار راه پیدا میکنند.
- بهترین شیوه های شاخه بندیایجاد نام های توصیفی شاخه
- : از نام های شاخه معنی دار استفاده کنید که منعکس کننده هدف یا ویژگی در حال توسعه باشد.شاخه های استفاده نشده را حذف کنید
: هنگامی که یک شعبه به هدف خود رسید و تغییرات آن در شاخه اصلی ادغام شد، آن را حذف کنید تا مخزن تمیز و قابل مدیریت باشد.
Rebasing در Git
در Git، زمانی که با شاخه ها کار می کنید، دو راه اصلی برای ادغام تغییرات از یک شاخه به شاخه دیگر وجود دارد: ادغام و تغییر پایه.
بر خلاف ادغام، که می تواند یک تاریخچه درهم و برهم با چندین تعهد ادغام ایجاد کند، تغییر پایه یک تاریخچه خطی ایجاد می کند و درک توالی تغییرات ایجاد شده در طول زمان را آسان تر می کند.
مثال Basic Rebase: روی تصور کنید در حال کار هستید روی پروژه ای با دو شاخه «ویژگی» و «استاد». شما تعهداتی را انجام داده اید
شاخه “ویژگی” و اکنون می خواهید این تغییرات را با استفاده از rebasing در شاخه “master” ادغام کنید.
$ git checkout feature
ابتدا به شاخه “ویژگی” خود سوئیچ می کنید:
$ git rebase master
سپس، شاخه ویژگی خود را به شاخه اصلی تغییر می دهید: روی این دستور تمام commit ها/تغییراتی را که انجام داده اید را می گیرد روی شاخه “ویژگی” شما و آنها را اعمال می کند
بالای آخرین کامیت ها در شاخه “مستر”، و کامیت ها را یک به یک تکرار می کند.
نه تنها شاخه اصلی، شما همچنین می توانید یک شاخه موضوع را به شاخه موضوع دیگری تغییر دهید. مثال: روی فرض کنید در حال کار هستید روی پروژه ای با دو شاخه ویژگی: “frontend” و “backend”. تعهداتی دادی
شاخه “frontend” و اکنون می خواهید این تغییرات را در شاخه “backend” ادغام کنید.
بیایید این بار از یک رویکرد متفاوت استفاده کنیم – --onto
استفاده کنید git rebase
گزینه از
$ git rebase --onto backend frontend
برای تغییر شاخه “frontend” به شاخه “backend”:
$ git checkout backend
$ git merge frontend
پس از rebasing، به شاخه “backend” برگردید و یک ادغام سریع به جلو انجام دهید:
اکنون، تاریخچه پروژه شما خطی به نظر می رسد و منعکس کننده ادغام متوالی تغییرات از شاخه “frontend” به شاخه “backend” است.
Rebasing در مقابل ادغام: کدام بهتر است؟
- موارد استفاده Rebasing:
- مناسب برای شاخه های ویژگی که نیاز به ادغام تمیز در شاخه اصلی دارند.
برای مشارکتهای منبع باز که در آن تاریخچه تعهد تمیز ارزش دارد، ترجیح داده میشود.
- ادغام موارد استفاده: process مناسب برای محیط های مشارکتی که در آن شفافیت در توسعه پروژه وجود دارد
- تعیین کننده است.
برای پروژه هایی مفید است که در آن حفظ رکورد تاریخی دقیق در اولویت است.
نتیجه
این کتاب راهنمای جامع برای درک و استفاده از Git، یک سیستم کنترل نسخه قدرتمند است که به طور گسترده در توسعه نرم افزار استفاده می شود. processاز گردشهای کاری اولیه گرفته تا راهاندازی یک مخزن، برچسبگذاری و شاخهبندی مخازن راه دور، مجموعه جامعی از ویژگیها را یاد گرفتهایم که به سادهسازی توسعه کمک میکند.
منتشر شده در 1403-04-03 10:48:08