تصویر محمدعلی اکبری

برای توضیح شاخه بندی و ادغام شاخه ها یک سناریو را مورد بررسی قرار می‌دهیم.

من و مهندس شیرین در حال کار کردن روی پروژه طرفداری هستیم. همانند دیگر پروژه‌های زنده‌ی IT در این پروژه نیز یک سری بهبود‌ها و اصلاحات خرد وجود دارد. علاوه بر این اصلاحات خرد قرار است برای جام جهانی قالب گرافیکی تغییر کند و برخی ویژگی‌ها به کل جایگزین شوند.

شاخه‌ای که روی سرور در حالت production قرار دارد شاخه master است. برای ایجاد تغییرات عمده برای جام جهانی من یک شاخه با نام iss53 ایجاد می‌کنم.

$ git checkout -b iss53
Switched to a new branch 'iss53'

بعد از چند کامیت در iss53 یک باگ حساس در شبکه کشف می‌شود. برای رفع این باگ حیاتی یک hotfix لازم است. این Issue به شیرین انتصاب داده شده است. خانوم مهندس برای رفع این خطا یک شاخه با نام hotfix ایجاد کرده است، اصلاحات را انجام داده و بعد از آزمایش hotfix آن را با master ادغام می‌کند. از آنجا که شاخه hotfix دقیقا چند کامیت از master جلو است، کافی است برای ادغام ابتدا به master برود و سپس آن را با hotfix ادغام کند. در این حالت GIT اشاره گر HEAD را تا آخرین کامیت شاخه hotfix جلو میبرد. به این حالت Fast forward می‌گوییم.

$ git checkout -b hotfix
// some changes
$ git chekout master
$ git merge hotfix

سپس کافی است شاخه hotfix را که دیگر به آن نیازی نیست پاک کند:

$ git ckeckout -d hotfix

حالا تغییرات عمده قالب گرافیکی به اتمام رسیده است. اما موضوع این است که آخرین کامیت مشترک با شاخه master دیگر آخرین کامیت master نیست. لذا عملیات ادغام به صورت خودکار با آخرین کامیت مشترک باید انجام شود.

$ git checkout master
$ git merge iss53
Auto-merging
README Merge made by the 'recursive' strategy.
README | 1 + 1 file changed, 1 insertion(+)

بعد از ادغام شاخه iss53 را نیز پاک میکنیم.

$ git branch -d iss53

در صورتی که ادغام خودکار با مشکل رو به رو شد، باید کار ادغام را به صورت دستی انجام دهیم. برای این کار دستور git status فایل‌هایی که نیاز به ادغام دارند را نشان خواهد داد.

یک سری کدهای راهنما برای ادغام دستی در فایل های مذکور اضافه شده است.

<<<<<<< HEAD
<div id="footer">
  contact : [email protected]
</div>
=======
<div id="footer">
  please contact us at [email protected]
</div>
>>>>>>> iss53

آنچه بالای ======= است، از شاخه master و زیر آن از شاخه iss53 آمده است. بعد از تصحیح تداخل‌ها با دستور git add فایل‌های تصحیح شده را اضافه میکنیم. سپس با یک کامیت به کار ادغام خاتمه می‌دهیم.

طبقه بندی: 

دیدگاه‌ها

تصویر سعید قره داغی

سعید قره داغی (تایید نشده)

با سلام و عرض ادباگه سرور مون لینوکس باشه ولی یوزر ها ویندوزی باشن دیگه احتیاجی به CopSSH نیست؟

اصلا این CopSSH برای چی استفاده می کنن؟

بر اساس این لینک
http://git-scm.com/book/en/Git-on-th...-The-Protocols

خودش گفته که از Http پشتیبانی میکنن پس جه دلیلی به SSH هست تو ویندوز

معادل COPSSH ریگان نرم افزاری وجود نداره؟

یه سوال دیگه اگه کلاینت ها ویندوزی باشن شما صلاح میدونین سرور گیت ، لینوکس باشه یا ویندوزی و کدوم راحت تر و بهتره ؟

افزودن نظر جدید