ºóÀ´¸ú @zesming ´óÀйµÍ¨ÔõôȥÕûÀí×é¼þ×Ô¶¯¹¹½¨·¢²¼Ë¼Â·µÄʱºòËûÒ²¸úÎÒÌáµ½ÁËÕâÕÅͼ¡£ËùÒÔÎÒ×¼±¸Î§ÈÆÕâÕÅͼÀ´ÕûÀíÒ»ÏÂ
iOS ¹¤³Ì×Ô¶¯»¯µÄ˼·¡£
»ù´¡ÖªÊ¶
Ê×ÏÈ£¬ÎÒÃÇÐèÒªÕÆÎÕһЩ×Ô¶¯¹¹½¨·¢²¼µÄ»ù´¡ÖªÊ¶£¬Ö÷Òª°üº¬Èçϼ¸¸ö·½Ãæ¡£
GitFlow - ¹æ·¶ git ²Ù×÷Á÷³Ì
GitFlow ÊÇÓÉ Vincent Driessen Ìá³öµÄÒ»¸ö Git ²Ù×÷Á÷³Ì±ê×¼¡£°üº¬Èçϼ¸¸ö¹Ø¼ü·ÖÖ§£º

GitFlow µÄÓÅÊÆÓÐÈçϼ¸µã£º
1.²¢Ðпª·¢£ºGitFlow ¿ÉÒԺܷ½±ãµÄʵÏÖ²¢Ðпª·¢£ºÃ¿¸öй¦Äܶ¼»á½¨Á¢Ò»¸öеÄ
feature ·ÖÖ§£¬´Ó¶øºÍÒѾÍê³ÉµÄ¹¦ÄܸôÀ뿪À´£¬¶øÇÒÖ»ÓÐÔÚй¦ÄÜÍê³É¿ª·¢µÄÇé¿öÏ£¬Æä¶ÔÓ¦µÄ feature
·ÖÖ§²Å»áºÏ²¢µ½Ö÷¿ª·¢·ÖÖ§ÉÏ£¨Ò²¾ÍÊÇÎÒÃǾ³£ËµµÄ develop ·ÖÖ§£©¡£ÁíÍ⣬Èç¹ûÄãÕýÔÚ¿ª·¢Ä³¸ö¹¦ÄÜ£¬Í¬Ê±ÓÖÓÐÒ»¸öÐµĹ¦ÄÜÐèÒª¿ª·¢£¬ÄãÖ»ÐèÒªÌá½»µ±Ç°
feature µÄ´úÂ룬Ȼºó´´½¨ÁíÍâÒ»¸ö feature ·ÖÖ§²¢Íê³Éй¦ÄÜ¿ª·¢¡£È»ºóÔÙÇлØÖ®Ç°µÄ feature
·ÖÖ§¼´¿É¼ÌÐøÍê³É֮ǰ¹¦ÄܵĿª·¢¡£
2.Ð×÷¿ª·¢£ºGitFlow »¹Ö§³Ö¶àÈËÐͬ¿ª·¢£¬ÒòΪÿ¸ö feature
·ÖÖ§Éϸ͝µÄ´úÂë¶¼Ö»ÊÇΪÁËÈÃij¸öÐ嵀 feature ¿ÉÒÔ¶ÀÁ¢ÔËÐС£Í¬Ê±ÎÒÃÇÒ²ºÜÈÝÒ×ÖªµÀÿ¸öÈ˶¼ÔÚ¸Éɶ¡£
3.·¢²¼½×¶Î£ºµ±Ò»¸öРfeature ¿ª·¢Íê³ÉµÄʱºò£¬Ëü»á±»ºÏ²¢µ½
develop ·ÖÖ§£¬Õâ¸ö·ÖÖ§Ö÷ÒªÓÃÀ´ÔÝʱ±£´æÄÇЩ»¹Ã»Óз¢²¼µÄÄÚÈÝ£¬ËùÒÔÈç¹ûÐèÒªÔÙ¿ª·¢Ð嵀 feature£¬ÎÒÃÇÖ»ÐèÒª´Ó
develop ·ÖÖ§´´½¨Ð·ÖÖ§£¬¼´¿É°üº¬ËùÓÐÒѾÍê³ÉµÄ feature ¡£
4.Ö§³Ö½ô¼±ÐÞ¸´£ºGitFlow »¹°üº¬ÁË hotfix ·ÖÖ§¡£ÕâÖÖÀàÐ͵ķÖÖ§ÊÇ´Óij¸öÒѾ·¢²¼µÄ
tag ÉÏ´´½¨³öÀ´²¢×öÒ»¸ö½ô¼±µÄÐÞ¸´£¬¶øÇÒÕâ¸ö½ô¼±ÐÞ¸´Ö»Ó°ÏìÕâ¸öÒѾ·¢²¼µÄ tag£¬¶ø²»»áÓ°Ïìµ½ÄãÕýÔÚ¿ª·¢µÄÐÂ
feature¡£
Glow flow ÊÇÈçºÎ¹¤×÷µÄ
й¦Äܶ¼ÊÇÔÚ feature ·ÖÖ§ÉϽøÐпª·¢

feature ·ÖÖ§¶¼ÊÇ´Ó develop ·ÖÖ§´´½¨£¬Íê³ÉºóÔٺϲ¢µ½
develop ·ÖÖ§ÉÏ£¬µÈ´ý·¢²¼¡£

µ±ÐèÒª·¢²¼Ê±£¬ÎÒÃÇ´Ó develop ·ÖÖ§´´½¨Ò»¸ö release
·ÖÖ§

È»ºóÕâ¸ö release ·ÖÖ§»á·¢²¼µ½²âÊÔ»·¾³½øÐвâÊÔ£¬Èç¹û·¢ÏÖÎÊÌâ¾ÍÔÚÕâ¸ö·ÖÖ§Ö±½Ó½øÐÐÐÞ¸´¡£ÔÚËùÓÐÎÊÌâÐÞ¸´Ö®Ç°£¬ÎÒÃǻ᲻ͣµÄÖØ¸´·¢²¼->²âÊÔ->ÐÞ¸´->ÖØÐ·¢²¼->ÖØÐ²âÊÔÕâ¸öÁ÷³Ì¡£
·¢²¼½áÊøºó£¬Õâ¸ö release ·ÖÖ§»áºÏ²¢µ½ develop ºÍ
master ·ÖÖ§£¬´Ó¶ø±£Ö¤²»»áÓдúÂ붪ʧ¡£

master ·ÖÖ§Ö»¸ú×ÙÒѾ·¢²¼µÄ´úÂ룬ºÏ²¢µ½ master É쵀 commit Ö»ÄÜÀ´×Ô release
·ÖÖ§ºÍ hotfix ·ÖÖ§¡£
hotfix ·ÖÖ§µÄ×÷ÓÃÊǽô¼±ÐÞ¸´Ò»Ð© Bug¡£
ËüÃǶ¼ÊÇ´Ó master ·ÖÖ§ÉϵÄij¸ö tag ½¨Á¢£¬ÐÞ¸´½áÊøºóÔٺϲ¢µ½
develop ºÍ master ·ÖÖ§ÉÏ¡£

GitFlow ¹¤¾ß
Èç¹ûÒªÔÚÏîÄ¿ÖÐÒýÈë GitFlow£¬ÍƼöʹÓà SourceTree
À´×ö¿Í»§¶Ë¹¤¾ß£¬Ëü°üº¬ÁËËùÓÐ GitFlow µÄÁ÷³Ì£¬¿ÉÊÓ»¯²Ù×÷£¬ºÜ·½±ã¡£

gitignore - ¸ÉµôÄÇЩ¸ÉÈÅ´úÂë
ΪʲôÌáµ½ gitignore£¬Éó¹ý PR£¨Pull request£© »òÕß MR£¨Merge request£©µÄͬѧӦ¸ÃÉîÓÐÌå»á£¬µ±Ò»¸ö´ø×ÅÒ»´ó¶Ñ
Pods ¿â´úÂëµÄ PR/MR Ï®À´µÄʱºò£¬ÄãµÄÄÚÐÄÓ¦¸ÃÊǾøÍûµÄ¡¡ËùÒÔÎÒÃÇÒªÁ˽âÏÂÔõô°ÑһЩ·ÇÄ£¿éÏà¹ØµÄ´úÂë
ignore µô¡£
´´½¨ÏîÄ¿²Ö¿âÖÐµÄ .gitignore
Èç¹ûÄãÔÚÏîÄ¿²Ö¿âÄÚ´´½¨Ò»¸ö .gitignore Îļþ£¬Git »á¸ù¾ÝÕâ¸öÎļþÀ´¾ö¶¨ÄÄЩÎļþºÍĿ¼ÊÇÐèÒªºöÂԵġ£
×¢Ò⣺Èç¹ûÄãÏë°ÑÒ»¸öÒѾ±»¸ú×ÙµÄÎļþ ignore µô£¬ÕâÊÇʱºòÐÂÔöµÄ¹æÔò²¢²»»á¶ÔÕâ¸öÎļþ²úÉú×÷Óã¬ÄãÐèÒªÏÈÓÃÏÂÃæµÄÖ¸Áî°ÑÕâ¸öÎļþÉèÖÃΪ²»¸ú×Ù£º
´´½¨È«¾ÖµÄ .gitignore
Õâ¸öÆäʵûɶÒâ˼£¬²»¹ý»¹ÊÇ¿´Ò»ÏÂÔõôÉèÖðɣº
git config --global core.excludesfile ~/.gitignore_global |
iOSer ÐèÒªµÄ .gitignore
Github ¹Ù·½Ä£°æ¸ø³öµÄ½¨ÒéÈçÏ£º
#
Xcode
#
# gitignore contributors: remember to update
Global/Xcode.gitignore, Objective-C.gitignore
& Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory
to your .gitignore. However
# you should judge for yourself, the pros and
cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking
in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
#
# It is recommended to not store the screenshots
in the git repo. Instead, use fastlane to re-generate
the
# screenshots whenever they are needed.
# For more information about the recommended
setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated
folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/ |
ͨ¹ýÕâ¸öÎļþÎÒÃÇ¿ÉÒÔ¿´µ½£¬ºöÂÔµÄÄÚÈÝÖ÷Òª°üº¬ÏÂÃæ¼¸ÖÖ£º
1.¹¹½¨²úÉúµÄĿ¼ºÍÎļþ£»
2.¸÷ÖÖÁÙʱÅäÖÃÎļþ£»
3.Obj-C / Swift Ïà¹ØµÄÌØ¶¨Îļþ£»
4.CocoaPods µÚÈý·½ Pods ¿âĿ¼£»
5.Carthage ¹¹½¨Ä¿Â¼£»
6.fastlane ¹¹½¨²úÉúµÄÎļþ£»
7.´úÂë×¢È빤¾ß²úÉúµÄĿ¼¼°Îļþ¡£
8.ÎÒÃÇ¿ÉÒÔ¸ù¾Ý×ÔÉíÏîÄ¿µÄÇé¿öÀ´¶ÔÕâЩÅäÖýøÐÐÏàÓ¦µÄµ÷ÕûºÍ¶¨ÖÆ¡£
githooks - ±³ºóµÄ¡°ÄÐÈË¡±
×¢£º±¾¶ÎÖ÷Òª·Òë×Ô githooks ¹Ù·½Îĵµ¡£
githooks ¼ò½é
githooks ÊÇÖ¸ git ÔÚÖ´ÐÐÄ³Ð©ÌØ¶¨²Ù×÷ʱ»á´¥·¢µÄһϵÁгÌÐò£¬ÓеãÀàËÆÊý¾Ý¿âÖеĴ¥·¢Æ÷£¬ÓÉÓû§±àд¡£Ä¬ÈÏÇé¿öÏ£¬ÕâЩ³ÌÐò¶¼±»·ÅÖÃÔÚ
$GIT_DIR/hooks Ŀ¼Ï£¬µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔͨ¹ý git µÄ»·¾³ÅäÖñäÁ¿ core.hooksPath
À´¸Ä±äÕâ¸öĿ¼¡£
githooks µÄÀàÐÍÓкܶàÖУ¬ÕâЩ hook »áÔÚ¸÷¸öÌØ¶¨²Ù×÷ʱ°ïÄã×Ô¶¯Íê³ÉһЩÄãÏëÒª×öµÄ²Ù×÷£¬±ÈÈ磺ÔÚÌá½»´úÂëµ½
develop ·ÖÖ§µÄʱºò×Ô¶¯´ò°ü¡£
Ŀǰ֧³ÖµÄ githooks
git commit Á÷³Ì
pre-commit
ÓÉ git commit ´¥·¢£¬¿ÉÒÔͨ¹ý --no-verify Ñ¡ÏîÀ´Ìø¹ý£¬Õâ¸ö hook ²»ÐèÒª²ÎÊý£¬Ôڵõ½Ìá½»ÏûÏ¢²¢¿ªÊ¼Ìá½»(commit)ǰ±»µ÷Óã¬Èç¹û·µ»Ø·Ç
0£¬Ôò»áµ¼Ö git commit ʧ°Ü¡£
µ±Ä¬È쵀 pre-commit ¹³×Ó±»ÆôÓÃʱ£¬Èç¹ûËü·¢ÏÖÎļþβ²¿Óпհ×ÐУ¬´Ë´ÎÌá½»¾Í»á±»ÖÕÖ¹¡£
Èç¹û½øÐÐ git commit µÄÃüÁîûÓÐÖ¸¶¨Ò»¸ö±à¼Æ÷À´ÐÞ¸ÄÌá½»ÐÅÏ¢(commit message)£¬ÈκεÄ
git commit hook ±»µ÷ÓÃʱ¶¼»á´øÉÏ»·¾³±äÁ¿ GIT_EDITOR=:
prepare-commit-msg
Ö´ÐÐ git commit ÃüÁîºó£¬ÔÚĬÈÏÌá½»ÏûÏ¢×¼±¸ºÃºóµ«±à¼Æ÷Æô¶¯Ç°£¬Õâ¸ö hook ¾Í»á±»µ÷Óá£
Ëü½ÓÊÜ 1 µ½ 3 ¸ö²ÎÊý¡£µÚ 1 ¸öÊǰüº¬ÁËÌá½»ÏûÏ¢µÄÎļþµÄÃû×Ö¡£µÚ 2 ¸öÊÇÌá½»ÏûÏ¢µÄÀ´Ô´£¬Ëü¿ÉÒÔÊÇ£º
1.message£¨Èç¹ûÖ¸¶¨ÁË -m »òÕß -F Ñ¡Ï
2.template£¨Èç¹ûÖ¸¶¨ÁË -t Ñ¡Ï»òÕßÔÚ git configÖпªÆôÁË
commit.template Ñ¡Ï
3.merge£¨Èç¹û±¾´ÎÌá½»ÊÇÒ»´ÎºÏ²¢£¬»òÕß´æÔÚÎļþ .git/MERGE_MSG£©
4.squash£¨Èç¹û´æÔÚÎļþ .git/SQUASH_MSG £©
5.commit ²¢ÇÒµÚ 3 ¸ö²ÎÊýÊÇÒ»¸öÌá½»µÄ SHA1 Öµ£¨Èç¹ûÖ¸¶¨ÁË
-c,-C »òÕß --amend Ñ¡Ï
Èç¹û·µ»ØÖµ²»ÊÇ 0£¬ÄÇô git commit ÃüÁî¾Í»á±»ÖÐÖ¹¡£
Õâ¸ö hook µÄÄ¿µÄÊÇÓÃÀ´ÔÚ¹¤×÷ʱ±à¼ÐÅÏ¢Îļþ£¬²¢ÇÒ²»»á±» --no-verify Ñ¡ÏîÌø¹ý¡£Ò»¸ö·Ç
0 ÖµÒâζ×Å hook ¹¤×÷ʧ°Ü£¬»áÖÕÖ¹Ìá½»¡£Ëü²»Ó¦¸ÃÓÃÀ´×÷Ϊ pre-commit ¹³×ÓµÄÌæ´ú¡£
commit-msg
ÓÉ git commit ´¥·¢£¬¿ÉÒÔͨ¹ý --no-verify Ñ¡ÏîÀ´Ìø¹ý£¬½ÓÊÜ 1 ¸ö²ÎÊý£¬Õâ¸ö²ÎÊý°üº¬ÁËÌá½»ÏûÏ¢µÄÎļþµÄÃû×Ö£¬Èç¹û·µ»Ø·Ç
0£¬Ôò»áÖÐÖ¹ git commit ÃüÁî¡£
Õâ¸ö hook ¿ÉÒÔÓÃÀ´¹æ·¶Ìá½»ÐÅÏ¢£¬±ÈÈç°ÑÐÅÏ¢¸ñʽ»¯³ÉÏîÄ¿¶¨ÖƵıê×¼¸ñʽ£¬»òÕß·¢ÏÖÌá½»ÐÅÏ¢²»·ûºÏ¸ñʽʱ¾Ü¾øÕâ´ÎÌá½»¡£
post-commit
ÓÉ git commit ´¥·¢£¬ÔÚÌá½»ºó±»µ÷Ó㬲»ÄÜÓ°Ïì git commit µÄ½á¹û¡£
git push Á÷³Ì
pre-push
ÔÚ git push ÔËÐÐÆÚ¼ä£¬¸üÐÂÁËÔ¶³ÌÒýÓõ«ÉÐδ´«ËͶÔÏóʱִÐС£Èç¹û·µ»Ø·Ç 0£¬½«ÖÐÖ¹ÍÆË͹ý³Ì¡£Ëü½ÓÊÜÔ¶³Ì·ÖÖ§µÄÃû×ÖºÍλÖÃ×÷Ϊ²ÎÊý£¬Í¬Ê±´Ó±ê×¼ÊäÈëÖжÁȡһϵÁдý¸üеÄÒýÓá£
Äã¿ÉÒÔÔÚÍÆËÍ¿ªÊ¼Ö®Ç°£¬ÓÃËüÑéÖ¤¶ÔÒýÓõĸüвÙ×÷¡£
pre-receive
·þÎñ¶Ë´¦ÀíÀ´×Ô¿Í»§¶ËµÄÍÆËͲÙ×÷ʱ£¬×îÏȱ»µ÷ÓÃµÄ hook¡£Ëü´Ó±ê×¼ÊäÈë»ñȡһϵÁб»ÍÆË͵ÄÒýÓá£Èç¹ûËüÒÔ·Ç
0 ÖµÍ˳ö£¬ËùÓеÄÍÆËÍÄÚÈݶ¼²»»á±»½ÓÊÜ¡£Äã¿ÉÒÔÓÃÕâ¸ö hook ×èÖ¹¶Ô non-fast-forward
µÄ¸üУ¬»òÕß¶Ô¸ÃÍÆËÍËùÐ޸ĵÄËùÓÐÒýÓúÍÎļþ½øÐзÃÎÊ¿ØÖÆ¡£
update
ºÍ pre-receive hook Ê®·ÖÀàËÆ£¬²»Í¬Ö®´¦ÔÚÓÚËü»áΪÿһ¸ö×¼±¸¸üеķÖÖ§¸÷ÔËÐÐÒ»´Î¡£¼ÙÈçÍÆËÍÕßͬʱÏò¶à¸ö·ÖÖ§ÍÆËÍÄÚÈÝ£¬pre-receive
Ö»ÔËÐÐÒ»´Î£¬Ïà±È֮Ϡupdate Ôò»áΪÿһ¸ö±»ÍÆË͵ķÖÖ§¸÷ÔËÐÐÒ»´Î¡£Ëü²»»á´Ó±ê×¼ÊäÈë¶ÁÈ¡ÄÚÈÝ£¬¶øÊǽÓÊÜÈý¸ö²ÎÊý£ºÒýÓõķÖÖ§Ãû£»ÍÆËÍǰÒýÓÃËùÖ¸ÏòÄÚÈݵÄ
SHA-1 Öµ£»ÒÔ¼°Óû§×¼±¸ÍÆËÍÄÚÈÝµÄ SHA-1 Öµ¡£Èç¹ûÕâ¸ö hook ÒÔ·Ç 0 ÖµÍ˳ö£¬Ö»ÓÐÏàÓ¦µÄÄÇÒ»¸öÒýÓûᱻ¾Ü¾ø£»ÆäÓàµÄÒÀÈ»»á±»¸üС£
post-receive
ÔÚÕû¸ö¹ý³ÌÍê½áÒÔºóÔËÐУ¬¿ÉÒÔÓÃÀ´¸üÐÂÆäËûϵͳ·þÎñ»òÕß֪ͨÓû§¡£Ëü½ÓÊÜÓë pre-receive ÏàͬµÄ±ê×¼ÊäÈëÊý¾Ý¡£ËüµÄÓÃ;°üÀ¨¸øÄ³¸öÓʼþÁÐ±í·¢ÐÅ£¬Í¨Öª³ÖÐø¼¯³É·þÎñÆ÷£¬»òÕ߸üÐÂȱÏÝ×·×Ùϵͳ
¡ª¡ª ÉõÖÁ¿ÉÒÔͨ¹ý·ÖÎöÌá½»ÐÅÏ¢À´¾ö¶¨Ä³¸öÎÊÌâÊÇ·ñÓ¦¸Ã±»¿ªÆô¡¢Ð޸ĻòÕ߹رա£¸Ã½Å±¾ÎÞ·¨ÖÐÖ¹ push
½ø³Ì£¬²»¹ý¿Í»§¶ËÔÚËü½áÊøÔËÐÐ֮ǰ½«±£³ÖÁ¬½Ó״̬£¬ËùÒÔÈç¹ûÄãÏë×öÆäËû²Ù×÷Ðè½÷É÷ʹÓÃËü£¬ÒòΪËü½«ºÄ·ÑÄãºÜ³¤µÄÒ»¶Îʱ¼ä¡£
post-update
ÓÉÔ¶³Ì²Ö¿âµÄ git-receive-pack µ÷Óã¬Ò²ÊǾÍÊDZ¾µØ²Ö¿âÍê³É git push ʱ¡£Õâ¸öÖ¸ÁîÖ»ÄÜÓÃÀ´×ö֪ͨ£¬²»Äܸıä
git-receive-pack µÄ½á¹û¡£
push-to-checkout
ÓÉÔ¶³Ì²Ö¿âµÄ git-receive-pack µ÷Óã¬Ò²ÊǾÍÊDZ¾µØ²Ö¿âÍê³É git push ʱ¡£Èç¹ûÕâ¸ö
hook ·µ»Ø·Ç 0 Öµ£¬Ôò»áÖÐ¶Ï git push ²Ù×÷¡£
applypatch-msg & pre-applypatch & post-applypatch
ÓÉ git am ´¥·¢£¬Ö÷ÒªÓÃÓÚÒýÈëµÚÈý·½ patch µÄʱºòÓá£ÒòΪÏîÄ¿ÖÐÔÝʱûÓÐÕâÑùµÄʹÓó¡¾°£¬ËùÒÔ²»×ö¾ßÌåÑо¿¡£
pre-rebase
ÓÉ git rebase ´¥·¢£¬¿ÉÒÔÓÃÀ´·Àֹij¸ö·ÖÖ§±» rebase¡£Õâ¸ö hook ½ÓÊÜ 1 µ½
2 ¸ö²ÎÊý¡£µÚ 1 ¸ö²ÎÊýÊÇÉÏÓηÖÖ§£¬µÚ 2 ¸ö²ÎÊýÊǽ«ÒªÖ´ÐÐ rebase µÄ·ÖÖ§¡£
post-checkout
ÔÚ git checkout ³É¹¦ÔËÐкóÖ´ÐС£Äã¿ÉÒÔ¸ù¾ÝÄãµÄÏîÄ¿»·¾³ÓÃËüµ÷ÕûÄãµÄ¹¤×÷Ŀ¼¡£°üÀ¨·ÅÈë´óµÄ¶þ½øÖÆÎļþ¡¢×Ô¶¯Éú³ÉÎĵµ»ò½øÐÐÆäËûÀàËÆÕâÑùµÄ²Ù×÷¡£
post-merge
ÔÚ git merge ³É¹¦ÔËÐкóÖ´ÐС£Äã¿ÉÒÔÓÃËü»Ö¸´ Git ÎÞ·¨¸ú×ٵŤ×÷ÇøÊý¾Ý£¬±ÈÈçȨÏÞÊý¾Ý¡£Õâ¸ö
hook Ò²¿ÉÒÔÓÃÀ´Ñé֤ijЩÔÚ Git ¿ØÖÆÖ®ÍâµÄÎļþÊÇ·ñ´æÔÚ£¬ÕâÑùÄã¾ÍÄÜÔÚ¹¤×÷Çø¸Ä±äʱ£¬°ÑÕâЩÎļþ¸´ÖƽøÀ´¡£
post-rewrite
Õâ¸ö hook ±»ÄÇЩ»áÌæ»»Ìá½»¼Ç¼µÄÃüÁîµ÷Ó㬱ÈÈç git commit --amend ºÍ git
rebase£¨²»¹ý²»°üÀ¨ git filter-branch£©¡£ ËüΨһµÄ²ÎÊýÊÇ´¥·¢ÖØÐ´µÄÃüÁîÃû£¬Í¬Ê±´Ó±ê×¼ÊäÈëÖнÓÊÜһϵÁÐÖØÐ´µÄÌá½»¼Ç¼¡£
Õâ¸ö hook µÄÓÃ;ºÜ´ó³Ì¶ÈÉϸú post-checkout ºÍ post-merge ²î²»¶à¡£
sendemail-validate
Õâ¸ö hook ÓÉ git send-email ´¥·¢£¬Ëü½ÓÊÜÒ»¸ö²ÎÊý£º°üº¬ e-mail ½ÓÊÜÕßÓÊÏäµÄÎļþÃû¡£Èç¹ûÕâ¸ö
hook ·µ»Ø·Ç 0 Öµ£¬git send-email ¾Í»á±»ÖÐÖ¹¡£
pre-auto-gc
Git µÄһЩÈÕ³£²Ù×÷ÔÚÔËÐÐʱ£¬Å¼¶û»áµ÷Óà git gc --auto ½øÐÐÀ¬»ø»ØÊÕ¡£Õâ¸ö hook
»áÔÚÀ¬»ø»ØÊÕ¿ªÊ¼Ö®Ç°±»µ÷Ó㬿ÉÒÔÓÃËüÀ´ÌáÐÑÄãÏÖÔÚÒª»ØÊÕÀ¬»øÁË£¬»òÕßÒÀÇéÐÎÅжÏÊÇ·ñÒªÖжϻØÊÕ¡£
Cocoapods - ´ó¹Ü¼Ò
×öΪһ¸öµÚÈý·½¿âÒÀÀµ¹ÜÀí¹¤¾ß£¬Cocoapods ÔÚÄ£¿é»¯¿ª·¢ÖаçÑÝÁ˷dz£ºËÐĵĽÇÉ«¡£¹ØÓÚ Cocoapods
µÄ¹¦ÄܺͽéÉÜÕâÀï¾Í²»Ò»Ò»³ÂÊöÁË£¬Ö÷Òª¿´Ò»ÏºÍÄ£¿é»¯¿ª·¢¹ý³ÌÖÐÏà¹ØµÄһЩ¶«Î÷¡£
×Ô¶¨Òå Cocoapods Ä£°å
ÎÒÃÇÒ»°ãÓà pod lib create Õâ¸öÖ¸ÁîÀ´´´½¨Ò»¸öÄ£¿é£¬ÆäʵÕâ¸öÖ¸ÁÓÐÒ»¸öÑ¡Ï--template-url=URL£¬ÓÃÀ´Ö¸¶¨Éú³É¿âµÄÄ£°å£¬¹Ù·½Ä£°åµØÖ·ÊÇ£ºhttps://github.com/CocoaPods/pod-template£¬¸ù¾ÝÕâ¸öÄ£°åÉú³ÉµÄ¹¤³ÌĿ¼½á¹¹ÈçÏ£º
MyLib
©À©¤©¤ .travis.yml
©À©¤©¤ _Pods.xcproject
©À©¤©¤ Example
©¦ ©À©¤©¤ MyLib
©¦ ©À©¤©¤ MyLib.xcodeproj
©¦ ©À©¤©¤ MyLib.xcworkspace
©¦ ©À©¤©¤ Podfile
©¦ ©À©¤©¤ Podfile.lock
©¦ ©À©¤©¤ Pods
©¦ ©¸©¤©¤ Tests
©À©¤©¤ LICENSE
©À©¤©¤ MyLib.podspec
©À©¤©¤ Pod
©¦ ©À©¤©¤ Assets
©¦ ©¸©¤©¤ Classes
©¦ ©¸©¤©¤ RemoveMe.[swift/m]
©¸©¤©¤ README.md |
Ò²¾ÍÊÇ˵£¬ÎÒÃÇ¿ÉÒÔ fork Õâ·Ý¹Ù·½Ä£°æµØÖ·£¬È»ºó¶¨ÖÆÎÒÃÇ×Ô¼ºµÄÄ£°å£¨°üÀ¨Ö÷¹¤³ÌºÍÒµÎñÄ£¿é£©£¬Ôö¼Ó×Ô¶¨ÒåµÄ¹¦ÄÜ¡£±ÈÈ磺
1.Ìí¼ÓËùÓлù´¡¿âÒÀÀµ¡£
2.Ìí¼Ó˽ÓÐ Cocoapods ²Ö¿â¡£
3.Ìí¼Ó .gitignore Îļþ¡£
4.Ìí¼Ó×Ô¶¨Òå½Å±¾¡£
˽ÓÐ Cocoapods ²Ö¿â
ºÍÖ÷¹¤³ÌÒ»Ñù£¬Ä£¿éÒ²ÊÇÐèÒª×ö°æ±¾¹ÜÀíµÄ£¬Ä¿Ç°À´¿´±È½ÏºÃµÄ·½Ê½¾ÍÊÇͨ¹ý Cocoapods À´·¢²¼°æ±¾¡£ËùÒÔÎÒÃÇÐèҪ׼±¸Ò»¸ö×Ô¼ºµÄ˽ÓÐ
Cocoapods ²Ö¿â£¬ÆäʵºÜ¼òµ¥£¬Ê×ÏÈÔÚÄÚÍø git ÉϽ¨Á¢Ò»¸ö¿Õ²Ö¿â£¬È»ºóÔÚ±¾µØÖ´ÐÐÒ»ÏÂÏÂÃæµÄÖ¸Áî¼´¿É£º
pod
repo add [Spec name] [Git url]
|
È»ºó¾ÍÊÇÔÚ·¢²¼¿âµÄʱºò×¢Òâһϣ¬ÓÃÈçÏÂÖ¸Áî¼´¿É·¢²¼µ½Ë½ÓвֿâÄÚ£º
pod repo push [Spec name] [Lib name].podspec |
Cocoapods ÒýÓõÚÈý·½¿âµÄ¼¸ÖÖ·½Ê½
ʹÓùý Cocoapods µÄͯЬӦ¸Ã¶¼ÖªµÀ£¬Cocoapods µÄÒýÓ÷½Ê½ÓÐÈýÖÖ£º

Á÷³Ì·ÖÎö
ÏÂÃæ¾ÍÊÇÎÒ¶Ô @zesming ´óÀзÖÏíµÄÁ÷³ÌͼÖи÷¸ö¹ý³ÌµÄһЩ˼¿¼¡£
ÒµÎñ·½ÐèÇ󵽿ª·¢
¸ù¾Ý GitFlow µÄ¹æ·¶£¬ÐµÄÐèÇó×ßµÄÊÇ feature µÄÁ÷³Ì¡£ÕâÀïÎÒÃÇÓ¦¸Ã¿ÉÒÔ¿ª·¢Ò»Ð©¸¨Öú¿ª·¢µÄ½Å±¾¡£
Ò»¼üн¨ÒµÎñÄ£¿éºÍÖ÷¹¤³Ì feature ·ÖÖ§
×é¼þ»¯µ½ÁËÒ»¸öÍêÕû½×¶ÎµÄʱºò£¬Ö÷¹¤³ÌÓ¦¸ÃÊÇûÓдúÂëµÄ£¬Ö»ÊÇÒ»¸ö¿Ç¡£µ«ÊÇÔÚ·¢Õ¹½×¶ÎµÄʱºò£¬Ö÷¹¤³Ì»¹»á°üº¬Ò»Ð©ÒµÎñ´úÂ룬ËùÒÔÎÒÃÇÔÚ¿ª·¢Ä³¸ö
feature µÄʱºò£¬ÍùÍùÊÇÄ£¿éÄÚÓÐһЩ¾ßÌåÒµÎñ´úÂ룬Ö÷¹¤³Ì»¹ÓÐһЩµ÷ÓôúÂ룬Õâ¸öʱºò¾ÍÐèÒªÔÚÖ÷¹¤³ÌºÍÒµÎñÄ£¿é¶¼Ð½¨Í¬ÑùµÄ
feature ·ÖÖ§£¬ËùÒÔÎÒÃÇÔÚÖ÷¹¤³ÌÔö¼ÓÒ»¸ö½Å±¾¡£Õâ¸ö½Å±¾µÄ²ÎÊý°üº¬£º
1.ÒµÎñÄ£¿éÃû£»
2.ÒµÎñÄ£¿é±¾µØÂ·¾¶£»
3.feature ·ÖÖ§Ãû¡£
Ö´Ðйý³ÌÈçÏ£º
1.ΪÖ÷¹¤³Ì´´½¨ feature ·ÖÖ§£»
2.½øÈëÒµÎñÄ£¿éËùÔÚĿ¼£¬ÎªÒµÎñÄ£¿é´´½¨ feature ·ÖÖ§£»
3.ÉèÖÃÖ÷¹¤³Ì Podfile ÖÐÒµÎñÄ£¿éÒýÓ÷½Ê½Îª±¾µØÂ·¾¶ÒýÓã»
4.´ò¿ªÖ÷¹¤³ÌºÍÒµÎñÄ£¿é Example ¹¤³Ì¡£
Ò»¼üÇл»Ö÷¹¤³Ì¿ª·¢µ÷ÊÔ״̬
Ò»¼üÇл»Ö÷¹¤³Ì¿ª·¢×´Ì¬ÊÇָijЩҵÎñÄ£¿éÐèÒªÒÀÀµÖ÷¹¤³ÌÀ´½øÐе÷ÊÔµÄʱºò£¨PS£ºµ±È»£¬±È½ÏÀíÏëµÄ״̬ÊÇÒµÎñÄ£¿é¿ÉÒÔ¶ÀÁ¢ÔËÐУ¬²»¹ýÒ»°ãÇé¿öÏ£¬ÀíÏëºÜÃÀºÃ£¬ÏÖʵºÜ²Ð¿á????£©£¬ÐèÒª½«
Podfile ÖÐÕâ¸öÄ£¿éµÄÒýÓ÷½Ê½ÐÞ¸ÄΪ±¾µØÂ·¾¶µÄÒýÓ÷½Ê½¡£ÕâÑùÖ÷¹¤³Ì´úÂëµÄÐ޸ĺÍÒµÎñÄ£¿é´úÂëµÄÐ޸Ļá·Ö±ðÌá½»µ½¸÷×ÔµÄ
git ²Ö¿â£¬´Ó¶øÊµÏֱߵ÷ÊԱ߿ª·¢±ßÌá½»´úÂë¡£
Õâ¸ö¹¦ÄÜ¿¼ÂÇÓýű¾µÄ·½Ê½À´ÊµÏÖ£¬·ÅÖÃÔÚÖ÷¹¤³ÌµÄ³£Óýű¾Ä¿Â¼Ï¡£²ÎÊýÓ¦¸Ã°üº¬£º
1.ÒµÎñÄ£¿éÃû£»
2.ÒµÎñÄ£¿é±¾µØÂ·¾¶£»
3.ÒµÎñÄ£¿é feature ·ÖÖ§Ãû [¿ÉÑ¡]¡£
Ö´ÐеIJÙ×÷Ó¦¸Ã°üº¬£º
1.Èç¹ûÖ¸¶¨ÁËÒµÎñÄ£¿é feature ·ÖÖ§Ãû£¬ÔòÐèÒªÏȸøÒµÎñÄ£¿éн¨·ÖÖ§£¬·ñÔòÖ±½ÓÖ´ÐеÚ
2 ²½£»
2.ÐÞ¸ÄÖ÷¹¤³Ì Podfile ÖÐÒµÎñÄ£¿éµÄÒýÓ÷½Ê½Îª±¾µØÂ·¾¶ÒýÓã»
3.pod install£»
4.¹Ø±ÕÖ÷¹¤³Ì²¢ÖØÐ´ò¿ª¡£
Ò»¼üÇл»Ö÷¹¤³ÌÌύ״̬
ÒµÎñÄ£¿é¿ª·¢µ÷ÊÔÍê³ÉÖ®ºó£¬ÐèÒª½«Ö÷¹¤³Ì»Ö¸´µ½Õý³£µÄ״̬²¢Ìá½»¡£
Õâ¸ö¹¦ÄÜ»¹ÊÇÓýű¾µÄ·½Ê½ÊµÏÖ£¬·ÅÖÃÔÚÖ÷¹¤³ÌµÄ³£Óýű¾Ä¿Â¼Ï¡£²ÎÊýÓ¦¸Ã°üº¬£º
1.ÒµÎñÄ£¿éÃû£»
2.ÒµÎñÄ£¿éÔ¶³Ì git µØÖ·;
3.ÒµÎñÄ£¿é feature ·ÖÖ§Ãû¡£
Ö´ÐеIJÙ×÷Ó¦¸Ã°üº¬£º
1.¸ù¾Ýµ±Ç°ÒµÎñÄ£¿é±¾µØÂ·¾¶£¬Ìá½»ÒµÎñÄ£¿é´úÂ룻
2.ÐÞ¸ÄÖ÷¹¤³Ì Podfile ÖÐÒµÎñÄ£¿éµÄÒýÓ÷½Ê½ÎªÔ¶³Ì git
ÒýÓã»
3.pod install£»
4.¹Ø±ÕÖ÷¹¤³Ì²¢ÖØÐ´ò¿ª¡£
Ìá½»´úÂëµ½ÒµÎñ´úÂë²Ö¿â
Õâ¸ö¹ý³ÌÎÒÃÇÖ÷Ҫͨ¹ý githooks À´×öһЩһЩ×Ô¶¯¼ì²â¡£°üÀ¨£º
1.OCLint
2.µ¥Ôª²âÊÔ
3.·¢²¼×é¼þµ½ÄÚÍø Pods
4.×¼±¸½×¶Î
Õâ¸ö½×¶Î×öµÄÊÂÇéÖ÷ÒªÊǼì²âµ±Ç°ÐèÒª·¢²¼µÄËùÓзÖÖ§ÊÇ·ñ¶¼ÒѾÌá½» PR / MR ²¢ºÏ²¢µ½ÁË develop
·ÖÖ§¡£
×¢£ºÕâÀï¶Ô·ÖÖ§µÄÃüÃû»áÓÐһЩ¹æÔòÉϵÄÒªÇó±È¡£ÈçÔÚ·ÖÖ§ÃûÄÚÐèÒª´øÉϵ±Ç°ÐèÒª·¢²¼µÄ°æ±¾ºÅ£¬´Ó¶ø¿ÉÒÔͨ¹ýÕâ¸ö°æ±¾ºÅÆ¥Åäµ½µ±Ç°ÐèÒª·¢²¼µÄËùÓзÖÖ§¡£
·¢²¼ -> ²âÊÔ -> bug fix -> Ôٴη¢²¼½×¶Î
ÕâÀïÐèÒª°Ñ GitFlow ºÍ Cocoapods µÄ·¢²¼Á÷³Ì½áºÏÆðÀ´¡£
¿¼Âǵ½Ò»°ãÐèÒªÒÀÀµÖ÷¹¤³ÌÀ´½øÐвâÊÔ£¬ÎÒÃÇÐèÒªÔÚÖ÷¹¤³ÌÔö¼ÓÒ»¸ö±¾µØ½Å±¾À´¸¨Öú·¢²¼£¬°üº¬µÄ²ÎÊýÈçÏ£º
1.µ±Ç°°æ±¾ºÅ£»
2.ÒµÎñÄ£¿é±¾µØÂ·¾¶£»
3.Ö÷¹¤³Ì feature ·ÖÖ§Ãû[¿ÉÑ¡]¡£
ʵÏֵŦÄÜÈçÏ£º
1.Èç¹ûÌṩÁËÖ÷¹¤³Ì feature ·ÖÖ§Ãû£¬ÐèÒªÏÈÇл»Ö÷¹¤³Ì·ÖÖ§£»·ñÔòÌø¹ýÕâÒ»²½£»
2.¸ù¾Ý´«ÈëµÄµ±Ç°°æ±¾ºÅ´Ó develop ·ÖÖ§½¨Á¢ release
·ÖÖ§¡£Èç¹ûÒѾ´æÔÚ£¬ÔòÌø¹ýÕâÒ»²½£»
3.½«Ö÷¹¤³Ì git ²Ö¿âÖÐ Podfile ÒýÓøÃÄ£¿éµÄ·½Ê½Ì滻ΪÒýÓÃÔ¶³Ì
git ²Ö¿âµÄ release ·ÖÖ§£»
4.È»ºóÔÚÖ÷¹¤³ÌÖ´ÐÐ pod update [Ä£¿éÃû] ¸üдúÂ룻
5.ÍÆËÍÖ÷¹¤³Ì´úÂëµ½Ô¶³Ì git ²Ö¿â¡£
6.ͨ¹ý githooks µÄ·½Ê½´ò°üÖ÷¹¤³Ì²¢Ìá½»²âÊÔ£»
7.²âÊÔ¹ý³ÌÖÐÈç¹û´æÔÚÎÊÌ⣬Ôòͨ¹ýÒ»¼üÇл»Ö÷¹¤³Ì¿ª·¢µ÷ÊÔ״̬½Å±¾Ö±½ÓÇл»¿ª·¢×´Ì¬²¢½øÐÐ
bug fix£»
8.bug fix Ö®ºóÖØÐÂÖ´ÐÐµÚ 1 ²½¡£
²âÊÔÍê³É·¢²¼µ½ÄÚÍø Pods ½×¶Î
²âÊÔÍê³Éºó¾Í¿ÉÒÔ·¢²¼ÒµÎñÄ£¿éµ½ÄÚÍø Pods ÁË¡£ÕâÀïÎÒÃÇÔÚÒµÎñÄ£¿é¹¤³ÌÄÚ×¼±¸Ò»¸ö½Å±¾£¬²ÎÊýÈçÏ£º
1.µ±Ç°°æ±¾ºÅ¡£
2.Ö÷¹¤³Ì±¾µØÂ·¾¶¡£
ʵÏֵŦÄÜÈçÏ£º
1.Ê×ÏÈÎÒÃÇÒªÐÞ¸Ä .podspec ÎļþÖеİ汾ºÅΪ´«ÈëµÄµ±Ç°°æ±¾ºÅ£¬²¢Ìá½»
push µ½ release ·ÖÖ§¡£
2.È»ºó¸ù¾Ý GitFlow µÄ release Á÷³Ì£¬ºÏ²¢ release
·ÖÖ§µ½ develop ·ÖÖ§ºÍ master ·ÖÖ§£¬È»ºóÔÚ master ·ÖÖ§½¨Á¢¶ÔÓ¦°æ±¾ºÅµÄ tag
²¢ push µ½Ô¶³Ì git ²Ö¿â¡£
3.È»ºó¾Í¿ÉÒÔ·¢²¼ÒµÎñÄ£¿éÁË£¬·¢²¼Íê³ÉÖ®ºóÇл»µ½Ö÷¹¤³Ì·¾¶½«Ö÷¹¤³Ì
Podfile ÖжԸÃÄ£¿éµÄÒýÓ÷½Ê½ÐÞ¸ÄΪ°æ±¾ºÅÒýÓá£
¼¯³É×é¼þµ½Ö÷¹¤³Ì
ÒòΪ֮ǰ·¢²¼×é¼þµÄʱºòÒѾ½«Ö÷¹¤³Ì¶Ô¸÷ÒµÎñÄ£¿éµÄÒýÓ÷½Ê½ÐÞ¸ÄΪ°æ±¾ºÅÒýÓá£ËùÒÔÕâ¸ö½×¶ÎÎÒÃÇÖ»ÐèÒªÑé֤һϵ±Ç°Ö÷¹¤³ÌÒýÓõÄÊÇ·ñÊǸ÷ÒµÎñÄ£¿éµÄ×îз¢²¼°æ±¾¼´¿É¡£²ÎÊýÈçÏ£º
Ö÷¹¤³ÌÒÀÀµµÄËùÓÐÒµÎñÄ£¿éÁбí
Íê³ÉµÄ¹¦ÄÜÈçÏ£º
¼ì²âÖ÷¹¤³ÌÒÀÀµÄ£¿éµÄËùÓÐÒµÎñÄ£¿éµÄ×îа汾ÊÇ·ñºÍ Podfile ÖÐÖ¸¶¨µÄÒ»Ö£¬Èç¹û²»Ò»Ö£¬±¨´í¡£
·¢²¼Ö÷¹¤³Ì
×¼±¸½×¶Î
Õâ¸ö½×¶Î×öµÄÊÂÇéÓÐÁ½µã£º
1.¼ì²âÖ÷¹¤³Ìµ±Ç°ÐèÒª·¢²¼µÄËùÓзÖÖ§ÊÇ·ñ¶¼ÒѾÌá½» PR / MR
²¢ºÏ²¢µ½ÁË develop ·ÖÖ§¡£
2.¼ì²âÖ÷¹¤³Ìµ±Ç°ÒýÓõÄËùÓÐÒµÎñÄ£¿éÊÇ·ñ¶¼Îª°æ±¾ºÅÒýÓá£
·¢²¼ -> ²âÊÔ -> bug fix ->
Ôٴη¢²¼½×¶Î
Õâ¸ö½×¶Î¿ÉÒÔÀí½âΪ¼¯³É²âÊԽ׶Ρ£Í¬ÑùÊÇÖ÷¹¤³ÌÖеÄÒ»¸ö½Å±¾¡£²ÎÊýÈçÏ£º
µ±Ç°°æ±¾ºÅ¡£
1.¸ù¾Ý´«ÈëµÄµ±Ç°°æ±¾ºÅ´Ó develop ·ÖÖ§½¨Á¢ release
·ÖÖ§¡£Èç¹ûÒѾ´æÔÚ£¬ÔòÌø¹ýÕâÒ»²½£»
2.ÍÆËÍÖ÷¹¤³Ì´úÂëµ½Ô¶³Ì git ²Ö¿â£»
3.ͨ¹ý githooks µÄ·½Ê½´ò°üÖ÷¹¤³Ì²¢Ìá½»²âÊÔ£»
4.²âÊÔ¹ý³ÌÖÐÈç¹û´æÔÚÎÊÌ⣬Ôòͨ¹ýÒ»¼üÇл»Ö÷¹¤³Ì¿ª·¢µ÷ÊÔ״̬½Å±¾Ö±½ÓÇл»¿ª·¢×´Ì¬²¢½øÐÐ
bug fix£»
5.bug fix Ö®ºóÖØÐÂÖ´ÐÐµÚ 1 ²½¡£
²âÊÔÍê³É·¢²¼
¸ù¾Ý GitFlow µÄ release Á÷³Ì£¬ºÏ²¢ release ·ÖÖ§µ½ develop ·ÖÖ§ºÍ
master ·ÖÖ§£¬È»ºóÔÚ master ·ÖÖ§½¨Á¢¶ÔÓ¦°æ±¾ºÅµÄ tag ²¢ push µ½Ô¶³Ì git
²Ö¿â£»
ͨ¹ý githooks µÄ·½Ê½´ò°üÖ÷¹¤³Ì²¢·¢²¼¡£
×ܽá
±¾ÎÄÖ»ÊÇÒ»¸ö²»³ÉÊìµÄ˼¿¼£¬ºóÐøÊµÊ©µÄ¹ý³ÌÖпÉÄÜ»á¶ÔһЩϸ½Ú½øÐиÄÉÆ£¬Ò²»¶Ó´ó¼Ò¶ÔÎÒ˼·Öв»ºÏÀíµÄµØ·½½øÐÐÖ¸Õý£¬ÎÒ»á·Ç³£¸Ð¼¤¡£
|