äžçã§æã人æ°ã®ããããŒãžã§ã³ç®¡çã·ã¹ãã ãGitã®å éšæ§é ãæ¢ããŸããGitãªããžã§ã¯ããã¹ããŒãžã³ã°ãšãªã¢ãã³ãããå±¥æŽãªã©ãåŠã³ãå¹ççãªã³ã©ãã¬ãŒã·ã§ã³ãšã³ãŒã管çãå®çŸããŸãããã
æ·±ãæãäžããïŒå¹æçãªããŒãžã§ã³ç®¡çã®ããã®Gitå éšæ§é ã®çè§£
Gitã¯ãœãããŠã§ã¢éçºã«ãããããŒãžã§ã³ç®¡çã®ããã¡ã¯ãã¹ã¿ã³ããŒããšãªããäžçäžã®ããŒã ãè€éãªãããžã§ã¯ãã§å¹æçã«å
±åäœæ¥ã§ããããã«ãªããŸãããã»ãšãã©ã®éçºè
ã¯addãcommitãpushãpullã®ãããªåºæ¬çãªGitã³ãã³ãã«ç²ŸéããŠããŸãããGitã®æ ¹åºã«ããã¡ã«ããºã ãçè§£ããããšã§ãåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãã¯ãŒã¯ãããŒã®æé©åããããŠGitã®ããã³ã·ã£ã«ãæå€§éã«æŽ»çšããèœåã倧å¹
ã«åäžããŸãããã®èšäºã§ã¯ããã®åŒ·åãªããŒãžã§ã³ç®¡çã·ã¹ãã ãæ¯ããã³ã¢ã³ã³ã»ãããšããŒã¿æ§é ãæ¢ããªãããGitã®å
éšæ§é ãæ·±ãæãäžããŠãããŸãã
ãªãGitã®å éšæ§é ãçè§£ããå¿ èŠãããã®ãïŒ
æè¡çãªè©³çްã«å ¥ãåã«ãGitã®å éšæ§é ãçè§£ããããšããªãæçãªã®ããèããŠã¿ãŸãããã
- ãã©ãã«ã·ã¥ãŒãã£ã³ã°ïŒåé¡ãçºçããéïŒãããŠããã¯é¿ããããªãããšã§ããïŒãããæ·±ãçè§£ãããã°ãåé¡ããã广çã«èšºæã解決ããããšãã§ããŸããäŸãã°ãGitãã©ã®ããã«ãªããžã§ã¯ããä¿åããŠããããç¥ãããšã§ã
git pruneãgit gcã®ãããªã³ãã³ãã®åœ±é¿ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã - ã¯ãŒã¯ãããŒã®æé©åïŒGitããã©ã³ããšããŒãžãã©ã®ããã«ç®¡çããããææ¡ããããšã§ãããŒã ã®ããŒãºã«åããããããå¹ççã§åçåãããã¯ãŒã¯ãããŒãèšèšã§ããŸãããŸããããã¯ã䜿ã£ãŠGitãã«ã¹ã¿ãã€ãºããŠã¿ã¹ã¯ãèªååããéçºæšæºãåžžã«æºããããããã«ããããšãå¯èœã§ãã
- ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ïŒGitãã©ã®ããã«ããŒã¿ãä¿åã»ååŸããããçè§£ããããšã§ãå€§èŠæš¡ãªãªããžããªãè€éãªãããžã§ã¯ãã®ããã©ãŒãã³ã¹ãæé©åã§ããŸãããªããžããªããã€ãã©ã®ããã«ãªããã¯ãã¹ãããç¥ãããšã¯ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- é«åºŠãªäœ¿çšæ³ïŒGitã¯ãªããŒã¹ããã§ãªãŒããã¯ãé«åºŠãªãã©ã³ãæŠç¥ãªã©ãå¹ åºãé«åºŠãªæ©èœãæäŸããŠããŸãããããã®æè¡ãç¿åŸããããã«ã¯ãGitã®å éšæ§é ããã£ãããšçè§£ããããšãäžå¯æ¬ ã§ãã
- ããè¯ãã³ã©ãã¬ãŒã·ã§ã³ïŒããŒã ã®å šå¡ãèå°è£ã§äœãèµ·ãã£ãŠããããåºæ¬çã«ææ¡ããŠããã°ãã³ãã¥ãã±ãŒã·ã§ã³ã®éœéœ¬ãå€§å¹ ã«æžå°ããŸãããã®çè§£ã®åäžã¯ãå¹çã®åäžãšãããã°æéã®ççž®ã«ã€ãªãããŸãã
Gitå éšæ§é ã®äž»èŠã³ã³ããŒãã³ã
Gitã®å éšã¢ãŒããã¯ãã£ã¯ãããã€ãã®äž»èŠãªã³ã³ããŒãã³ããäžå¿ã«å±éãããŠããŸãã
- Gitãªããžã§ã¯ãïŒãããã¯Gitã®åºæ¬çãªæ§æèŠçŽ ã§ãããããŒã¿ãå 容ã¢ãã¬ã¹æå®å¯èœãªãªããžã§ã¯ããšããŠä¿åããŸãã
- ã¹ããŒãžã³ã°ãšãªã¢ïŒã€ã³ããã¯ã¹ïŒïŒæ¬¡ã®ã³ãããã®ããã«å€æŽãæºåããäžæçãªé åã§ãã
- ã³ãããå±¥æŽïŒãããžã§ã¯ãã®å±¥æŽã衚ãæåéå·¡åã°ã©ãïŒDAGïŒã§ãã
- ãã©ã³ããšã¿ã°ïŒç¹å®ã®ã³ããããžã®ãã€ã³ã¿ã§ãããã³ãããå±¥æŽãæŽçãããã²ãŒãããæ¹æ³ãæäŸããŸãã
- ã¯ãŒãã³ã°ãã£ã¬ã¯ããªïŒããŒã«ã«ãã·ã³äžã§å€æŽãå ãããã¡ã€ã«çŸ€ã§ãã
Gitãªããžã§ã¯ãïŒæ§æèŠçŽ
Gitã¯ãã¹ãŠã®ããŒã¿ããªããžã§ã¯ããšããŠä¿åããŸãããªããžã§ã¯ãã«ã¯äž»ã«4ã€ã®ã¿ã€ãããããŸãã
- ãããïŒBinary Large ObjectïŒïŒãã¡ã€ã«ã®å 容ã衚ããŸãã
- ããªãŒïŒãã£ã¬ã¯ããªã衚ãããããïŒãã¡ã€ã«ïŒãä»ã®ããªãŒïŒãµããã£ã¬ã¯ããªïŒãžã®åç §ãå«ã¿ãŸãã
- ã³ãããïŒç¹å®æç¹ã®ãªããžããªã®ã¹ãããã·ã§ããã衚ããäœæè ãã³ããã¿ãŒãã³ãããã¡ãã»ãŒãžãã«ãŒãããªãŒã芪ã³ããããžã®åç §ãªã©ã®ã¡ã¿ããŒã¿ãå«ã¿ãŸãã
- ã¿ã°ïŒç¹å®ã®ã³ããããžã®ååä»ãåç §ã§ãã
åãªããžã§ã¯ãã¯ããã®å 容ã«åºã¥ããŠèšç®ãããäžæã®SHA-1ããã·ã¥ã«ãã£ãŠèå¥ãããŸãããã®å 容ã¢ãã¬ã¹æå®å¯èœãªã¹ãã¬ãŒãžã«ãããGitã¯éè€ããŒã¿ãå¹ççã«æ€åºããä¿åãé¿ããããšãã§ããŸãã
äŸïŒããããªããžã§ã¯ãã®äœæ
äŸãã°ãhello.txtãšããååã®ãã¡ã€ã«ã«ãHello, world!\nããšããå
容ããããšããŸããGitã¯ãã®å
容ã衚ãããããªããžã§ã¯ããäœæããŸããããããªããžã§ã¯ãã®SHA-1ããã·ã¥ã¯ããªããžã§ã¯ãã®ã¿ã€ããšãµã€ãºãå«ãå
容ã«åºã¥ããŠèšç®ãããŸãã
echo "Hello, world!" | git hash-object -w --stdin
ãã®ã³ãã³ãã¯ããããªããžã§ã¯ãã®SHA-1ããã·ã¥ãåºåããŸããããã¯d5b94b86b244e12a8b9964eb39edef2636b5874bã®ããã«ãªããŸãã-wãªãã·ã§ã³ã¯ããªããžã§ã¯ãããªããžã§ã¯ãããŒã¿ããŒã¹ã«æžã蟌ãããGitã«æç€ºããŸãã
ã¹ããŒãžã³ã°ãšãªã¢ïŒã€ã³ããã¯ã¹ïŒïŒã³ãããã®æºå
ã¹ããŒãžã³ã°ãšãªã¢ïŒã€ã³ããã¯ã¹ãšãåŒã°ããïŒã¯ãã¯ãŒãã³ã°ãã£ã¬ã¯ããªãšGitãªããžããªã®éã«äœçœ®ããäžæçãªé åã§ããããã§å€æŽãã³ãããããåã«æºåããŸãã
git addãå®è¡ãããšãã¯ãŒãã³ã°ãã£ã¬ã¯ããªããã¹ããŒãžã³ã°ãšãªã¢ã«å€æŽã远å ããŸããã¹ããŒãžã³ã°ãšãªã¢ã«ã¯ã次ã®ã³ãããã«å«ãŸãããã¡ã€ã«ã®ãªã¹ããå«ãŸããŠããŸãã
äŸïŒã¹ããŒãžã³ã°ãšãªã¢ãžã®ãã¡ã€ã«ã®è¿œå
git add hello.txt
ãã®ã³ãã³ãã¯hello.txtãã¡ã€ã«ãã¹ããŒãžã³ã°ãšãªã¢ã«è¿œå ããŸããGitã¯ãã¡ã€ã«ã®å
容ã«å¯ŸããŠããããªããžã§ã¯ããäœæãããã®ããããªããžã§ã¯ããžã®åç
§ãã¹ããŒãžã³ã°ãšãªã¢ã«è¿œå ããŸãã
git statusã³ãã³ãã䜿çšããŠã¹ããŒãžã³ã°ãšãªã¢ã®å
容ã衚瀺ã§ããŸãã
ã³ãããå±¥æŽïŒæåéå·¡åã°ã©ãïŒDAGïŒ
ã³ãããå±¥æŽã¯Gitã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã®å¿èéšã§ããããã¯åããŒããã³ãããã衚ãæåéå·¡åã°ã©ãïŒDAGïŒã§ããåã³ãããã«ã¯ä»¥äžãå«ãŸããŸãã
- äžæã®SHA-1ããã·ã¥
- ã«ãŒãããªãŒãžã®åç §ïŒãã®ã³ãããæç¹ã§ã®ãªããžããªã®ç¶æ ã衚ãïŒ
- 芪ã³ããããžã®åç §ïŒãããžã§ã¯ãã®å±¥æŽã衚ãïŒ
- äœæè ãšã³ããã¿ãŒã®æ å ±ïŒååãã¡ãŒã«ã¢ãã¬ã¹ãã¿ã€ã ã¹ã¿ã³ãïŒ
- ã³ãããã¡ãã»ãŒãž
ã³ãããå±¥æŽã«ãããæéãšãšãã«å€æŽã远跡ãã以åã®ããŒãžã§ã³ã«æ»ããããåããããžã§ã¯ãã§ä»ã®äººãšå ±åäœæ¥ãããããããšãã§ããŸãã
äŸïŒã³ãããã®äœæ
git commit -m "Add hello.txt file"
ãã®ã³ãã³ãã¯ãã¹ããŒãžã³ã°ãšãªã¢ã®å€æŽãå«ãæ°ããã³ããããäœæããŸããGitã¯ãã®æç¹ã§ã®ãªããžããªã®ç¶æ ã衚ãããªãŒãªããžã§ã¯ããšããã®ããªãŒãªããžã§ã¯ãããã³èŠªã³ãããïŒãã©ã³ãã®åã®ã³ãããïŒãåç §ããã³ããããªããžã§ã¯ããäœæããŸãã
git logã³ãã³ãã䜿çšããŠã³ãããå±¥æŽã衚瀺ã§ããŸãã
ãã©ã³ããšã¿ã°ïŒã³ãããå±¥æŽã®ããã²ãŒã·ã§ã³
ãã©ã³ããšã¿ã°ã¯ãã³ãããå±¥æŽå ã®ç¹å®ã®ã³ããããžã®ãã€ã³ã¿ã§ãããããã¯ãããžã§ã¯ãã®å±¥æŽãæŽçããããã²ãŒãããæ¹æ³ãæäŸããŸãã
ãã©ã³ãã¯å¯å€ã®ãã€ã³ã¿ã§ãããç°ãªãã³ããããæãããã«ç§»åã§ããŸããéåžžãæ°æ©èœããã°ä¿®æ£ã®éçºäœæ¥ãåé¢ããããã«äœ¿çšãããŸãã
ã¿ã°ã¯äžå€ã®ãã€ã³ã¿ã§ãããåžžã«åãã³ããããæããŸããéåžžãç¹å®ã®ãªãªãŒã¹ããã€ã«ã¹ããŒã³ãããŒã¯ããããã«äœ¿çšãããŸãã
äŸïŒãã©ã³ãã®äœæ
git branch feature/new-feature
ãã®ã³ãã³ãã¯ãçŸåšã®ãã©ã³ãïŒéåžžã¯mainãŸãã¯masterïŒãšåãã³ããããæãfeature/new-featureãšããååã®æ°ãããã©ã³ããäœæããŸãã
äŸïŒã¿ã°ã®äœæ
git tag v1.0
ãã®ã³ãã³ãã¯ãçŸåšã®ã³ããããæãv1.0ãšããååã®æ°ããã¿ã°ãäœæããŸãã
ã¯ãŒãã³ã°ãã£ã¬ã¯ããªïŒããŒã«ã«ãã¡ã€ã«
ã¯ãŒãã³ã°ãã£ã¬ã¯ããªã¯ãçŸåšäœæ¥ããŠããããŒã«ã«ãã·ã³äžã®äžé£ã®ãã¡ã€ã«ã§ããããã§ãã¡ã€ã«ã«å€æŽãå ããã³ãããã®æºåãããŸãã
Gitã¯ã¯ãŒãã³ã°ãã£ã¬ã¯ããªã§è¡ã£ã倿Žã远跡ãããããã®å€æŽãç°¡åã«ã¹ããŒãžã³ã°ããŠã³ãããã§ããããã«ããŸãã
é«åºŠãªæŠå¿µãšã³ãã³ã
Gitã®å éšæ§é ããã£ãããšçè§£ããããããé«åºŠãªæŠå¿µãã³ãã³ããæ¢æ±ãå§ããããšãã§ããŸãã
- ãªããŒã¹ïŒã³ãããå±¥æŽãæžãæããŠãããã¯ãªãŒã³ã§çŽç·çãªå±¥æŽãäœæããŸãã
- ãã§ãªãŒããã¯ïŒãããã©ã³ãããç¹å®ã®ã³ããããå¥ã®ãã©ã³ãã«é©çšããŸãã
- ã€ã³ã¿ã©ã¯ãã£ãã¹ããŒãžã³ã°ïŒãã¡ã€ã«å šäœã§ã¯ãªãããã¡ã€ã«ã®äžéšãã¹ããŒãžã³ã°ããŸãã
- Gitããã¯ïŒã³ããããããã·ã¥ãªã©ãç¹å®ã®Gitã€ãã³ãã®ååŸã§èªåçã«å®è¡ãããã¹ã¯ãªããã§ãã
- ãµãã¢ãžã¥ãŒã«ãšãµãããªãŒïŒä»ã®Gitãªããžããªãžã®äŸåé¢ä¿ã管çããŸãã
- Git LFS (Large File Storage)ïŒãªããžããªãè¥å€§åãããããšãªããGitã§å€§ããªãã¡ã€ã«ã管çããŸãã
å®è·µçãªäŸãšã·ããªãª
Gitã®å éšæ§é ãçè§£ããããšããçŸå®äžçã®åé¡ã解決ããã®ã«ã©ã®ããã«åœ¹ç«ã€ããããã€ãã®å®è·µçãªäŸãèããŠã¿ãŸãããã
- ã·ããªãªïŒãŸã ã³ãããããŠããªããã¡ã€ã«ã誀ã£ãŠåé€ããŠããŸã£ãã
解決çïŒ
git fsck --lost-foundã䜿çšããŠå€±ãããããããªããžã§ã¯ããèŠã€ãããã¡ã€ã«ãå埩ããŸãã - ã·ããªãªïŒæ©å¯æ
å ±ãåé€ããããã«ã³ãããå±¥æŽãæžãæãããã
解決çïŒ
git filter-branchãŸãã¯git rebase -iã䜿çšããŠã³ãããå±¥æŽãæžãæããæ©å¯æ å ±ãåé€ããŸããããã¯å±¥æŽãæžãæãããããå ±åäœæ¥è ã«åœ±é¿ãäžããå¯èœæ§ãããããšã«æ³šæããŠãã ããã - ã·ããªãªïŒå€§èŠæš¡ãªãªããžããªã®ããã©ãŒãã³ã¹ãæé©åãããã
解決çïŒ
git gc --prune=now --aggressiveã䜿çšããŠãªããžããªããªããã¯ããäžèŠãªãªããžã§ã¯ããåé€ããŸãã - ã·ããªãªïŒã³ãŒãå質ã®åé¡ãèªåçã«ãã§ãã¯ããã³ãŒãã¬ãã¥ãŒããã»ã¹ãå®è£ ãããã 解決çïŒGitããã¯ã䜿çšããŠãã¡ã€ã³ãªããžããªãžã®ã³ãããã®ããã·ã¥ãèš±å¯ããåã«ããªã³ã¿ãŒãã³ãŒãåæããŒã«ãå®è¡ããŸãã
忣ããŒã ã®ããã®GitïŒã°ããŒãã«ãªèŠç¹
Gitã®åæ£åã®æ§è³ªã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãå Žæã§äœæ¥ããã°ããŒãã«ããŒã ã«ãšã£ãŠçæ³çã§ãã忣ç°å¢ã§Gitã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãã
- æç¢ºãªãã©ã³ãæŠç¥ã確ç«ããïŒGitflowãGitHub Flowã®ãããªæç¢ºã«å®çŸ©ããããã©ã³ãã¢ãã«ã䜿çšããŠãæ©èœéçºããã°ä¿®æ£ããªãªãŒã¹ã管çããŸãã
- ã³ãŒãã¬ãã¥ãŒã«ãã«ãªã¯ãšã¹ãã䜿çšããïŒãã¹ãŠã®ã³ãŒã倿Žã«ãã«ãªã¯ãšã¹ãã䜿çšããããããŒã ã¡ã³ããŒã«å¥šå±ããããŒãžåã®åŸ¹åºçãªã³ãŒãã¬ãã¥ãŒãšè°è«ãå¯èœã«ããŸãã
- 广çã«ã³ãã¥ãã±ãŒã·ã§ã³ããšãïŒSlackãMicrosoft Teamsã®ãããªã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ã䜿çšããŠãéçºäœæ¥ã調æŽããã³ã³ããªã¯ãã解決ããŸãã
- CI/CDã§ã¿ã¹ã¯ãèªååããïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çãããã€ã¡ã³ãïŒCI/CDïŒãã€ãã©ã€ã³ã䜿çšããŠããã¹ãããã«ãããããã€ã¡ã³ãããã»ã¹ãèªååããã³ãŒãå質ãšè¿ éãªãªãªãŒã¹ãµã€ã¯ã«ã確ä¿ããŸãã
- ã¿ã€ã ãŸãŒã³ã«é æ ®ããïŒç°ãªãã¿ã€ã ãŸãŒã³ã«å¯Ÿå¿ããããã«ãäŒè°ãã³ãŒãã¬ãã¥ãŒãã¹ã±ãžã¥ãŒã«ããŸãã
- ãã¹ãŠãææžåããïŒãã©ã³ãæŠç¥ãã³ãŒãã£ã³ã°æšæºããããã€ã¡ã³ãæé ãªã©ããããžã§ã¯ãã®å æ¬çãªããã¥ã¡ã³ããç¶æããŸãã
çµè«ïŒçç£æ§åäžã®ããã®Gitå éšæ§é ã®ç¿åŸ
Gitã®å éšæ§é ãçè§£ããããšã¯ãåãªãåŠè¡çãªæŒç¿ã§ã¯ãããŸãããããã¯ããœãããŠã§ã¢éçºè ãšããŠã®çç£æ§ãšå¹çãå€§å¹ ã«åäžãããããšãã§ããå®è·µçãªã¹ãã«ã§ããGitãæ¯ããã³ã¢ã³ã³ã»ãããšããŒã¿æ§é ãææ¡ããããšã§ãåé¡ããã广çã«ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããã¯ãŒã¯ãããŒãæé©åããGitã®ããã³ã·ã£ã«ãæå€§éã«æŽ»çšããããšãã§ããŸããå°èŠæš¡ãªå人ãããžã§ã¯ãã«åãçµãã§ããå Žåã§ããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã«åãçµãã§ããå Žåã§ããGitãžã®ããæ·±ãçè§£ã¯ãééããªãããªããã°ããŒãã«ãªãœãããŠã§ã¢éçºã³ãã¥ããã£ã«ãšã£ãŠãã䟡å€ã®ãããå¹ççãªè²¢ç®è ã«ããã§ãããã
ãã®ç¥èã¯ãäžçäžã®éçºè ãšã·ãŒã ã¬ã¹ã«ååãã倧éžãæåãè¶ãããããžã§ã¯ãã«è²¢ç®ããåãäžããŠãããŸãããããã£ãŠãGitã®åãåãå ¥ããããšã¯ãåã«ããŒã«ãç¿åŸããããšã§ã¯ãªããã°ããŒãã«ãªãœãããŠã§ã¢éçºãšã³ã·ã¹ãã ã®ãã广çã§ååçãªã¡ã³ããŒã«ãªãããšãªã®ã§ãã