±à¼ÍƼö: |
±¾ÎÄÀ´×Ôhahack£¬ÎÄÕÂÌÖÂÛÏÂÎÒÃÇÔÚ¿ª·¢¹ý³ÌÖг¢ÊԵĸ÷ÖÖ·ÖÖ§¹ÜÀí²ßÂÔ£¬ÔÚÃæ¶Ô¸÷ÖÖ¸´ÔÓ³¡¾°Ï³ÊÏÖµÄÓÅÊÆÓë²»×㣬ÒÔ¼°ÎÒÃǵÄÍ×кͺóÐøÆÚÍû¡£ |
|
˵µ½°æ±¾¿ØÖÆ£¬¾Í²»µÃ²»Ìáµ½·ÖÖ§¹ÜÀí²ßÂÔ¡£¾ÍÏñѧ¿ª³µ±ØÐëѧѧ½»Í¨¹æÔò¡£·ÖÖ§¹ÜÀí²ßÂÔÊÇ´úÂë°æ±¾¿ØÖƵĻù´¡×é³É²¿·Ö¡£ÎªÍŶӶ¨ÖÆÒ»Ì׺ÏÊʵķÖÖ§¹ÜÀí²ßÂÔ£¬¾ÍºÃ±ÈÖÆ¶¨ÁËÒ»Ì׺ÏÀíµÄ½»Í¨¹æÔò£¬¿ÉÒÔÈÃÍŶӵĴúÂëµÄ¸ü¼ÓÓÐÐòµØÑݽø£¬¾¡¿ÉÄܽµµÍ¶à·ÖÖ§´øÀ´µÄ¸´ÔÓ¶È£¬²¢±ÜÃâÓÉÓÚ·ÖÖ§»ìÂÒÒý·¢µÄ¸÷ÖÖ¡°³µ»ö¡±¡£±¾ÎĽ«¼òµ¥ÌÖÂÛÏÂÎÒÃÇÔÚ¿ª·¢¹ý³ÌÖг¢ÊԵĸ÷ÖÖ·ÖÖ§¹ÜÀí²ßÂÔ£¬ÔÚÃæ¶Ô¸÷ÖÖ¸´ÔÓ³¡¾°Ï³ÊÏÖµÄÓÅÊÆÓë²»×㣬ÒÔ¼°ÎÒÃǵÄÍ×кͺóÐøÆÚÍû¡£
Github-Flow
×÷Ϊ Github µÄÖØ¶ÈÓû§£¬ÎÒÊ×ÏÈ¿¼Âǵĵ±È»ÊÇ Github-Flow ¡£

Github-Flow ÊÇÒ»Öַdz£¼òµ¥µÄ·ÖÖ§¹ÜÀí·½°¸¡£ËüµÄÁ÷³ÌÖ»ÓÐÈçϼ¸²½£º
À³öÒ»¸öзÖÖ§£»
ÔÚзÖÖ§ÉϽøÐÐÐ޸쬲¢Ìá½»ºÍÍÆËÍÄãµÄ¸Ä¶¯£»
·¢ÆðÒ»¸ö Pull Request £¬Ïò´úÂë¹ÜÀíÔ±ÉêÇ뽫ÄãÌá½»µÄ·ÖÖ§ºÏ²¢µ½ÔÀ´µÄ·ÖÖ§£»
ÌÖÂÛ²¢½ÓÊÜ Code Review¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬ÄãÒÀÈ»¿ÉÒÔ¼ÌÐøÍÆËÍеĴúÂëµ½ÄãµÄ¿ª·¢·ÖÖ§ÉÏ£¬²¢ÇÒеÄÌá½»ÔÚÍÆËͺó»á³öÏÖÔÚδÍê³ÉºÏ²¢µÄ
Pull Request Ò³ÃæÖУ»
ºÏ²¢ºÍ·¢²¼¡£Review ͨ¹ýºó£¬´úÂë¹ÜÀíÔ±½«¸Ã·ÖÖ§ºÏ²¢µ½ÔÀ´µÄÖ÷·ÖÖ§ÉÏ¡£
ÔÚ Gitlab ÖÐͬÑù¿ÉÒÔʹÓà Github-Flow£¬Î¨Ò»µÄÇø±ðÊǽз¨´Ó Pull Request
±ä³ÉÁË Merge Request ¡£ÏÂͼÊÇÒ»¸ö±»³É¹¦ºÏ²¢µÄ Merge Request£º

Github-Flow ÓÐÈçϼ¸¸öÈÃÈË×ÅÃÔµÄÓŵ㣺
¼òµ¥ºÃ²Ù×÷¡£Ö»ÓÐÖ÷·ÖÖ§ºÍ¿ª·¢·ÖÖ§¡£²»Ïñ Git-Flow ÄÇÑùÐèÒªÒýÈëÒ»¶ÑµÄ¸¨Öú·ÖÖ§¡£
ÍÆ¶¯ Code Review ¡£Í¨¹ý Pull Request µÄ·½Ê½£¬Ê¹µÃ Code Review
³ÉΪÁËÈÕ³£¿ª·¢µÄ±Ø¾Á÷³Ì£¬ÓÐÖúÓÚ¡£
È·±£¿É±àÒë¡£ËùÓÐ Pull Request ¶¼»á´¥·¢³ÖÐø¼¯³É²âÊÔ£¬Ö»ÓÐͨ¹ý²âÊԵIJÅÔÊÐí²¢ÈëÖ÷·ÖÖ§¡£Õâ¾Í¶Å¾øÁË´úÂë±àÒë²»¹ýµÄÇé¿ö¡£
È»¶ø£¬Ãæ¶Ô¸´ÔÓµÄÏîÄ¿£¬Github-Flow ±©Â¶³öÁËÈçϵIJ»×㣺
½â¾ö³åÍ»À§ÄÑ¡£¶àÈËÐ×÷µÄÏîÄ¿ÄÑÃâ»á³öÏÖ³åÍ»£¬Ò»µ©Óöµ½³åÍ»£¬Merge
Request ¾Íû·¨±»Ö±½Ó±»ºÏ²¢ÁË¡£Õâ¸öʱºòÖ»ÄÜÔÙ´ÓÄ¿±ê·ÖÖ§À³öÒ»¸ö·ÖÖ§¡úºÏ²¢Õâ¸ö·ÖÖ§¡ú½â¾öÍê³åÍ»¡úÍÆÉÏÔ¶³Ì²Ö¿âÔٴη¢Æð
Merge Request ¡£¶ÔÓÚ´ó¶àÊýϰ¹ßÁËÓà Merge Request ºÏ²¢·ÖÖ§µÄÈËÀ´Ëµ£¬Õâ¸ö¹ý³ÌÒ»ÏÂ×Ó¸´ÔÓÁËÆðÀ´¡£

Code Review ÈÝÒ×Á÷ÓÚÐÎʽ¡£ËäÈ» Github-Flow ¼ÓÈëÁË Code Review
µÄ¹ý³Ì£¬µ«ÕâÒÀȻȡ¾öÓÚË«·½¶Ô´ý Code Review µÄ»ý¼«ÐÔ¡£Èç¹ûûÓгä·ÖµÄÌÖÂÛ´úÂëµÄϸ½Ú£¬ÈÔÈ»ÎÞ·¨±£Ö¤´úÂëµÄÖÊÁ¿¡£Êµ¼ÊÍŶӿª·¢ÖУ¬ÎÒÃÇ·¢ÏÖÔÚÏß½øÐеÄ
Code Review ²¢²»ÈçÃæ¶ÔÃæÌÖÂÛ¸ßЧ¡£¸üÑÏÖØµÄÊÇÒ»µ©Ë«·½Ã»ÓÐ keep moving µÄÒâʶ£¬´óÁ¿
Merge Request ±»»ýѹ£¬¶øÕâЩ Merge Request »á²»¶Ï°üº¬Ð嵀 commit
½øÀ´£¬Õâ¾Í»áʹµÃ Merge Request ¸ü¼ÓÄÑÒԺϲ¢¡£
³ÖÐø¼¯³É²âÊÔÎÞ·¨±£Ö¤×ÓÄ£¿é¿É±àÒë¡£³ÖÐø¼¯³É¿ÉÒÔ×÷Ϊ Merge Request µÄ×¼ÈëÌõ¼þ£¬µ«Õâ½ö½öÖ»ÊÇÖ÷¹¤³ÌµÄ¡°¸£Àû¡±¡£¶øÈçÉÏһƪÎÄÕÂËù˵£¬×ÓÄ£¿éµÄ³ÖÐø¼¯³ÉÔ¶±ÈÖ÷¹¤³Ì¸´Ôӵö࣬ÄÑÒÔÖ±½ÓÔÚ
Merge Request Ò³ÃæÖиø³ö³ÖÐø¼¯³É²âÊÔ½á¹û¡£¶ø¶ÔÓÚÎÒÃǵÄÏîÄ¿£¬Ö÷¹¤³Ì»ù±¾Ã»ÓжàÉÙÒµÎñ´úÂ룬´ó²¿·ÖµÄ¹¦ÄÜ¿ª·¢¶¼ÊÇÔÚ×ÓÄ£¿éÉÏ£¬Õâ¾ÍʹµÃ
Merge Request µÄ³ÖÐø¼¯³É¹¦ÄÜÏԵü¦ÀßÁË¡£
»¹ÓÐһЩ Gitlab µÄ½»»¥ÎÊÌâ¡£ÔÚ Gitlab ÖУ¬Ä¬Èϵĺϲ¢Ä¿±ê·ÖÖ§ÊÇ
master ·ÖÖ§£º

µ±Ä㻨ÉÏÒ»·ÖÖÓÌîÍêºÏ²¢ÃèÊö£¬Ñ¡ÍêÖ¸ÅÉÈ˺󣬷¢ÏÖÄ¿±ê·ÖÖ§ÍüÁ˸ġ£´Ëʱ¾ÍÖ»Äܵã»÷Ò³ÃæÏ·½µÄ
¡°Change Branches¡± Á´½Ó½øÈë·ÖÖ§Ñ¡ÔñÒ³ÖØÐÂÑ¡Ôñ·ÖÖ§¡£»ØÀ´ºóÄã»á·¢ÏÖÄãËùÌîдµÄËùÓÐÄÚÈÝ£¬°üÀ¨Ö¸ÅÉÈ˶¼±»Çå¿ÕÁË£º

²»Ï¸ÐĵÄÈËÍùÍùûעÒâµ½Õâ¸öÎÊÌ⣬ÓÚÊÇÌá½»ÁËÒ»¸öûÓÐÖ¸ÅÉÈ赀 Merge
Request £¬Õâ´øÀ´µÄºó¹ûÊÇÕâ¸ö Merge Request ÓÀԶûÈ˹Ø×¢ºÍºÏ²¢¡£
×ÛÉÏËùÊö£¬Github-Flow ¸üÊÊÓÃÓÚÄÇЩֻÒÔ master ·Ö֧ΪÖ÷·ÖÖ§£¬¸ü×¢ÖØÑ¸ËÙ·¢²¼µÄ¼òµ¥ÏîÄ¿¡£ÕâʹÆä·Ç³£ÊʺÏÓÃÔÚά»¤
Github ÉϵÄÕâЩ¼¯ÊÐÐ͵ĵĿªÔ´ÏîÄ¿£¬¶ø²»ÊÊÓÃÓÚ´ó½ÌÌÃÐÍµÄÆóÒµ¼¶ÏîÄ¿¡£ÕýÈç Github µÄ Scott
Chancon ´óÉñËù˵£º
For teams that have to do formal releases on a longer
term interval (a few weeks to a few months between
releases), and be able to do hot-fixes and maintenance
branches and other things that arise from shipping
so infrequently, git-flow makes sense and I would
highly advocate it¡¯s use.
For teams that have set up a culture of shipping,
who push to production every day, who are constantly
testing and deploying, I would advocate picking something
simpler like GitHub Flow.
Scott Chancon, Issues with git-flow
Git-Flow
Git-Flow ÊÇÓÉ Vincent Driessen ÔÚËûµÄһƪÎÄÕÂÖÐÌá³öµÄ·ÖÖ§¹ÜÀí²ßÂÔ¡£

Óë Github-Flow Ïà±È£¬Git-Flow ÓµÓиü¶àµÄ·ÖÖ§£º
master£º¿ÉÒÔÌṩ¸øÓû§Ê¹ÓõÄÕýʽ°æ±¾£»
develop£ºÓÃÀ´Éú³É´úÂëµÄ¸ôÒ¹°æ±¾£¨nightly£©£»
feature£ºÓÃÓÚ¿ª·¢Ä³¸ö¹¦ÄÜ£»
hotfix£ºÓÃÓÚÐÞ¸´ÏßÉÏ´úÂëµÄ bug£»
release£ºÓÃÓÚÕýʽ·¢²¼°æ±¾Ç°µÄ²âÊÔ·ÖÖ§¡£
Git-Flow Ìá³öµÄ·ÖÖ§¹ÜÀí²ßÂÔÍêÕû¶øÊµÓã¬ËüÉõÖÁÒѾ³ÉΪÁËÒ»¸öͨÓÿª·¢Á÷³Ì±ê×¼¡£¿ª·¢ÕßÃÇ¿ÉÒÔÔÚ¶à¸öÍŶӺÍÏîÄ¿ÖÐ×ñÊØÍ¬Ò»Ì×Á÷³Ì¡£µ«
Git-Flow Ò²²»ÊÇÍò½ðÓÍ¡£Óöµ½¸´ÔÓµÄÏîÄ¿£¬ËüҲδ±ØÄÜÍêÈ«ÊÊÓãº
ÈÝÒ׳öÏÖ³åÍ»¡£Git-Flow Éè¼ÆÁ˶à¸ö·ÖÖ§¸÷˾ÆäÖ°£¬µ«¶à·ÖÖ§´øÀ´µÄ¿àÄÕÊÇÈÝÒ׳öÏÖ³åÍ»¡£×î³£¼ûµÄÎÊÌâÊÇ£¬ÓÉÓÚÎÒÃÇʵÏÖÁË×ÓÄ£¿é
commit id µÄ×Ô¶¯¸üУ¬Ö÷·ÖÖ§Ó뿪·¢·ÖÖ§µÄ×ÓÄ£¿é commit id ¾³£±ä¶¯£¬µ¼Ö develop
·ÖÖ§Ïò master ·ÖÖ§ºÏ²¢µÄʱºò³öÏÖ´óÁ¿³åÍ»£¬×èÈû·¢°æ½ø¶È¡£
¶à²úÆ·ÏßµÄÎÊÌâ¡£
ÎÒÃǵÄÖ÷¹¤³Ì´æÔÚ¶àÌõ²úÆ·Ïߣºmaster ·ÖÖ§½ö½öά»¤Ò»¸ö»ù´¡Ä£°å£¬¶ø jilin ¡¢taishan
µÈ·ÖÖ§²ÅÊÇÓÃÓÚ²ú³öÕæÕý²úÆ·µÄ·ÖÖ§¡£Ã¿Ìõ²úÆ·Ïߵĸ÷×ÔÓÐÒ»Ì× Git-Flow ·ÖÖ§Ìåϵ£¬²¢ÓÃÇ°×ºÇø·Ö²úÆ·Ïß¡£ÀýÈç
jilin µÄ develop ·ÖÖ§¾Í½Ð jilin-dev ¡£¶ø×ÓÄ£¿é¼È¿ÉÄܺÍÖ÷¹¤³ÌÒ»Ñù¶à¸ö²úÆ··ÖÖ§£¬Ò²¿ÉÄÜÊÇÒ»¸öͨÓÃÄ£¿é¡£¶ÔÓÚͨÓÃÄ£¿é£¬Ö»ÐèҪά»¤Ò»Ì×
Git-Flow ·ÖÖ§Ìåϵ¡£ÀýÈç common ×ÓÄ£¿é¾ÍÖ»Óбê×¼µÄ master¡¢dev µÈ·ÖÖ§¡£
¶ÔÓÚ¶à²úÆ··ÖÖ§µÄÖ÷¹¤³ÌºÍ×ÓÄ£¿é£¬µ±¸Ä¶¯ÁËij¸ö·ÖÖ§µÄ´úÂ룬Äã¾ÍÒª·Ç³£É÷ÖØµÄ¿¼ÂÇÕⲿ·Ö¸Ä¶¯ÊÇ·ñͨÓã¬ÊÇ·ñÐèÒª²¢ÈëÆäËû²úÆ·ÏߵķÖÖ§¡£¶ø
Git-Flow ²¢Ã»ÓÐ̽ÌÖ¶à¸ö²úÆ·Ïß²¢´æÇé¿öϵĴúÂëºÏ²¢·½°¸¡£
¶ÔÓÚͨÓõÄ×ÓÄ£¿é£¬À release ·Ö֧ʱÓÖ´æÔÚËøµÄÎÊÌâ¡£±ÈÈ磬¸ºÔð jilin ²úÆ·ÏßµÄͬʼ´½«·¢°æ£¬ÓÚÊǰÑ
common ×ÓÄ£¿éÀ³öÁËÒ»¸ö release ·ÖÖ§¡£ÆäËû²úÆ·ÏßµÄͬÊÂÒÀÈ»¿ÉÒÔ¼ÌÐøÎª common
×ÓÄ£¿éµÄ develop ·ÖÖ§Ìá½» feature ¡£µ«»¹Ã»µÈ jilin ²úÆ·ÏßÍê³É·¢°æ¡£taishan
²úÆ·ÏßµÄͬÊÂÒ²×¼±¸·¢°æÁË£¬´Ëʱ release ·ÖÖ§ÔçÒѾ±» jilin µÄͬÊÂÀ³öÀ´£¬¶øÕâ¸ö release
·Ö֧ȴûÓÐ taishan ²úÆ·ÏßÒª·¢°æÐèÒªµÄ feature ¡£Õâ¾Í×è°ÁË taishan ²úÆ·Ïߵķ¢°æ¡£
Í×ÐÓëÆÚÍû
ΪÁË»¯·±Îª¼ò£¬ÎÒÃÇ×öÁËЩÍ×Уº
²úÆ·ÏßÈ¡Ïû develop ·ÖÖ§¡£Ã¿Ìõ²úÆ·ÏßÈ¡Ïû develop ·ÖÖ§£¬²¢·Å¿ª²úÆ·ÏßµÄÖ÷·ÖÖ§µÄÌύȨÏÞ¡£ÕâÖÖ·½°¸´ó·ù¼õÉÙÁ˺ϲ¢³åÍ»µÄ¿àÄÕ£¬±ÜÃâ·¢°æÊÜ×裬¶øÎȶ¨ÐÔÒÀÈ»¿ÉÒÔͨ¹ý
feature ·ÖÖ§À´±£Ö¤¡£ÎÒÃÇÏàÐÅÖ»ÒªÈÕºóÎÒÃǵÄÄ£°å×ã¹»ÍêÉÆ£¬²úÆ·ÏߵĿª·¢³É±¾»áÔ½À´Ô½µÍ£¬Îȶ¨ÐÔÒ²»áÔ½À´Ô½Ç¿¡£
Óà cherry-pick À´Í¬²½¶àÌõ²úÆ·ÏߵĴúÂë¸Ä¶¯¡£¶ÔÓÚͨÓõĸ͝£¬¿ÉÒÔʹÓà cherry-pick
À´½«¸Ä¶¯Í¬²½µ½ÆäËû·ÖÖ§ÉÏ¡£ÎÒÃÇÀ©Õ¹ÁË fmanager µÄ¹¦ÄÜ£¬ÎªÆäʵÏÖÒ»¸ö cherry-pick
ÃüÁ
$ fmanager cherry-pick
<commit id> <·ÖÖ§Áбí> |
ÀýÈ磬¼ÙÈçÏ£Íû°Ñ weihai ·ÖÖ§ÉϵÄÒ»¸öÌύͬ²½µ½ÆäËû·ÖÖ§£¬¿ÉÒÔʹÓÃÈçÏÂÃüÁ
$ fmanager cherry-pick
023e937d master,jilin,taishan |
ͨÓõÄ×ÓÄ£¿é·¢°æÊ±£¬Ê¼ÖÕÀ³ö²úÆ· release ·ÖÖ§¡£
ÀýÈ磬jilin ²úÆ·ÏßÐèÒª·¢°æÁË£¬ÓÚÊÇ´Ó common Ä£¿éµÄ master_dev À³öÁË jilin-release
·ÖÖ§£º

À³ö·ÖÖ§ºó£¬Óë jilin ·ÖÖ§ÓйصÄÁÙʱ¸Ä¶¯¿ÉÒÔÔÚ jilin-release ÖнøÐС£Í¬Ê± common
Ä£¿éÒÀÈ»¿ÉÒÔ¸ø¸ºÔðÆäËû²úÆ·ÏßµÄͬÊÂÌύРfeature ¡£´Ëʱ taishan ²úÆ·ÏßµÄͬÊÂÈç¹ûÒª·¢°æ£¬¿ÉÒÔÀ³ö
taishan-release ·ÖÖ§£º

Ö®ºó£¬Èç¹û jilin ²úÆ·ÏßµÄͬÊÂÐÞ¸ÄÁËÒ»¸öͨÓÃµÄ bug£¬Í¬Ñù¿ÉÒÔ½«Õâ¸öÌá½» cherry-pick
µ½ÆäËû·ÖÖ§£º

Æäʵ£¬ÓëÆä˵ÊÇ Github-Flow ºÍ Git-Flow µÄÎÊÌ⣬²»Èç˵ÊÇÏÖ½×¶ÎÎÒÃǵIJúÆ·¼Ü¹¹µÄÎÊÌâ¡£Ó÷ÖÖ§À´ÊµÏÖ²úÆ·ÏߵIJîÒ컯ʹµÃÒ»¸ö²Ö¿â³öÏÖÁ˶à¸öÖ÷·ÖÖ§£¬¶øÕâÖÖ¸´ÔÓµÄģʽÒѾ³¬³öÁËͨÓõķÖÖ§¹ÜÀíÁ÷³ÌËùÄܽâ¾öµÄ·¶³ë¡£ÁíÍ⣬ÏÖ½×¶Î×ÓÄ£¿éµÄ²»Îȶ¨Ò²µ¼Ö¿ª·¢¹ý³ÌÖв»¶ÏÐèÒª¿ç²úÆ·Ïßͬ²½´úÂ룬¸ø²úÆ·ÏߵĿª·¢Ôì³É¸ºµ£¡£
ÈÕºóÎÒÃÇÏ£Íû¶Ô¹¤³ÌµÄ¼Ü¹¹½øÐе÷Õû£¬Í¨¹ýÅäÖÃÎļþÀ´ÊµÏÖ²úÆ·²îÒ컯£¬¶ø²»ÔÙ´´½¨²úÆ··ÖÖ§¡£ÁíÍ⣬×ÓÄ£¿éÒ²»áÔ½À´Ô½Îȶ¨£¬¿ÉÒԵͳɱ¾½ÓÈëµ½¸÷¸ö²úÆ·ÏßÖУ¬¶ø²»ÔÙÐèҪƵ·±µü´ú¡£µ½ÁËÄÇÒ»Ì죬ÎÒÃǵÄÏîÄ¿¾ÍÄܹ»ÖØÐ»ع鵽ÑϸñµÄ
Git-Flow £¬½« »¯·±Îª¼ò ×öµ½¼«Ö¡£ |