æ¯èŒçæè¿ãç§ã¯å¹žéã«ãã¢ãã©ã·ã¢ã³ã®Bitbucket Serverã®éçºããŒã ã«å ãããŸããïŒ9æ
ãŸã§ã¯StashãšåŒã°ããŠããŸãã ïŒã ããæç¹ã§ããã®è£œåãã©ã®ããã«Habréã§ã«ããŒãããŠããã®ãæ°ã«ãªããŸããããé©ããããšã«ãããã«ã€ããŠã®ã¡ã¢ãããããããããŸããã§ããã
ãã®ç¹ã§ãç§ã¯ã¹ããŒãªãŒãã©ãŒãšããŠèªåèªèº«ããã¹ãããBitbucketã®æè¡çãªåŽé¢ã«è§Šããããšã«ããŸããã ç§ã¯ãã®ç®æšããŸã£ãã远æ±ããŠããªãã®ã§ãåºåã®è©Šã¿ãšããŠã®ç§ã®æå³ãèæ
®ããªããããé¡ãããŸãã ãã®èšäºãèªè
ã®èå³ãåŒãå Žåããããã¯ãäœæãã質åã«çããŠã¿ãŠãã ããã
ãŸããTim Pettersen
ã®èšäº
ãA better pull requestãã翻蚳ããŠãããã«å²ãåœãŠãããã¿ã¹ã¯ãæã广çã«è§£æ±ºããããã«ããã«ãªã¯ãšã¹ããã©ã®ããã«èŠããã¹ããã説æããŸãã
çšèªã«é¢ããäœè«ããŒãžã§ã³ç®¡çã·ã¹ãã ã«é¢é£ãããã·ã¢èªã®æè¡èšäºïŒãšããã§ãITé¢é£ã®ãããã¯ã®å€§éšåïŒã§ã¯ãèè
ã¯ç¹å®ã®çšèªã䜿çšããå¿
èŠã«çŽé¢ããŠããŸããããã¯ãã·ã¢èªã«ç¿»èš³ãããå Žåãšãããªãå ŽåããããŸãã 人çã§ã¯ããããã®çšèªã®ã»ãšãã©ã¯ç¿»èš³ãããŠããããããã®ãŸãŸãã®èšèã«ããã³ãã¥ãã±ãŒã·ã§ã³ã§ã¯äœ¿çšãããŠããŸãããå®éãé³èš³ãããŠããŸãã å³å¯ã«èšãã°ããããã¯æžé¢ã§ç¿»èš³ããå¿
èŠããããŸããããã®å Žåãçšèªã¯ãã°ãã°è±èªçãšå®å
šã«äžèŽããªããªããããèªè
ã«ããèªèãéåžžã«è€éã«ãªããŸãã
ç§ã¯éåžžã®ååãæžé¢ã§äœ¿ããããšæããŸãããããã€ãã®çšèªãé³èš³ããããšããããŸããã äžæ¹ã§ãç§ã¯æ¹å€ãææ¡ãåãå
¥ããŠããŸãã®ã§ããã®çšèªããã®çšèªã衚çŸããããè¯ãæ¹æ³ããããšæãããå Žåã¯ããããã®èããå
±æããŠãã ããã ããããšã
Gitã䜿çšããå Žåã¯ããããããã«ãªã¯ãšã¹ãã䜿çšããŸãã ãããã¯ã忣ããŒãžã§ã³ç®¡çã·ã¹ãã ã®åºçŸä»¥æ¥ãäœããã®åœ¢ã§ååšããŠããŸããã BitbucketãšGitHubã䟿å©ãªWebã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããåã¯ããã«ãªã¯ãšã¹ãã¯ãã¢ãªã¹ããã®ç°¡åãªé»åã¡ãŒã«ã§ããããªããžããªããããã€ãã®å€æŽãååŸããããã«æ±ããŠããŸããã 䟡å€ãããå Žåã¯ãããã€ãã®ã³ãã³ããå®è¡ããŠãããã®å€æŽãã¡ã€ã³
ãã¹ã¿ãŒãã©ã³ãã«ããã·ã¥ã§ããŸãã
$ git remote add alice git://bitbucket.org/alice/bleak.git $ git checkout master $ git pull alice master
ãã¡ãããèŠãã«Aliceããã®å€æŽã
masterã«å«ããããšã¯è¯ãèãã§ã¯ãããŸãããçµå±ã
masterã«ã¯é¡§å®¢ã«é
ä¿¡ããã³ãŒããå«ãŸããŠãããããããããäœãå
¥ãããæ³šææ·±ãç£èŠããå¿
èŠããããŸãã
ãã¹ã¿ãŒã«å€æŽãåã«å«ãããããæ£ããæ¹æ³ã¯ãæåã«ããããå¥ã®ãã©ã³ãã«ããŒãžããããããåæããŠãã
ãã¹ã¿ãŒã«ããŒãžããããšã§ãïŒ
$ git fetch alice $ git diff master...alice/master
3ãã€ã³ãã®æ§æãæã€æå®ããã
git diffã³ãã³ã ïŒä»¥äž
ãããªãã«ããããgit diff ïŒã¯ã
ã¢ãªã¹/ãã©ã³ããã©ã³ãã®æäžéšãšãã®
ããŒãžããŒã¹ãšã®éã®å€æŽã衚瀺ããŸãã æ¬è³ªçã«ããããã¯ãŸãã«ã¢ãªã¹ãã¡ã€ã³ãã©ã³ãã«å«ããããã«ç§ãã¡ã«èŠæ±ãã倿Žã§ãã
git diff master ... alice / master㯠git diff AB ãšåçã§ãäžèŠãããšãããã¯ãã«ãªã¯ãšã¹ãã®å€æŽããã§ãã¯ããåççãªæ¹æ³ã®ããã«æããŸãã å®éããããæžããŠããæç¹ã§ã¯ãããã¯ãŸãã«gitãªããžããªã®ãã¹ãã£ã³ã°ãæäŸããã»ãšãã©ã®ããŒã«ã§ãã«ãªã¯ãšã¹ãã®å®è£
ã«äœ¿çšãããŠããçš®é¡ã®æ¯èŒã¢ã«ãŽãªãºã ã§ãã
ããã«ããããããã
ããªãã«ãããgit diffã䜿çšããŠãã«ãªã¯ãšã¹ãã®å€æŽãåæããå Žåãããã€ãã®åé¡ããããŸãã å®éã®ãããžã§ã¯ãã§ã¯ãã¡ã€ã³ãã©ã³ãã¯æ©èœãã©ã³ãïŒä»¥äžã
æ©èœãã©ã³ã ïŒãšã¯å€§ããç°ãªãå¯èœæ§ããããŸãã ã¿ã¹ã¯ã®äœæ¥ã¯å¥ã
ã®ãã©ã³ãã§å®è¡ãããæåŸã«
masterã«ããŒãžãããŸãã
masterãåæ¹ã«ç§»åãããšã
æ©èœãã©ã³ãã®æäžéšãã
ããŒãžããŒã¹ãŸã§ã®åçŽãª
git diffã¯ããããã®ãã©ã³ãéã®å®éã®éãã衚瀺ããã®ã«ååã§
ã¯ãªããªããŸãã以åã®ç¶æ
ã®
masterã® 1ã€ã®ã¿ãš
æ©èœãã©ã³ãã®æäžéšã®éãã衚瀺ããŸã
masterãã©ã³ãã¯ãæ°ãã倿Žã®æ³šå
¥ãéããŠæšé²ãããŠããŸãã git diff master ... alice / masterã®çµæã¯ããããã®å€æŽãmasterã«åæ ããŸããããã«ãªã¯ãšã¹ãã®åæäžã«ãããã®å€æŽã確èªã§ããªãããšãåé¡ãªã®ã¯ãªãã§ããïŒ ããã«ã¯2ã€ã®çç±ããããŸãã
ç«¶åã®ããŒãž
ããããæåã®åé¡ã宿çã«çºçããŸã-ããŒãžã®ç«¶åã åæã«
æ©èœã倿Žããã
æ©èœãã©ã³ãã®ãã¡ã€ã«ã倿Žããå Žåã
git diffã¯
æ©èœãã©ã³ãã§è¡ã£ã倿Žã®ã¿ã衚瀺ããŸãã ãã ãã
git mergeãå®è¡ããããšãããšããšã©ãŒãçºçããŸãïŒgitã¯äœæ¥ã³ããŒã®ãã¡ã€ã«ã«ç«¶åããŒã«ãŒãé
眮ããŸããããŒãžããããã©ã³ãã«ã¯ç«¶åãã倿Žããããããgitã¯é«åºŠãªããŒãžæŠç¥ã䜿çšããŠã解決ã§ããªãããã§ãã
ç«¶åã®ããŒãžèª°ãããŒãžã®ç«¶åã«å¯ŸåŠããããšã¯æããªãã§ãããããå°ãªããšããã¡ã€ã«ã¬ãã«ã®ããã¯ããµããŒãããŠããªãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ã€ããŠã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ãäžããããŠããŸãïŒå€ãã®åé¡ããããŸãïŒã
ãã ããããŒãžã®ç«¶åã¯ããã«ãªã¯ãšã¹ãã«
ããªãã«ãããgit diffã䜿çšããå Žåãä»ã®åé¡ãšæ¯èŒããŠé¢åãªãã®ã§ã¯ãããŸããïŒç¹æ®ãªã¿ã€ãã®
è«ççãªç«¶åã¯æ£åžžã«ããŒãžãããŸãããã³ãŒãããŒã¹ã«æœåšçãªãšã©ãŒã
åŒãèµ·ããå¯èœæ§ããããŸãã
å䜵äžã«æ°ä»ãããªãè«ççãªç«¶å
éçºè
ãç°ãªããã©ã³ãã®åããã¡ã€ã«ã®ç°ãªãéšåã倿Žãããšããã®ãããªç«¶åãçºçããå¯èœæ§ããããŸãã å Žåã«ãã£ãŠã¯ãåå¥ã«æ©èœããããŒãžã§ã³ç®¡çã·ã¹ãã ã®èгç¹ããç«¶åããããšãªãå®å
šã«ããŒãžãããããŸããŸãªå€æŽããäžç·ã«é©çšããããšãã«ã³ãŒãã«è«çãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
ããã¯ããŸããŸãªæ¹æ³ã§çºçããå¯èœæ§ããããŸãããæãäžè¬çãªã®ã¯ã2人ã®éçºè
ã2ã€ã®ç°ãªããã©ã³ãã§åããšã©ãŒã誀ã£ãŠèªèããŠä¿®æ£ããå Žåã§ãã 以äžã®JavaScriptã³ãŒããèªç©ºåžã®ã³ã¹ããèšç®ããããšãæ³åããŠãã ããã
ããã«ã¯æãããªééããå«ãŸããŠããŸããèè
ã¯èšç®ã«é¢çšãå«ããã®ãå¿ããŠããŸããïŒ
次ã«ã2人ã®éçºè
ãã¢ãªã¹ãšãããæ³åããŠãã ãããããããã®éçºè
ã¯ãã®ãšã©ãŒã«æ°ã¥ãããã©ã³ãå
ã®ä»ã®éçºè
ãšã¯ç¡é¢ä¿ã«ä¿®æ£ããŸããã
ã¢ãªã¹ã¯ã
immigrationFeeã® åã«ã¢ã«ãŠã³ãã£ã³ã°
customsFeeã®è¡ã远å ããŸããã
function calculateAirfare(baseFare) { var fare = baseFare; +++ fare += customsFee;
ãããåæ§ã®ç·šéãè¡ããŸããã
ã immigrationFeeã® åŸã«é
眮ããŸã
ã ã
function calculateAirfare(baseFare) { var fare = baseFare; fare += immigrationFee; +++ fare += customsFee;
ãããã®åãã©ã³ãã§ç°ãªãã³ãŒãè¡ã倿ŽãããŠãããããäž¡æ¹ã
ãã¹ã¿ãŒã«ããŒãžãããšã次ã
ã«æåããŸãã ãã ãã
ãã¹ã¿ãŒã«ã¯è¿œå ãããäž¡æ¹ã®è¡ãå«ãŸããããã«ãªãããã顧客ã¯éé¢ææ°æã2忝æãããšã«ãªããŸãã
function calculateAirfare(baseFare) { var fare = baseFare; fare += customsFee;
ïŒãã¡ããããã¯äžèªç¶ãªäŸã§ãããéè€ããã³ãŒããããžãã¯ã¯éåžžã«æ·±å»ãªåé¡ãåŒãèµ·ããå¯èœæ§ããããŸããããšãã°ã
iOSã§ã®SSL / TLSã®å®è£
ã«ç©Žã空ããªã©ã§ããïŒ
æåã«Aliceã®ãã«ãªã¯ãšã¹ãã®å€æŽã
masterã«ããŒãžãããšããŸãã
ããªãã«ãããgit diffã䜿çšããå Žåãããã®ãã«ãªã¯ãšã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
function calculateAirfare(baseFare) { var fare = baseFare; fare += immigrationFee; +++ fare += customsFee;
å
±éã®ç¥å
ãšæ¯èŒããŠå€æŽãåæããŠãããããããŒãžãã¿ã³ãã¯ãªãã¯ãããšãã«çºçãããšã©ãŒã®è
åšã«é¢ããèŠåã¯ãããŸããã
å®éããã«ãªã¯ãšã¹ããåæããå ŽåãBobãã©ã³ãããã®
倿ŽãããŒãžããåŸã ãã¹ã¿ãŒãã©ã®ããã«
å€åãããã確èªããããšæããŸãã
function calculateAirfare(baseFare) { var fare = baseFare; fare += customsFee;
ããã¯æãããªåé¡ã§ãã ãã«ãªã¯ãšã¹ãã®ã¬ãã¥ãŒæ
åœè
ã¯ãè¡ã®éè€ã«æ°ä»ããã³ãŒãããã¡ã€ãã©ã€ãºããå¿
èŠãããããšãããã«éç¥ããããšã§ãé倧ãªãšã©ãŒã
ãã¹ã¿ãŒã«ãæçµçã«ã¯æçµè£œåã«å±ããªãããã«ããŸãã
ãããã£ãŠãBitbucketã§ãã«ãªã¯ãšã¹ãã®å€æŽã®è¡šç€ºãå®è£
ããããšã«ããŸããã ãã«ãªã¯ãšã¹ãã衚瀺
ãããšãããŒãžã®çµæãå®éã«ã©ã®ããã«èŠããããããã
ãŸã ïŒã€ãŸããå®éã®çµæã®ã³ãããïŒã ãããå®çŸããããã«ããã©ã³ããå®éã«ããŒãžããçµæã®ã³ããããšã¿ãŒã²ãããã«ãªã¯ãšã¹ããã©ã³ãã®ããããšã®éãã瀺ããŸãã
git diff CD ïŒ Dã¯ããŒãžã³ãããïŒã¯ã2ã€ã®ãã©ã³ãéã®ãã¹ãŠã®éãã衚瀺ããŸãèå³ãããå Žåã¯ãåããªããžããªãè€æ°ã®ãã¹ãã£ã³ã°ãµã€ãã«é
眮ããŠãæ¯èŒã¢ã«ãŽãªãºã ã®éãã«ã€ããŠèª¬æããŸãã
Bitbucketã§äœ¿çšãããããŒãžã³ãããã®æ¯èŒã¯ãããŒãžæã«é©çšãããå®éã®å€æŽã瀺ããŠããŸãã æ¬ ç¹ã¯ããã®ã¢ã«ãŽãªãºã ãå®è£
ããã®ãããé£ãããå®è¡ããã®ã«éåžžã«å€ãã®ãªãœãŒã¹ãå¿
èŠãšããããšã§ãã
æ¯åºããã¢ãŒã·ã§ã³
ãŸããããŒãžã³ããã
Dã¯å®éã«ã¯ãŸã ååšããŠãããããã®äœæã¯æ¯èŒçé«äŸ¡ãªããã»ã¹ã§ãã æ¬¡ã«ãã³ããã
DãäœæããŠããã§çµäºããã ãã§ã¯ååã§ã¯ãããŸãããããŒãžã³ãããã®èŠªã³ãããã§ãã
Bãš
Cã¯ãã€ã§ã倿Žã§ããŸãã ããããã®èŠªã倿Žãããšããã«ãªã¯ãšã¹ãã®ããŒãžã®çµæãšããŠé©çšããã倿Žã»ãããæ¬è³ªçã«å€æŽããããããã«ãªã¯ãšã¹ãã®ã¹ã³ãŒãã倿ŽãããšåŒã³ãŸãã ãã«ãªã¯ãšã¹ãã
masterã®ãããªããŒãããããã©ã³ããã¿ãŒã²ããã«ããŠããå Žåãããããéåžžã«é »ç¹ã«ã¬ãã¥ãŒãããŸãã
ãã«ãªã¯ãšã¹ããã©ã³ãã倿Žããããã³ã«ãããŒãžã³ããããäœæãããŸãå®éã誰ãããã«èŠæ±ã
ãã¹ã¿ãŒãŸãã¯
æ©èœãã©ã³ãã«ã³ããããŸãã¯ããŒãžãããã³ã«ãBitbucketã¯æ°ããããŒãžã³ããããäœæããŠããã«èŠæ±ã®ãã©ã³ãéã®å®éã®éãã衚瀺ããå¿
èŠããããŸãã
ç«¶ååŠçã®ããŒãž
ãã«ãªã¯ãšã¹ãã®ãã©ã³ãéã®éãã衚瀺ããããã«ããŒãžãå®è¡ãããšãã®å¥ã®åé¡ã¯ãããŒãžã®ç«¶åã«å¯ŸåŠããå¿
èŠãããå Žåãããããšã§ãã gitãµãŒããŒã¯éã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã§åäœããŠããããããã®ãããªç«¶åã解決ãã人ã¯ããŸããã ããã¯ã¿ã¹ã¯ãããã«è€éã«ããŸãããå®éã«ã¯å©ç¹ã§ããããšãããããŸããã Bitbucketã§ã¯ãããŒãžã³ããã
Dã«ç«¶åããŒã«ãŒãå«ãããã©ã³ãéã®éãã衚瀺ãããšãã«ãã©ã°ãç«ãŠãŠããã«ãªã¯ãšã¹ãã«ç«¶åãå«ãŸããŠããããšãæç€ºããŸãã
ç·ã®ç·ã远å ãããèµ€ã®ç·ãåé€ãããé»è²ã®ç·ãç«¶åãæå³ããŸãããããã£ãŠããã«ãªã¯ãšã¹ãã«ç«¶åãå«ãŸããŠããããšãäºåã«æããã«ããã ãã§ãªããã¬ãã¥ãŒæ
åœè
ããããã©ã®ããã«è§£æ±ºãã¹ãããè°è«ããããšãã§ããŸãã ç«¶åã¯åžžã«å°ãªããšã2ã€ã®åŽé¢ã«åœ±é¿ããããããã«ãªã¯ãšã¹ãã¯ããã解決ããé©åãªæ¹æ³ãèŠã€ããã®ã«æé©ãªå Žæã§ãããšèããŠããŸãã
å®è£
ã®è€éããå¢ãã䜿çšãããã¢ãããŒãã®ãªãœãŒã¹éçŽæ§ã«ãããããããç§ãã¡ãBitbucketã§éžæããã¢ãããŒãã¯ãã«ãªã¯ãšã¹ããã©ã³ãéã§æãæ£ç¢ºã§å®çšçãªéããæäŸãããšèããŠããŸãã
å
ã®èšäºã®èè
ã§ããTim Pettersenã¯ãJIRAãFishEye / Crucibleãããã³Stashã®éçºã«åå ããŸããã 2013幎ã®åã以æ¥ã圌ã¯éçºããã»ã¹ãgitãç¶ç¶çãªçµ±åãšå±éãããã³éçºè
ãç¹ã«Bitbucketåãã®AtlassianããŒã«ã«ã€ããŠèªã£ãŠããŸãã ãã£ã ã¯ãããã®ããšãä»ã®ããšã«ã€ããŠã®ã¡ã¢ã
@kannonboyãšããä»®åã§Twitterã«å®æçã«æçš¿ããŠããŸãã
ãã®èšäºããããããããšãé¡ã£ãŠããŸãã 質åãã³ã¡ã³ãã«ãçãã§ããããšãå¬ããæããŸãã