مشخصات مقاله
-
0
-
0.0
-
2202
-
0
-
0
کار با Branch ها در Git
کار با Branch ها در Git
یک Branch در Git، یک نسخه جدید/جداگانه از repository اصلی است.
فرض کنید میخواهید design یک پروژه بزرگ را به روز رسانی کنید.
اگر از Git استفاده نکنید باید:
- از تمام فایل های مرتبط یک کپی تهیه کنید تا کارکرد نسخه در حال کار(live) تحت تاثیر قرار نگیرد.
- شروع به ساخت design کنید و سپس متوجه شوید که کد فایل های دیگر نیز باید تغییر کند!
- از این فایل های جدید هم کپی ایجاد کنید. مطمئن شوید که تمامی فایل های وابسته به فایلی با نام صحیح reference شوند.
- موقعیت اضطراری! یک خطا غیر مرتبط در بخش دیگر از کد ایجاد میشود که باید با سرعت هرچه تمام تر رفع شود!
- تمام فایل های خود را ذخیره کنید، نام کپی های که بر آنها کار کرده اید را هم یادداشت کنید.
- به خطای نامربوط قبل برگردید و کد را به روز رسانی کنید تا مشکل کد برطرف شود.
- به design باز گردید و آن را تمام کنید.
- کد را کپی کنید و یا نام فایل ها را تغییر دهید تا design جدید در نسخه live قرار بگیرد.
- دو هفته بعد متوجه خواهید شد که خطا غیر مرتبط، در design جدید، رفع نشده بود زیرا که کد ها را پیش از رفع خطا کپی کردید.
اگر از Git استفاده میکنید:
- یک Branch جدید به نام new-design بسازید. کد را مستقیما ویرایش کنید( این کار بر branch اصلی تاثیری نخواهد گذاشت).
- موقعیت اضطراری! یک خطا غیر مرتبط در بخش دیگر از کد ایجاد میشود که باید با سرعت هرچه تمام تر رفع شود!
- در پروژه اصلی، یک branch جدید به نام small-error-fix بسازید.
- خطا را رفع کنید و small-error-fix را با branch اصلی ادغام (merge) کنید.
- به design جدید بازگردید، کارتان را در این بخش تمام کنید.
- new-design را با branch اصلی ادغام کنید ( یک هشدار برای خطا غیر مرتبط، که در design جدید فراموش کرده اید، نیز دریافت خواهید کرد).
branch ها به شما اجازه میدهند بر بخش های جداگانه پروژه کار کنید، بدون اینکه تاثیری بر branch اصلی بگذارید.
پس از اینکه کار تغییرات تمام شد، شاخه جدید را با پروژه اصلی merge میکنید.
حتی میتوانید بین branch ها جا به جا شوید و هم زمان بر بخش های مختلفی کار کنید.
branch سازی در Git، بسیار سبک و سریع است.
ساخت Branch جدید در Git
ابتدا بخش های جدیدی به صفحه index.html اضافه میکنیم.
در حال حاضر در repository محلی خود هستیم و نمیخواهیم پروژه اصلی را تغییر دهیم.
پس یک branch جدید میسازیم:
git branch hello-world-images
حالا یک branch جدید به نام hello-world-images ساخته ایم.
سپس باید این branch جدید مان را تایید کنیم:
git branch
hello-world-images
* master
حالا میتوانیم branch جدید با نام “hello-world-images” را ببینیم، اما * موجود در کنار master ، نشان میدهد که در حال حاضر در این branch هستیم.
برای بررسی یک branch، از دستور checkout استفاده میکنیم. این دستور ما را از branch حال حاضر، به branch ای که نامش در انتهای این دستور موجود است میبرد:
git checkout hello-world-images
Switched to branch 'hello-world-images'
حالا از master branch، به branch جدید مان منتقل شده ایم.
editor مورد علاقه خود را باز کنید تا تغییرات لازم را ایجاد کنیم.
در این مثال، ما یک تصویر (img_hello_world.jpg) را به فولدر در حال کار مان اضافه کرده و یک خط کد به فایل index.html مان می افزاییم:
Hello World! Hello world!
This is the first file in my new Git Repo.
A new line in our file!
حالا ما تغییرات لازم را انجام داده ایم و فایل جدید را به دایرکتوری در حال کار اضافه کرده ایم ( همان دایرکتوری که main branch در آن قرار دارد).
حالا وضعیت branch حال حاضر مان را بررسی میکنیم:
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: index.html Untracked files: (use "git add ..." to include in what will be committed) img_hello_world.jpg no changes added to commit (use "git add" and/or "git commit -a")
حالا بیایید ببینم تا به حال چه کرده ایم:
- تغییراتی در index.html ایجاد شده اما فایل ها stage نشده اند.
- img_hello_world.jpg که اضافه کردیم، track شده نیست.
پس باید هر دو فایل را به محیط stage این branch اضافه کنیم:
git add --all
با استفاده از - - all ، به جای stage کردن تکی با نام، تمام تغییرات stage خواهد شد ( حذف شده، جدید و ویرایش).
وضعیت branch را بررسی میکنیم:
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged ..." to unstage) new file: img_hello_world.jpg modified: index.html
از تغییررات مان راضی هستیم پس به سراغ مرحله commit میرویم:
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
حالا یک branch جدید داریم که با master branch متفاوت است.
با استفاده از گزینه ی -b در checkout، یک branch جدید ایجاد کرده و وارد آن میشویم.
جا به جایی بین branch ها
حالا جا به جایی و کار هم زمان با چند branch را بررسی میکنیم، که بسیار ساده است.
در حال حاضر در branch ، hello-world-images هستیم. یک تصویر به این branch اضافه میکنیم و فایل های این دایرکتوری را مشاهده میکنیم:
README.md bluestyle.css img_hello_world.jpg index.html
فایل img_hello_world.jpg را مشاهده میکنیم، حالا اگر فایل html را باز کنیم، میتوانیم تغییرات ایجاد شده در کد را نیز مشاهده کنیم.
حالا به master branch باز میگردیم:
git checkout master
Switched to branch 'master'
تصویر جدید در این branch وجود ندارد، لیست فایل های branch را مشاهده کنید:
ls
README.md bluestyle.css index.html
img-hello-world.jpg دیگر اینجا نیست! و اگر فایل html را باز کنید متوجه میشوید که به حالت قبل از تغییرات باز گشته است.
Emergency Branch
فرض کنید کنید که کارمان با hello-world-images تمام نشده و باید یک خطا را در master branch رفع کنیم.
معمولا مستقیما بر mater branch تغییری ایجاد نمی کنیم و در اینجا نمیخواهیم hello-world-images را نیز تغییر دهیم.
پس باید یک branch جدید بسازیم تا شرایط اضطراری ایجاد شده را رفع کنیم:
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
با دستور بالا یک branch جدید از master ایجاد کرده ایم و در آن قرار گرفته ایم. پس میتوانیم با خیال راحت، بدون تغییری در بقیه branch ها، تغییرات لازم را انجام دهیم.
حالا بیایید خطا فرضی مان را رفع کنیم:
Hello World! Hello world!
This is the first file in my new Git Repo.
This line is here to show how merging works.
پس از ایجاد تغییرات در این فایل، باید این تغییرات را در master نیز اعمال کنیم.
وضعیت را بررسی کنید:
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
فایل را stage و سپس commit کنید:
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
حالا آماده ی ایجاد تغییرات در master و ادغام (merge) دو branch هستیم.
