๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

"Git" ํƒœ๊ทธ๋กœ ์—ฐ๊ฒฐ๋œ 1๊ฐœ ๊ฒŒ์‹œ๋ฌผ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํƒœ๊ทธ ๋ณด๊ธฐ

ยท ์•ฝ 6๋ถ„

๋‚˜์˜ ๊ฐ์˜ค/๊ณ„ํš#

  1. ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ ๋๋‚˜๊ณ  ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธํ•  ์‚ฌ๋žŒ๋“ค ๋งŒ๋‚˜๊ธฐ

  2. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์˜๊ฒฌ ์ž˜ ๋“ฃ๊ธฐ

  3. ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€ ์นœ์ ˆํžˆ ์•Œ๋ ค์ฃผ๊ธฐ

  4. ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ์ž˜ ์งˆ๋ฌธํ•˜๊ธฐ

  5. ๋ฐฐ์šด ๊ฒƒ์€ ๊ฐœ์ธ์ ์œผ๋กœ ์จ๋จน์–ด ๋ณด๊ธฐ

  6. ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์€ ์˜ค๋Š˜ ๋ณต์Šตํ•˜๊ธฐ

Git / Github#

Git์— ๊ด€ํ•˜์—ฌ#

Git์€ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ(Linus Torvalds)๊ฐ€ ๋ฆฌ๋ˆ…์Šค(Linux) ์ปค๋„์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ ์†Œ์Šค๊ด€๋ฆฌ ํˆด์ด๋‹ค. (ใ„ทใ„ท) Git ์ด์ „์˜ ํ˜•์ƒ๊ด€๋ฆฌ ํˆด์€ SVN, CVS ๋“ฑ์ด ์žˆ์—ˆ์Œ.

๊ฐ„๋‹จํ•œ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— Git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‚œ์ด๋„๋ฅผ ๋†’์ด์ง€๋งŒ, ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋‚œ์ด๋„๋ฅผ ์ƒ๋‹นํžˆ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜์ ์ด๋‹ค.

์•ˆํ‹ฐ ํŒจํ„ด#

  • git add . : ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ํ•œ๋ฒˆ์— ์Šคํ…Œ์ด์ง• ํ•˜์ง€ ๋ง์•„๋ผ. ํ•œ ํŒŒ์ผํ•œ ํŒŒ์ผ ์”ฉ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๋ฉด์„œ ์ปค๋ฐ‹ํ•ด๋ผ.

  • git commit -m "" : ์ปค๋ฐ‹์€ git commit ์œผ๋กœ ์ œ๋ชฉ๊ณผ ํ•จ๊ป˜ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊นŒ์ง€ ๋ง๋ถ™์—ฌ์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ •์„์ด๋‹ค.

์ด๋Ÿฌํ•œ ์•ˆํ‹ฐ ํŒจํ„ด์ด ๋งŒ์—ฐํ•ด ์žˆ์Œ. ์ข‹์€ ์ปค๋ฐ‹ ์Šต๊ด€์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

Git flow#

Git-flow, Github flow, Gitlab flow ๊ฐ๊ฐ์ด ๋‹ค๋ฅธ ํ˜•์ƒ ๊ด€๋ฆฌ ์ „๋žต์ด๋‹ค. ์ด ์™ธ์—๋„ ์ˆ˜๋งŽ์€ flow ๋“ค์ด ์กด์žฌ. ํ•˜์ง€๋งŒ Git-flow ๋ผ๋Š” ์ด๋ฆ„ ๋•Œ๋ฌธ์— Git flow๊ฐ€ ์ •์„, ํ‘œ์ค€์ด๋ผ๋Š” ์˜คํ•ด๋ฅผ ํ•˜๊ธฐ ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ Git flow๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์กฐ์ง, ํŒ€์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. Git flow ์™ธ์—๋„ ํ›Œ๋ฅญํ•œ flow ์ „๋žต๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— Git flow์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ ๋ฌด์กฐ๊ฑด GIt flow๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ดํ‘œ์ค€์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

Understanding the GitHub flow

์šฐ๋ฆฐ Git-flow๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์š” - ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

ํ•˜๋ฃจ์— 1000๋ฒˆ ๋ฐฐํฌํ•˜๋Š” ์กฐ์ง ๋˜๊ธฐ | ๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด#

  • ๋ฉ”์‹œ์ง€๋Š” ํ•œ๊ธ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ํŒ€์› ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๋‚จ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. ์ ๋‹นํ•œ ๋‹จ์–ด๋ฅผ์ฐพ์ง€ ๋ชปํ•œ ์–ด์ƒ‰ํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ๊ธ€๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ๋‚ซ๋‹ค.

    ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋‹ˆ๊นŒ

    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ œ๋ชฉ์„ ์˜์–ด๋กœ ๋‚จ๊ธฐ๊ณ  ์„ค๋ช…์„ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

    ์‹ค์ œ๋กœ TDD๋ฅผ ์ž˜ํ•˜๋Š” ํŒ€์—์„  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ฉ”์†Œ๋“œ ๋ช…์„ ํ•œ๊ธ€๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ํ›จ์”ฌ ๋ช…ํ™•ํ•œ ๋ฉ”์†Œ๋“œ ๋ช…์œผ๋กœ ์ธํ•ด ์ข‹์€ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

  • fork ํ›„ PR๊ณผ branch ํ›„ PR์˜ ์ฐจ์ด

    ๊ธฐ๋ณธ์ ์œผ๋กœ fork๋Š” ๋‚ด๊ฐ€ ์ด ์ €์žฅ์†Œ์— ๊ถŒํ•œ์ด ์—†์„ ๋•Œ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ๋“ฑ..

Git ๋ช…๋ น์–ด์™€ ๋™์ž‘ ์›๋ฆฌ#

Git ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ๋ฐฐ์šด ๊ฒƒ์€ ์ฒ˜์Œ์ด์—ˆ๊ณ  ๊ธฐ์กด ์•Œ๊ณ  ์žˆ๋˜ ๊ฐœ๋…์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š”๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜๋‹ค.

Learn Git Branching

  • git init : ์ˆจ๊ฒจ์ง„ ํด๋”๊ฐ€ ํ•˜๋‚˜ ์ƒ๊น€

    • .git : ๋กœ์ปฌ ์ €์žฅ์†Œ

      • git์˜ ์ €์žฅ ๋‹จ์œ„๋Š” ์ปค๋ฐ‹

        • Working directory โ†’ Stage โ†’ Commit
    • GitHub or GitLab ... - ์›๊ฒฉ ์ €์žฅ์†Œ

    • git reset โ†’ ๋‚ ์•„๊ฐ€์ง€ ์•Š์Œ.

    • ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท

    • ์ปค๋ฐ‹์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ ํŠธ๋ฆฌ์— ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋‹ฌ๋ ค์„œ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์„ ๊ตฌ์„ฑํ•จ

    • git cat-file -t ce013

    • git cat-file blob ce013

    • git cat-file -t HEAD

    • git log -n1

    • git cat-file -t 7da33cf4

    • git cat-file commit 7da33cf4

    • git ls-tree aaa96ced2d9a1c8e ...

    • branch๋Š” ํ—ค๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ผ ๋ฟ

    • ์ปค๋ฐ‹์€ ๋ถ€๋ชจ ์ปค๋ฐ‹์ด ์žˆ๋‹ค

    • git checkout C4 vs git checkout hello

    • git์€ diff๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค.

    • svn์€ diff๋ฅผ ์ €์žฅํ•œ๋‹ค

    • tree .git

    • ๋ธŒ๋žœ์น˜๋ฅผ ๋งŽ์ด ๋งŒ๋“ค์–ด๋„ ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • git status

    • git checkout master

    • ๋ธŒ๋žœ์น˜๋Š” ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ์ผ ๋ฟ ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค.

    • ๊นƒ์—๋Š” ์ปค๋ฐ‹๋ฐ–์— ์—†๋‹ค. ํƒœ๊ทธ, ๋ธŒ๋žœ์น˜, ์–ด์ฉŒ๊ณ ๋Š” ๋‹ค ์ฐธ์กฐ ๋ณ€์ˆ˜์ผ ๋ฟ์ด๋‹ค ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค.

    • git reset โ€”hard Head~1 ์‹œ์— ๋ณต์›ํ•˜๋Š” ๋ฒ•

    • git branch test ์ฒดํฌ์„ฌ

    • git reflog ๋ชจ๋“  ์ฐธ์กฐ ๋ณ€์ˆ˜๋“ค์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋Š” ๋ช…๋ น

    • git push ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๊ฒƒ์„ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๋ณด๋ƒ„