GitHub ãªã©ã§ Pull Request ãã¼ã¹ã§éçºããã¦ããã¨ãmaster ã«ã¯ééã£ã¦ã push ããããªãããã§ãã
GitHub å´ã«ã¯æ®å¿µãªãã master ã¸ã® push ãç¦æ¢ãããããªè¨å®ã¯ã§ããªãã®ã§ã仿¹ãªãã®ã§ã¯ã©ã¤ã¢ã³ãå´ã® Hook ã§å¯¾å¿ãããã£ã¦ãã¨ã«ãªãããã®æ¹æ³ã«ã¤ãã¦ã°ã°ãã¨ここã¨ãここã¨ããããã¤ãæ¹æ³ãç´¹ä»ãã¦ãããã¼ã¸ãåºã¦ãããã§ãããã©ããããæ¹ãééã£ã¦ãã*1ã®ã§ãæ£ããæ¹æ³ãç´¹ä»ã
ä½ãã¾ããã®ã
ä¸è¨ã«æããæ¹æ³ã§ã¯ãç´°ããé¨åã¯éã£ã¦ãããããã©ãgit symbolic-ref HEAD ã使ã£ã¦ç¾å¨ãã©ã³ããè¦ã¦ãmaster ã ã£ãã push ãç¦æ¢ãããã¨ããæ¹æ³ãåã£ã¦ããã
ããããpush ã¯ã«ã¬ã³ããã©ã³ãããè¡ãããã¨ã¯éããªããdev ãã©ã³ãã«ããã¨ãã« git push origin master ã¨ããã°ãå½ç¶ master ãã©ã³ãã push ãããããã®å ´åä¸è¨ã®æ¹æ³ã ã¨é²ããªããä»ã«ããããã¡ãªãã¿ã¼ã³ã ã¨ãgit push origin --all ãªã©ã§ã master ã push ãããã
æ£ããæ¹æ³
pre-push hook ã以ä¸ã®ãããªæãã«ããã
#!/bin/bash while read local_ref local_sha1 remote_ref remote_sha1 do if [[ "${remote_ref##refs/heads/}" = "master" ]]; then echo "Do not push to master branch!!!" exit 1 fi done
æ¨æºå ¥åãã push å ã®ãã©ã³ãåã®æ å ±ãªãããããã®ã§ãããããã§ãã¯ããã詳ããç¥ããã人㯠man githooks ã® pre-push ã®è¾ºããè¦ãã¨ããã
ãªãééã£ãæ¹æ³ãåºåã£ã¦ããã®ã
æããã ãã©ãmaster ãã©ã³ãã¸ã®ã³ããããç¦æ¢ãã pre-commit ã®ã¹ã¯ãªãããæµç¨ãããã®ã ã¨æããpre-commit ã®å ´åã¯ãç¾å¨ãã©ã³ããè¦ãã°ããã®ã§ãããã§æ£ãããããã pre-push ã¸ãã®ã¾ã¾é©ç¨ãããã¨ãã¦ã¯ãããªãã
ã¨ããã§
ãããã GitHub ããããµã¼ãå´ã§ master ã¸ã® push ãç¦æ¢ã§ããæ©è½ãå ¥ãã¦ãããã¨è²ã ã¨æãã®ã§ããããæ©è½æ¯éå ¥ãã¦æ¬²ããããªãã§ãªãã®ã¼ã
*1:å°ãªãã¨ãç§ã«ã¯æ£ããæ¹æ³ãè¨è¿°ãããã¼ã¸ãè¦ä»ããããªãã£ã