
សេវាឥណទាន
ភ្នំពេញប៉ុស្តិ៍នេះជាឯកសារដើមរបស់ព័រទុយហ្កាល់, នៅក្នុងភាសាអង់គ្លេស, “មួយម៉ូដែលសាខា Git ដែលទទួលបានជោគជ័យ“, ត្រូវបានអនុញ្ញាតដោយអ្នកនិពន្ធ, វ៉ាំងសង់វីសថេនសិន. អរគុណបុរស!
សម្រាប់ហេតុផលបច្ចេកទេស, ពាក្យគន្លឹះមួយចំនួនត្រូវបានរក្សាទុកជាភាសាអង់គ្លេស. ខ្ញុំបានព្យាយាមធានានូវភាពដើមនៃអត្ថបទ, ប៉ុន្តែខ្ញុំសារភាពថាខ្ញុំត្រូវតែធ្វើការកែតម្រូវដើម្បីជួយសម្រួលដល់ការយល់ដឹងជាភាសារបស់យើង (ភី - ប៊ី). សូមស្វាគមន៍ចំពោះការកែតម្រូវឬសំណូមពរដើម្បីកែលម្អការបកប្រែ.
សេចក្តីផ្តើម
នេះមិនមែនជាការបង្រៀនភ្នំពេញប៉ុស្តិ៍ពីរបៀបប្រើហ្គីតទេ. ប្រសិនបើនេះជាអ្វីដែលអ្នកត្រូវការ, ខ្ញុំស្នើឱ្យមើល សៀវភៅដៃធ្វើហ្គីត. ហើយក៏មិនមែនជាគោលដៅរបស់យើងដើម្បីបង្ហាញអ្នកពីរបៀបធ្វើកំណែសូហ្វវែរដែរ, ក្នុងករណីនេះ, រកមើល ការផ្លាស់ប្តូរស៊ីមេទ្រី.
នៅទីនេះសំណើរនេះគឺដើម្បីគ្រប់គ្រងការសហការរបស់ក្រុមក្នុងការបង្កើតសូហ្វវែរ. ដឹងថាពេលណាអ្នកមានអ្នកសរសេរកម្មវិធីច្រើន “ការផ្លាស់ប្តូរ” ក្នុងកូដប្រភពតែមួយ? នេះមានសារៈសំខាន់ក្នុងការពន្លឿនការអភិវឌ្ឍន៍, ប៉ុន្តែវាអាចធ្វើអោយឈឺក្បាលបានច្រើន (ការបាត់បង់និងដំណើរការឡើងវិញ) ប្រសិនបើមិនមានការត្រួតពិនិត្យ. ដើម្បីរារាំងអ្នកអភិវឌ្ឍន៍ម្នាក់ពីការសរសេរជាន់លើការងាររបស់អ្នកផ្សេងនិងធានាការអភិវឌ្ឍរីកចម្រើននិងរៀបចំ, កាត់បន្ថយទំនាស់និងការគ្រប់គ្រងកំណែសូហ្វវែរ, គឺថាយើងប្រើ Git និង សាខា ដើម្បីអនុវត្តតាម.
គំរូសាខា
នៅក្នុងប្រកាសនេះខ្ញុំសូមបង្ហាញនូវគំរូនៃការអភិវឌ្ឍន៍ដែលខ្ញុំបានប្រើនៅក្នុងគំរោងមួយចំនួនរបស់ខ្ញុំ (ទាំងនៅកន្លែងធ្វើការនិងឯកជន) ជិត 1 ឆ្នាំមុន, ហើយនោះទទួលបានជោគជ័យយ៉ាងខ្លាំង. ខ្ញុំចង់សរសេរអំពីវាអស់រយៈពេលជាយូរមកហើយ, ប៉ុន្តែខ្ញុំមិនដែលរកឃើញពេលវេលាទំនេរទេ, សែនឆ្ងាយ. ខ្ញុំនឹងមិននិយាយអំពីព័ត៌មានលម្អិតរបស់គម្រោងទេ, គ្រាន់តែអំពីយុទ្ធសាស្រ្តសម្រាប់ សាខា និងការគ្រប់គ្រង ចេញផ្សាយ.

ម៉ូដែលត្រានេះទាំងស្រុងមិនមានទេ ហ្គីត ជាឧបករណ៍សម្រាប់ធ្វើកំណែកូដប្រភពរបស់យើងទាំងអស់. (តាមគោលបំណង, ប្រសិនបើអ្នកចាប់អារម្មណ៍ Git, ក្រុមហ៊ុនរបស់យើង GoPrime ផ្តល់ជូន, ពេលវេលាពិតប្រាកដ, ការវិភាគទិន្នន័យមិនគួរឱ្យជឿមួយចំនួនសម្រាប់ការបង្កើនប្រសិទ្ធភាពវិស្វកម្មផ្នែកទន់)
ហេតុអ្វីបានជាហ្គ្រីត?
សម្រាប់ការពិភាក្សាហ្មត់ចត់អំពីគុណសម្បត្តិនិងគុណវិបត្តិរបស់ហ្គីតបើប្រៀបធៀបទៅនឹងប្រព័ន្ធគ្រប់គ្រងប្រភពកណ្តាល, រកមើល មួយ គេហទំព័រ. មានយ៉ាងខ្លាំង “សង្គ្រាម” នៅជុំវិញនោះ. ក្នុងនាមជាអ្នកអភិវឌ្ឍន៍, ខ្ញុំចូលចិត្ត Git ជាងឧបករណ៍ផ្សេងទៀតទាំងអស់ដែលមានសព្វថ្ងៃ. ហ្គីតបានផ្លាស់ប្តូរដោយមិនសង្ស័យនូវវិធីដែលអ្នកអភិវឌ្ឍន៍គិតអំពីការបង្កើត បញ្ចូលគ្នា ឬបង្កើតមួយ សាខា. ខ្ញុំមកពីពិភពបុរាណនៃ CVS / Subversion, កន្លែងណា បញ្ចូលគ្នា / សាខា វាជាអ្វីដែលអ្នកធ្វើបានតែម្ដងប៉ុណ្ណោះហើយវាមើលទៅគួរអោយខ្លាចបន្តិច (“ប្រយ័ត្នជម្លោះទំនាស់ផលប្រយោជន៍ បញ្ចូលគ្នា, ពួកគេខាំអ្នក!”).
ជាមួយហ្គីតសកម្មភាពទាំងនេះ [បញ្ចូលគ្នា / សាខា] គឺសាមញ្ញណាស់ហើយតំណាងអោយផ្នែកសំខាន់មួយនៃទម្លាប់ការងាររបស់យើង, ជឿ. ឧទាហរណ៍, ទេ សៀវភៅ ស៊ី។ អេ។ អេ។ / វិ, សាខា អ៊ី ការរួមបញ្ចូលគ្នា ត្រូវបានគ្របដណ្តប់ជាលើកដំបូងតែនៅក្នុងជំពូកបន្ទាប់ (សម្រាប់អ្នកប្រើកម្រិតខ្ពស់), ខណៈពេលដែលនៅក្នុងណាមួយ សៀវភៅនៅលើជី, នេះត្រូវបានគេមើលឃើញនៅក្នុងជំពូក 3 (មូលដ្ឋាន).
ជាផលវិបាកនៃភាពសាមញ្ញនិងលក្ខណៈច្រំដែលរបស់វា, សាខា អ៊ី ការរួមបញ្ចូលគ្នា លែងជាអ្វីដែលត្រូវខ្លាចហើយ. ជាការពិត, ឧបករណ៍ត្រួតពិនិត្យកំណែគួរតែជួយបង្កើតបញ្ចូលគ្នា និងបង្កើត សាខា លើសពីអ្វីទាំងអស់.
និយាយឱ្យបានគ្រប់គ្រាន់, តោះទៅគំរូអភិវឌ្ឍន៍. គំរូដែលខ្ញុំនឹងបង្ហាញនៅទីនេះគឺមិនមានអ្វីក្រៅពីសំណុំបែបបទដែលសមាជិកក្រុមនីមួយៗត្រូវតែអនុវត្តដើម្បីឈានដល់ដំណើរការអភិវឌ្ឍន៍កម្មវិធីដែលបានគ្រប់គ្រង.
វិមជ្ឈការ, ប៉ុន្តែនៅកណ្តាល
ការកំណត់រចនាសម្ព័ន្ធឃ្លាំងដែលយើងប្រើហើយដំណើរការបានល្អជាមួយគំរូនៃគំរូនេះ សាខា មានឃ្លាំងកណ្តាល. ចំណាំថាឃ្លាំងនេះមានតែ “យកជា” កណ្តាល (ព្រោះហ្គីតជាឌី។ ឌី។ ស៊ី [ចែកចាយប្រព័ន្ធត្រួតពិនិត្យជំនាន់], នៅក្នុងពាក្យផ្សេងទៀត, មិនមានអ្វីដូចជាឃ្លាំងកណ្តាលនៅកម្រិតបច្ចេកទេសទេ). យើងនឹងយោងទៅឃ្លាំងនេះ ប្រភពដើម, ដោយសារឈ្មោះនេះស៊ាំទៅនឹងអ្នកប្រើប្រាស់ Git ទាំងអស់.

អ្នកអភិវឌ្ឍន៍នីមួយៗធ្វើ ទាញ អ៊ី រុញ ទៅ ប្រភពដើម. ប៉ុន្តែលើសពីទំនាក់ទំនង ជំរុញ - ទាញ សម្រាប់មជ្ឈិម [ប្រភពដើម], អ្នកអភិវឌ្ឍន៍នីមួយៗក៏អាចលើកយកបានដែរ [ទាញ] ផ្លាស់ប្តូរពីគូផ្សេងទៀតដើម្បីបង្កើតជាអនុរង. ឧទាហរណ៍, នេះអាចមានប្រយោជន៍សម្រាប់ធ្វើការរួមគ្នាជាមួយអ្នកអភិវឌ្ឍន៍ពីររឺច្រើននាក់លើមុខងារថ្មីដ៏អស្ចារ្យ, ផ្ញើពីមុន [ជំរុញ] កំពុងដំណើរការសម្រាប់ឯកសារ ប្រភពដើម. នៅក្នុងរូបភាពខាងលើ, មានអនុរងរបស់អាលីសនិងលោក Bob, អាលីសអ៊ី David, អ៊ីក្លែរនិងដាវីឌ.
បច្ចេកទេស, នេះមានន័យថាគ្មានអ្វីក្រៅពីអាលីសបានកំណត់ហ្គីតពីចម្ងាយដែលហៅថាបូ, ចង្អុលទៅឃ្លាំងរបស់លោក Bob, និងច្រាសមកវិញ.
សាខាសំខាន់ៗ
នៅផ្ទៃខាងក្រោយ, គំរូនៃការអភិវឌ្ឍនេះត្រូវបានជំរុញដោយគំរូដែលមានស្រាប់នៅទីនោះ. ឃ្លាំងកណ្តាលមានពីរសាខា [សាខា] នាយកសាលាជាមួយនឹងជីវិតដែលគ្មានទីបញ្ចប់:
- មេ
- អភិវឌ្ឍ
នេះ មេសាខា ក្នុង ប្រភពដើម គួរស្គាល់អ្នកប្រើ Git ទាំងអស់. ប៉ារ៉ាឡែលទៅ មេសាខា, មានមួយទៀត សាខា បានហៅ អភិវឌ្ឍ.
យើងពិចារណា ប្រភពដើម / មេ ជាសាខាដ៏សំខាន់ដែលជាប្រភពកូដនៃ HEAD តែងតែឆ្លុះបញ្ចាំងពីរដ្ឋ ផលិតកម្មត្រៀមខ្លួនជាស្រេច [ត្រៀមខ្លួនសម្រាប់ផលិតកម្ម].
យើងពិចារណា ដើមកំណើត / អភិវឌ្ឍ ក្នុងនាមជា សាខា កន្លែងដែលកូដប្រភពរបស់ HEAD តែងតែឆ្លុះបញ្ចាំងពីរដ្ឋមួយដែលមានការផ្លាស់ប្តូរការអភិវឌ្ឍន៍ចុងក្រោយដែលត្រូវផ្តល់ជូននៅក្នុងជំនាន់បន្ទាប់. អ្នកខ្លះនឹងហៅវា “សាខា នៃការធ្វើសមាហរណកម្ម”. នេះគឺជាកន្លែងដែលការស្ថាបនាដ៏សាហាវបំផុតកើតឡើង.
នៅពេលកូដប្រភពចូល សាខាអភិវឌ្ឍ ឈានដល់ចំណុចមួយដែលមានស្ថេរភាពនិងត្រៀមខ្លួនជាស្រេចដើម្បីចាប់ផ្តើម [បានចេញផ្សាយ], រាល់ការផ្លាស់ប្តូរត្រូវតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ត្រឡប់ទៅ មេសាខា ហើយបន្ទាប់មកត្រូវបានសម្គាល់ដោយលេខកំណែ [ការដោះលែង]. វិធីនេះត្រូវបានធ្វើយ៉ាងលម្អិត, នឹងត្រូវពិភាក្សានៅពេលក្រោយ.
ហេតុនេះហើយបានជា, រាល់ការផ្លាស់ប្តូរត្រូវបានដាក់បញ្ចូល [បញ្ចូលគ្នា] ត្រលប់ទៅ មេ, កំណែថ្មីត្រូវបានបង្កើត [បានចេញផ្សាយ], តាមនិយមន័យ. យើងព្យាយាមយ៉ាងម៉ឺងម៉ាត់អំពីវា, បន្ទាប់មក, តាមទ្រឹស្តី, យើងថែមទាំងអាចប្រើស្គ្រីបទៀតផង ទំពក់ ពី Git ដើម្បីបង្កើតនិងអាប់ឡូតកម្មវិធីរបស់យើងទៅម៉ាស៊ីនមេផលិតកម្មនៅពេលណាដែលមាន ប្តេជ្ញា ទេ មេ.
សាខាជំនួយ
ក្រៅពីនេះ សាខា មេ, មេ អ៊ី អភិវឌ្ឍ, គំរូអភិវឌ្ឍន៍របស់យើងប្រើប្រភេទផ្សេងៗគ្នា សាខា ជួយដល់ការអភិវឌ្ឍដំណាលគ្នាក្នុងចំណោមសមាជិកក្រុម, អ្វី 1) សម្របសម្រួលការតាមដាននៃមុខងារថ្មីៗ [លក្ខណៈពិសេស], 2) រៀបចំសំរាប់ចែកចាយជំនាន់ថ្មី [ការដោះលែង] អ៊ី 3) ជួយកែតំរូវការបរាជ័យនៃផលិតកម្ម [hotfix]. មិនដូច សាខា មេ, estes សាខា មានអាយុកាលខ្លី, ដូចដែលពួកគេនឹងត្រូវដកចេញជាយថាហេតុ.
ប្រភេទផ្សេងៗគ្នា សាខា [ជំនួយការ] តើយើងអាចប្រើអ្វីបាន, គឺ:
- សាខាពិសេស
- បញ្ចោញសាខា
- សាខា Hotfix
ទាំងនេះនីមួយៗ សាខា មានគោលបំណងជាក់លាក់ហើយត្រូវបានចងភ្ជាប់ដោយច្បាប់តឹងរឹង, ដូច្នេះ, សាខា អាចផ្តល់ឱ្យកើនឡើង សាខា គឺថា សាខា ត្រូវតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ដើម្បីគោលដៅរបស់អ្នក. យើងនឹងឃើញពួកគេម្នាក់ៗ [សាខា] ក្នុងមួយរំពេច.
តាមទស្សនៈបច្ចេកទេស, ទាំងនោះ សាខា មិនត្រូវបានពិចារណា “ពិសេស”. ប្រភេទនីមួយៗនៃ សាខា ត្រូវបានចែកប្រភេទតាមរបៀបដែលយើងប្រើពួកវា. ទីបំផុត, គឺគ្រាន់តែសាមញ្ញ សាខា នៃហ្គីតចាស់ល្អ.
សាខាពិសេស
– អាចសាខា [សាខា] ពី:
អភិវឌ្ឍ
– វាគួរតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ជាថ្មីម្តងទៀតនេះ:
អភិវឌ្ឍ
– ការដាក់ឈ្មោះអនុសញ្ញា សាខា:
អ្វីទាំងអស់, លើកលែងតែ មេ, អភិវឌ្ឍ, ការដោះលែង - *, ឬ hotfix- *
នេះ លក្ខណៈពិសេសសាខា (ឬពេលខ្លះគេហៅ សាខាប្រធានបទ) ត្រូវបានប្រើដើម្បីអភិវឌ្ឍលក្ខណៈពិសេស / មុខងារថ្មីៗសម្រាប់ការចេញផ្សាយនាពេលអនាគតឬអនាគត. នៅពេលចាប់ផ្តើមការអភិវឌ្ឍន៍ក លក្ខណៈពិសេស, កំណែគោលដៅដែលលក្ខណៈពិសេសនេះនឹងត្រូវបានដាក់បញ្ចូលអាចមិនត្រូវបានគេដឹងនៅពេលនេះទេ.
ខ្លឹមសារនៃក លក្ខណៈពិសេសសាខា គឺថាវាមានខណៈពេលដែល លក្ខណៈពិសេស គឺស្ថិតនៅក្នុងការអភិវឌ្ឍន៍, ប៉ុន្តែនៅទីបំផុតវានឹងត្រូវបានបញ្ចូល [បញ្ចូលគ្នា] ត្រលប់ទៅ អភិវឌ្ឍ (ដើម្បីបន្ថែមថ្មី លក្ខណៈពិសេស ទៅបន្ទាប់ ការដោះលែង) ឬបោះបង់ចោល (ក្នុងករណីមានការពិសោធន៍មិនបានជោគជ័យ).
សាខាពិសេស ជាទូទៅមានតែនៅក្នុងឃ្លាំងប៉ុណ្ណោះ អភិវឌ្ឍ, មិននៅក្នុង ប្រភពដើម.
ការបង្កើតសាខាលក្ខណៈពិសេស
$ git checkout -ខ myfeature អភិវឌ្ឍ # Switched to a new branch "myfeature" |
បញ្ចូលមុខងារដែលបានបញ្ចប់ទៅអភិវឌ្ឍ
លក្ខណៈពិសេស បញ្ចប់អាចត្រូវបានបញ្ចូលគ្នា[បញ្ចូលគ្នា] ជា សាខាអភិវឌ្ឍ ដើម្បីបន្ថែមពួកគេទៅមួយបន្ទាប់ទៀត ការដោះលែង.
$ git checkout អភិវឌ្ឍ # ប្តូរទៅសាខា 'អភិវឌ្ឍ' $ ទៅចូលគ្នា --ទេ-ff myfeature # ធ្វើឱ្យទាន់សម័យ ea1b82a..05e9557 # (សេចក្តីសង្ខេបនៃការផ្លាស់ប្តូរ) # $ សាខា git -d myfeature # សាខាដែលបានលុបចោល (គឺ ០៥e៩៥៥៧). $ ប្រភពដើមជំរុញ git អភិវឌ្ឍ |
ទង់មួយ –no-ff បណ្តាលឱ្យបញ្ចូលគ្នា [បញ្ចូលគ្នា] បង្កើតថ្មីជានិច្ច ប្តេជ្ញា, ទោះបីជាការបញ្ចូលគ្នាអាចត្រូវបានអនុវត្តជាមួយក ទៅមុខយ៉ាងលឿន [ff]. វាចៀសវាងការបាត់បង់ព័ត៌មានអំពីប្រវត្តិនៃអត្ថិភាពរបស់ក សាខាពិសេស, ដាក់ជាក្រុមទាំងអស់ ប្រព្រឹត្ត ដែលត្រូវបានបន្ថែមទៅ លក្ខណៈពិសេស. ប្រៀបធៀប:

មិនមែនជាករណីចុងក្រោយទេ [នៃតួលេខខាងលើ], វាមិនអាចទៅរួចទេក្នុងការមើលពីប្រវត្តិជីជី ប្រព្រឹត្ត ត្រូវបានអនុវត្តនៅក្នុងក លក្ខណៈពិសេស; អ្នកត្រូវអានសារកំណត់ហេតុទាំងអស់ដោយដៃ. ត្រឡប់ក លក្ខណៈពិសេស ទាំងមូល (នៅក្នុងពាក្យផ្សេងទៀត, ក្រុមនៃ ប្រព្រឹត្ត), វាជាការឈឺក្បាលយ៉ាងពិតប្រាកដនៅក្នុងស្ថានភាពចុងក្រោយ, ខណៈពេលដែលវាត្រូវបានធ្វើបានយ៉ាងងាយប្រសិនបើទង់ –no-ff ត្រូវបានប្រើ.
ស៊ីម, នេះនឹងបង្កើតវត្ថុមួយចំនួនបន្ថែមទៀតនៃ ប្រព្រឹត្ត (ទទេ), ប៉ុន្តែការចំណេញគឺធំជាងថ្លៃដើមទៅទៀត.
បញ្ចោញសាខា
– អាចសាខា [សាខា] ពី:
អភិវឌ្ឍ
– វាគួរតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ជាថ្មីម្តងទៀតនេះ:
អភិវឌ្ឍ អ៊ី មេ
– ការដាក់ឈ្មោះអនុសញ្ញា សាខា:
ការដោះលែង - *
នេះ ចេញសាខា ជួយក្នុងការរៀបចំជំនាន់ផលិតកម្មថ្មី [ការចេញផ្សាយផលិតកម្ម]. ពួកគេអនុញ្ញាតឱ្យអ្នកដាក់ដំណក់ទឹកនៅនាទីចុងក្រោយ. លើសពីនេះទៅទៀត, ពួកគេបានអនុញ្ញាតឱ្យកែតម្រូវតូចមួយនៃ កំហុស និងនិយមន័យនៃ ទិន្នន័យមេតា សម្រាប់ ការដោះលែង (លេខកំណែ, កាលបរិច្ឆេទចងក្រង, ល). ដោយធ្វើកិច្ចការទាំងអស់នេះក្នុងមួយ សាខាចេញ, នេះ បង្កើតសាខា រក្សាភាពស្អាតស្អំដើម្បីទទួល លក្ខណៈពិសេស ធំបន្ទាប់ ការដោះលែង [កំណែ].
ពេលវេលាសំខាន់ដើម្បីបង្កើតថ្មី សាខាចេញ សាខាពី អភិវឌ្ឍ គឺនៅពេលដែល អភិវឌ្ឍ វារួចទៅហើយ (ស្ទើរតែ) ឆ្លុះបញ្ចាំងពីស្ថានភាពដែលចង់បានរបស់ថ្មី ការដោះលែង [កំណែ]. ទាំងអស់ លក្ខណៈពិសេស បេក្ខជនសម្រាប់ ការដោះលែង ត្រូវបានសាងសង់ត្រូវតែបញ្ចូល [បញ្ចូលគ្នា] ទៅ អភិវឌ្ឍ នៅពេលនេះ. នេះ លក្ខណៈពិសេស ប្រឈមមុខ ចេញផ្សាយ អនាគតគួរតែរំពឹងថានឹងមានបន្ទាប់ ការដោះលែង [កំណែ].
វាពិតជានៅដើមដំបូងនៃក សាខាចេញ បន្ទាប់ ការដោះលែង ទទួលបានលេខកំណែ – មិនមែនពីមុនទេ. រហូតមកដល់ពេលនេះ, នេះ បង្កើតសាខា បានឆ្លុះបញ្ចាំងពីការផ្លាស់ប្តូរ “ការចេញផ្សាយបន្ទាប់” [កំណែបន្ទាប់], ប៉ុន្តែវាមិនច្បាស់ទេថាតើនេះ “កំណែបន្ទាប់” វានឹងបញ្ចប់ 0.3 ឬ 1.0, រហូតដល់ សាខាចេញ ចាប់ផ្តើម. ការសម្រេចចិត្តនេះត្រូវបានធ្វើឡើងនៅដើមនៃព្រះគម្ពីរមរមន សាខាចេញ និងត្រូវបានអនុវត្តដោយច្បាប់គម្រោងនៅលើកំណែ [ស្នើឱ្យមើលអំពី “ការផ្លាស់ប្តូរស៊ីមេទ្រី“].
ការបង្កើតសាខាដោះលែង
នេះ ចេញសាខា ត្រូវបានបង្កើតចេញពីឯកសារ បង្កើតសាខា. ឧទាហរណ៍, តោះនិយាយជំនាន់ 1.1.5 គឺជាជំនាន់ផលិតកម្មបច្ចុប្បន្នហើយយើងមានភាពអស្ចារ្យ ការដោះលែង មកដល់. ឬស្ថានភាពនៃ អភិវឌ្ឍ វាជាការត្រៀមខ្លួនជាស្រេចសម្រាប់មួយ “កំណែបន្ទាប់” [ការចេញផ្សាយបន្ទាប់] ហើយយើងបានសំរេចថាវានឹងក្លាយជាជំនាន់ 1.2 (ជាជាង 1.1.6 ឬ 2.0). បន្ទាប់មក, យើងចែកចេញនិងផ្តល់ឱ្យ សាខាចេញ ឈ្មោះដែលឆ្លុះបញ្ចាំងពីលេខកំណែថ្មី:
$ git checkout -ខ-1.2 អភិវឌ្ឍ # Switched to a new branch "release-1.2" $ ./រលាក់-ជំនាន់.sh 1.2 # ឯកសារត្រូវបានកែប្រែដោយជោគជ័យ, កំណែបានបុកទៅ 1.2. $ git ប្តេជ្ញាចិត្ត -មួយ -m "Bumped version number to 1.2" # [release-1.2 74d9424] វាយលេខកំណែទៅ 1.2 # 1 បានផ្លាស់ប្ដូរឯកសារ, 1 ការបញ្ចូល(+), 1 ការលុប(-) |
បន្ទាប់ពីបង្កើតថ្មី សាខា ហើយចូលប្រើវា, យើងចូលទៅក្នុងលេខកំណែ. នៅទីនេះ, bump-version.sh គឺជាស្គ្រីបសែលដែលផ្លាស់ប្តូរឯកសារចំលងដែលដំណើរការដើម្បីឆ្លុះបញ្ចាំងពីជំនាន់ថ្មី. (កំប៉ុងនេះ, ច្បាស់ណាស់, ជាការផ្លាស់ប្តូរដោយដៃ – ចំណុចគឺថាឯកសារខ្លះផ្លាស់ប្តូរ។) បន្ទាប់មក, ត្រូវបានធ្វើរួច ប្តេជ្ញា លេខកំណែដែលបានកែប្រែ.
ថ្មីនេះ សាខា អាចមាននៅទីនោះមួយរយៈ, រហូតដល់ ការដោះលែង ត្រូវបានដោះលែងយ៉ាងច្បាស់លាស់. ក្នុងអំឡុងពេលនេះ, ការកែកំហុសអាចត្រូវបានអនុវត្តនៅក្នុងនេះ សាខា (ជំនួសអោយ បង្កើតសាខា). ការបន្ថែមថ្មីនិងធំ លក្ខណៈពិសេស នៅទីនេះត្រូវបានហាមឃាត់យ៉ាងតឹងរ៉ឹង. ពួកគេត្រូវតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ក្នុង អភិវឌ្ឍ អ៊ី, ដូចនេះ, រង់ចាំសម្រាប់ធំបន្ទាប់ ការដោះលែង.
បញ្ចប់សាខាដោះលែង
នៅពេលដែល សាខាចេញ ត្រៀមខ្លួនជាស្រេចដើម្បីក្លាយជាកំណែពិត, សកម្មភាពខ្លះត្រូវធ្វើ. ដំបូង, នេះ សាខាចេញ ត្រូវបានបញ្ចូលទៅក្នុង មេ (ចាប់តាំងពីគ្នា ប្តេជ្ញា ទេ មេ គឺជាកំណែថ្មីតាមនិយមន័យ, ចាំថាប្រសិនបើ). បន្ទាប់មក, នោះ ប្តេជ្ញា ទេ មេ គួរតែត្រូវបានពិនិត្យដើម្បីសម្រួលដល់ឯកសារយោងនាពេលអនាគត. ទីបំផុត, ការផ្លាស់ប្តូរដែលបានធ្វើចំពោះឯកសារ សាខាចេញ ត្រូវការបញ្ចូលចូលគ្នា [បញ្ចូលគ្នា] ជាថ្មីម្តងទៀតសម្រាប់ អភិវឌ្ឍ, ដូច្នេះថា ចេញផ្សាយ អនាគតក៏មានផងដែរនូវការកែកំហុសទាំងនេះ.
ជំហានពីរដំបូងនៅហ្គីត:
$ មេឆែកហ្គ្រីត # ប្តូរទៅសាខា 'មេ' $ ទៅចូលគ្នា --ទេ-ff ការចេញផ្សាយ-1.2 # បញ្ចូលគ្នាបង្កើតឡើងដោយការហៅខ្លួនឯង. # (សេចក្តីសង្ខេបនៃការផ្លាស់ប្តូរ) $ ស្លាក git -មួយ 1.2 |
នេះ ការដោះលែង ឥឡូវត្រូវបានបញ្ចប់និងគ្រោងសម្រាប់ជាឯកសារយោងនាពេលអនាគត.
ការកត់សម្គាល់: អ្នកក៏អាចប្រើទង់ -s ឬ -u
ដើម្បីរក្សាការផ្លាស់ប្តូរដែលបានធ្វើចំពោះឯកសារ សាខាចេញ, យើងត្រូវដាក់វាបញ្ចូលគ្នាវិញ អភិវឌ្ឍ. គ្មាន Git:
$ git checkout អភិវឌ្ឍ # ប្តូរទៅសាខា 'អភិវឌ្ឍ' $ ទៅចូលគ្នា --ទេ-ff ការចេញផ្សាយ-1.2 # បញ្ចូលគ្នាបង្កើតឡើងដោយការហៅខ្លួនឯង. # (សេចក្តីសង្ខេបនៃការផ្លាស់ប្តូរ) |
ជំហាននេះអាចនាំឱ្យមានជម្លោះបញ្ចូលគ្នា (ប្រហែលជាទៅ, នៅពេលដែលយើងផ្លាស់ប្តូរលេខកំណែ). ក្នុងករណីបញ្ជាក់, ជួសជុលនិងធ្វើ ប្តេជ្ញា.
ឥឡូវនេះ, ដែលយើងពិតជាបានបញ្ចប់, នេះ សាខាចេញ អាចត្រូវបានយកចេញ, ព្រោះយើងមិនត្រូវការវាទៀតទេ:
$ សាខា git -ឃ-1.2 # ការលុបសាខាចោល -២ (គឺ ff452fe). |
សាខា Hotfix
– អាចសាខា [សាខា] ពី:
មេ
– វាគួរតែបញ្ចូលគ្នា [បញ្ចូលគ្នា] ជាថ្មីម្តងទៀតនេះ:
អភិវឌ្ឍ អ៊ី មេ
– ការដាក់ឈ្មោះអនុសញ្ញា សាខា:
hotfix- *
នេះ សាខា Hotfix គឺស្រដៀងគ្នាទៅនឹងឯកសារ ដោះលែងសាខា, ដូចដែលពួកគេត្រូវបានបម្រុងទុកផងដែរដើម្បីរៀបចំកំណែផលិតកម្មថ្មី, ទោះបីជាមិនបានគ្រោងទុក. ពួកវាកើតឡើងពីតម្រូវការដើម្បីធ្វើសកម្មភាពភ្លាមៗបន្ទាប់ពីស្ថានភាពដែលមិនចង់បាននៃកំណែផលិតកម្ម [កំពុងប្រើ]. នៅពេលមានកំហុសធ្ងន់ធ្ងរកើតឡើងនៅក្នុងកំណែផលិតកម្ម, ត្រូវតែដោះស្រាយជាបន្ទាន់, បន្ទាប់មកមួយ សាខា hotfix អាចត្រូវបានទាញយកពីស្លាកដែលសម្គាល់កំណែផលិតកម្មដែលមានស្រាប់នៅក្នុង សាខាមេ.
ខ្លឹមសារគឺការងាររបស់សមាជិកក្រុម (ទេ បង្កើតសាខា) បន្តទៀត, ខណៈពេលដែលនរណាម្នាក់ផ្សេងទៀតកំពុងរៀបចំការជួសជុលយ៉ាងឆាប់រហ័សនៃការបរាជ័យផលិតកម្ម.
ការបង្កើតសាខា hotfix
នេះ សាខា hotfix ត្រូវបានបង្កើតចេញពីឯកសារ សាខាមេ. ឧទាហរណ៍, សន្មតថាកំណែ 1.2 ជាកំណែបច្ចុប្បន្ននៃការចេញផ្សាយផលិតកម្មដែលកំពុងដំណើរការហើយមានបញ្ហាដោយសារមានកំហុសធ្ងន់ធ្ងរ. ការផ្លាស់ប្តូរនៅក្នុង អភិវឌ្ឍ ទុកឱ្យនៅតែមិនស្ថិតស្ថេរ. បន្ទាប់មកយើងអាចបែងចែកមួយ សាខា hotfix ហើយចាប់ផ្តើមដោះស្រាយបញ្ហា:
$ git checkout -ខ hotfix-1.2.1 មេ # Switched to a new branch "hotfix-1.2.1" $ ./រលាក់-ជំនាន់.sh 1.2.1 # ឯកសារត្រូវបានកែប្រែដោយជោគជ័យ, កំណែបានបុកទៅ 1.2.1. $ git ប្តេជ្ញាចិត្ត -មួយ -m "Bumped version number to 1.2.1" # [hotfix-1.2.1 41e61bb] វាយលេខកំណែទៅ 1.2.1 # 1 បានផ្លាស់ប្ដូរឯកសារ, 1 ការបញ្ចូល(+), 1 ការលុប(-) |
កុំភ្លេចផ្លាស់ប្តូរលេខកំណែបន្ទាប់ពីពន្លក!
បន្ទាប់មក, កែកំហុសហើយធ្វើវា ប្តេជ្ញា ការកែក្នុងមួយឬច្រើន ប្តេជ្ញា បំបែក.
$ git ប្តេជ្ញាចិត្ត -m "Fixed severe production problem" # [hotfix-1.2.1 abbe5d6] ដោះស្រាយបញ្ហាផលិតកម្មធ្ងន់ធ្ងរ # 5 បានផ្លាស់ប្ដូរឯកសារ, 32 ការបញ្ចូល(+), 17 ការលុប(-) |
បញ្ចប់សាខាហ្វាយឆាយ
ពេលចប់, នេះ ជួសជុលកំហុស ត្រូវការបញ្ចូលទៅក្នុង មេ, ប៉ុន្តែវាក៏ចាំបាច់ត្រូវបញ្ចូលម្តងទៀតដែរ អភិវឌ្ឍ, ដើម្បីធានាថាឯកសារ ជួសជុលកំហុស ត្រូវបានរួមបញ្ចូលផងដែរនៅក្នុងកំណែបន្ទាប់. នេះគឺស្រដៀងនឹងផ្លូវដែរ ដោះលែងសាខា ត្រូវបានបញ្ចប់.
ដំបូង, ធ្វើឱ្យទាន់សម័យឯកសារ មេ e ថ្ងៃមួយ ការដោះលែង [ពិនិត្យរដូវក្តៅ]:
$ មេឆែកហ្គ្រីត # ប្តូរទៅសាខា 'មេ' $ ទៅចូលគ្នា --ទេ-ff hotfix-1.2.1 # បញ្ចូលគ្នាបង្កើតឡើងដោយការហៅខ្លួនឯង. # (សេចក្តីសង្ខេបនៃការផ្លាស់ប្តូរ) $ ស្លាក git -មួយ 1.2.1 |
ការកត់សម្គាល់: អ្នកក៏អាចប្រើទង់ -s ឬ -u
បន្ទាប់មក, រួមបញ្ចូល ជួសជុលកំហុស ទេ អភិវឌ្ឍ ផងដែរ:
$ git checkout អភិវឌ្ឍ # ប្តូរទៅសាខា 'អភិវឌ្ឍ' $ ទៅចូលគ្នា --ទេ-ff hotfix-1.2.1 # បញ្ចូលគ្នាបង្កើតឡើងដោយការហៅខ្លួនឯង. # (សេចក្តីសង្ខេបនៃការផ្លាស់ប្តូរ) |
ការលើកលែងតែមួយគត់ចំពោះច្បាប់នៅទីនេះគឺថា, នៅពេលដែលមាន សាខាចេញ កំពុងដំណើរការ, ការផ្លាស់ប្តូរនៅក្នុង hotfix ចាំបាច់ត្រូវបញ្ចូលចូលគ្នាសម្រាប់បញ្ហានេះ សាខាចេញ, ជាជាង អភិវឌ្ឍ. បញ្ចូលគ្នា ជួសជុលកំហុស ទេ សាខាចេញ នឹងធ្វើឱ្យ ជួសជុលកំហុស ត្រូវបានបញ្ចូលទៅក្នុង អភិវឌ្ឍ ផងដែរ, នៅពេលដែល សាខាចេញ ត្រូវបានបញ្ចប់. (ប្រសិនបើធ្វើការ អភិវឌ្ឍ ទាមទារភ្លាមៗ ជួសជុលកំហុស និងមិនអាចរង់ចាំរហូតដល់ សាខាចេញ ត្រូវបានបញ្ចប់, អ្នកអាចបញ្ចូលចូលគ្នាដោយសុវត្ថិភាព ជួសជុលកំហុស សម្រាប់ deveolp ផងដែរ។)
ទីបំផុត, យកឯកសារ សាខា បណ្តោះអាសន្ន:
$ សាខា git -ឃ hotfix-1.2.1 # សាខាដែលបានលុប hotfix-1.2.1 (គឺ abbe5d6). |
ប្រវត្តិរូប
ទោះបីជាមិនមានអ្វីប្លែកពីគំរូសាខានេះក៏ដោយ, តួលេខនៅដើមដំបូងនៃកាសែតភ្នំពេញប៉ុស្តិ៍អាចមានប្រយោជន៍ខ្លាំងណាស់នៅក្នុងគម្រោងរបស់យើង. វាបង្ហាញពីគំរូផ្លូវចិត្តងាយយល់និងអនុញ្ញាតឱ្យសមាជិកក្រុមអភិវឌ្ឍការយល់ដឹងរួម សាខា អ៊ី ការដោះលែង.
តួលេខជា PDF ដែលមានគុណភាពខ្ពស់ត្រូវបានផ្តល់ជូននៅលើប្លក់នៃប្រកាសដើម: http://nvie.com/posts/a-successful-git-branching-model/ [ឬតំណទាញយកខាងក្រោម]. ទៅមុខហើយដាក់វានៅលើជញ្ជាំងសម្រាប់ឯកសារយោងរហ័សគ្រប់ពេល.

នៅរសៀលថ្ងៃល្អ, ខ្ញុំដឹងថាត្រូវបានគេបង្កើតឡើងដំបូង Git លីនុចប៉ុន្តែនៅពេលសម្រាប់និយាយអំពីយួរតាមខ្លួនបាន, ខ្ញុំឆ្ងល់ប្រសិនបើ Git POSIX MSIS ដំណើរការលើនិងបង្អួច??