Skip to content

Latest commit

ย 

History

History
188 lines (111 loc) ยท 6.31 KB

2019-04-04-AboutGit.md

File metadata and controls

188 lines (111 loc) ยท 6.31 KB

2019๋…„ 4์›” 4์ผ

Git = DVCS(Distributed Version Control System)


Git ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

  • Git์€ ์˜คํ”ˆ์†Œ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. (ex. Linux)

  • Git์„ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Git์€ ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฌ๋Ÿฌ๋ช…์ด ๋™์‹œ์— ๋ณ‘๋ ฌ์ ์œผ๋กœ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

    • ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ํ•ด์ค€๋‹ค.
    • ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

Git์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ  ํ• ๊นŒ?

  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ USB์— ๋‹ด์•„์„œ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์นดํ†ก, ์ด๋ฉ”์ผ ๋“ฑ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ  ํ•ด์•ผํ•œ๋‹ค.

    • ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด A๊ฐ€ ์ˆ˜์ •ํ•œ ๋‚ด์—ญ์ด B๋ผ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋™์‹œ์— ์ž‘์—… ํ•˜๊ธฐ ํž˜๋“ค๋‹ค

SVN๊ณผ ์ฐจ์ด์ 

  • SVN์€ ์ค‘์•™ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • Git์€ ์ค‘์•™ ์„œ๋ฒ„์˜ ๊ฐœ๋…์ด ์—†๋‹ค.

    • ์ค‘์•™ ์„œ๋ฒ„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ• ์ง€๋ผ๋„, ๊ทธ ์„œ๋ฒ„๊ฐ€ ๋ง๊ฐ€์กŒ์„ ๋•Œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณต๊ตฌ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

Git์˜ ์žฅ์ 

1. ๋ถ„์‚ฐ์  ๊ฐœ๋ฐœ

  • ์ „์ฒด ๊ฐœ๋ฐœ ๋‚ด์—ญ์„ ๊ฐ ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ ๊ฐ๊ฐ์˜ ์ˆ˜์ • ๋‚ด์šฉ์„ ํ•ฉ์น (Merge) ์ˆ˜ ์žˆ๋‹ค.

2. ํšจ์œจ์  ๊ฐœ๋ฐœ

  • ๋ณ€๊ฒฝ ์ด๋ ฅ์ด ๋งŽ์•„๋„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ๋งŒ ์ €์žฅํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

    • ๋ชจ๋“  ์ปค๋ฐ‹์— ๋Œ€ํ•ด checksum(HASH) ์„ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ(SHA-1)
    • Git์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์Šค๋ƒ…์ƒท์„ ์ €์žฅํ•œ๋‹ค.
    • ํŒŒ์ผ ๋ฐ ์Šค๋ƒ…์ƒต์„ ํ•ด์‹œํ•˜์—ฌ ๋ฒ„์ „ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ์ฒดํฌํ•œ๋‹ค.

3. ๋น„์„ ํ˜•์  ๊ฐœ๋ฐœ

  • ๋ธŒ๋žœ์น˜๋ฅผ ์ด์šฉํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๋ธŒ๋žœ์น˜ ๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ๋ณ€๊ฒฝ ์ด๋ ฅ ๋ณด์žฅ

  • ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜์—ฌ ์–ธ์ œ๋“ ์ง€ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

Git ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

  1. git clone github repository url

  2. git init ( .git ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์—ญํ• )

    • .git = ๋กœ์ปฌ ์ €์žฅ์†Œ
    • GitHub = ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ
  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…ํ•˜๋Š” ๊ณต๊ฐ„

    • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ(working dir ๋˜๋Š” working tree)
    • ํŒŒ์ผ(์†Œ์Šค์ฝ”๋“œ) ํŽธ์ง‘

Git

  • commit
    • commit = ๊ฒŒ์ž„์˜ save point
    • ํŒŒ์ผ ๋ฐ ํด๋”์˜ ์ถ”๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•œ๋‹ค.
    • ์ปค๋ฐ‹์€ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
    • ํ•œ ๋ฒˆ ์ปค๋ฐ‹์„ ํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋œ๋‹ค.
    • ์–ด๋””์—? ๋กœ์ปฌ์ €์žฅ์†Œ == ๋‚ด ์ปดํ“จํ„ฐ์˜ .git ํŒŒ์ผ
    • .git ํŒŒ์ผ์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ
      • .git ํŒŒ์ผ์„ ์‚ญ์ œํ•œ ๊ฒฝ์šฐ
      • ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ๋ง๊ฐ€์ง„ ๊ฒฝ์šฐ
    • ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ธฐ์œ„ํ•ด ์›๊ฒฉ์ €์žฅ์†Œ์—๋„ ์ €์žฅํ•œ๋‹ค.
      • ์›๊ฒฉ์ €์žฅ์†Œ = GitHub

git_commit

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://backlog.com/git-tutorial/kr/intro/intro1_3.html

์›๊ฒฉ์ €์žฅ์†Œ(RR): ์ปค๋ฐ‹ ํŒŒ์ผ์ด ์›๊ฒฉ์— ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„(GitHub)
๋กœ์ปฌ์ €์žฅ์†Œ(LR): ์ปค๋ฐ‹ ํŒŒ์ผ์ด ๋‚ด ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„(.git ํŒŒ์ผ)
์Šคํ…Œ์ด์ง€(STAGE): ์ปค๋ฐ‹์„ ์ค€๋น„ํ•˜๋Š” ๊ณต๊ฐ„
์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ(WD): ์†Œ์Šค ์ž‘์„ฑ ๋ฐ ํŽธ์ง‘ํ•˜๋Š” ๊ณต๊ฐ„
  • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ --add--> ์Šคํ…Œ์ด์ง€ --commit--> ๋กœ์ปฌ์ €์žฅ์†Œ--push-->์›๊ฒฉ์ €์žฅ์†Œ

img

  • git status

    • git ์ƒํƒœ ํ™•์ธ
    • ๊นจ๋—ํ•œ ์ƒํƒœ: WD - STAGE - LR ๋‚ด ํŒŒ์ผ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ์—†์ด ๋ชจ๋‘ ๊ฐ™์€ ์ƒํƒœ
  • add

    • ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฐ๋‹ค
  • commit

    • ์Šคํ…Œ์ด์ง€์˜ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์ปค๋ฐ‹ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค
  • push

    • ๋กœ์ปฌ์ €์žฅ์†Œ ํŒŒ์ผ์„ ์›๊ฒฉ์ €์žฅ์†Œ์— ์—…๋กœ๋“œ ํ•œ๋‹ค.

    • ๋กœ์ปฌ์ €์žฅ์†Œ์™€ ์›๊ฒฉ์ €์žฅ์†Œ๊ฐ€ ๋™์ผํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  • fetch

    • (์›๊ฒฉ์ €์žฅ์†Œ์—์„œ ๋กœ์ปฌ์ €์žฅ์†Œ๋กœ)๊ฐ€์ ธ์˜จ๋‹ค
    • ์›๊ฒฉ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค. (.git ํฌํ•จ)
  • pull

    • fetch + merge
    • ๊ฐ€์ ธ์™€ ๋ณ‘ํ•ฉํ•˜๊ธฐ
    • ์›๊ฒฉ์ €์žฅ์†Œ์˜ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ LR-STAGE-WD์— ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ
  • git commit --amend

    • ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ฑ… ์ถ”์ฒœ

    • Pro GIt: ๋ฐ˜๋“œ์‹œ ์ฝ์–ด ๋ณผ ๊ฒƒ! ๋„์›€ ๋งŽ์ด ๋œ๋‹ค.

Tip

  • ํ•ญ์ƒ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ๋‹ค!

  • ์ปค๋ฐ‹์€ ์˜๋ฏธ์žˆ๋Š” ์ž‘์—…์„ ํ–ˆ์„ ๋•Œ ํ•œ๋‹ค. - ์˜๋ฏธ์—†๋Š” ์ปค๋ฐ‹์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ ํ•  ๋•Œ๋Š” status๋ฅผ ๊นจ๋—ํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™๋‹ค.

    • add, commit ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™

    • ๋˜๋Š” stash ๋ผ๋Š” ์ž„์‹œ์ €์žฅ์†Œ์— ์ €์žฅํ•ด๋†“๊ณ  ์ด๋™

      • ๋‹น์žฅ ์ปค๋ฐ‹ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ผ ๋•Œ stash์— ์ €์žฅํ•ด๋†“๊ณ  ์ด๋™ํ•œ๋‹ค.
  • git์€ ์ค‘๋ณต๋œ ๋‚ด์šฉ์˜ ํŒŒ์ผ์€ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • .git์— ์ค‘๋ณต๋œ ๋‚ด์šฉ์˜ ํŒŒ์ผ์€ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. - ๊ทธ๋ž˜์„œ ๋น ๋ฅด๋‹ค
  • ์ปค๋ฐ‹์€ ํ•ญ์ƒ ๋ถ€๋ชจ ์ปค๋ฐ‹์„ ๊ฐ€์ง„๋‹ค.

    • ๋ถ€๋ชจ์ปค๋ฐ‹ = HEAD
  • HEAD๋Š” ์ง€๊ธˆ ์ž‘์—…ํ•˜๋Š” ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€ํ‚ค๋ฆฐ๋‹ค

    • ํ˜„์žฌ ์ž‘์—…ํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์•ž ๋ถ€๋ถ„(๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹)์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

    • ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (detached HEAD) -- ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ

  • ๋ธŒ๋žœ์น˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜์ด๋‹ค.

    • ์ฐธ์กฐ๋ณ€์ˆ˜ ๊ทธ ์ด์ƒ ๊ทธ ์ดํ•˜๋„ ์•„๋‹ˆ๋‹ค.
  • checkout์€ HEAD๋ฅผ ์˜ฎ๊ธด๋‹ค.

  • reset์€ branch์™€ HEAD๋ฅผ ๋ชจ๋‘ ์˜ฎ๊ธด๋‹ค.

  • rebase๋Š” ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹๋“ค์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋ณต์‚ฌํ•ด ์˜ฎ๊ธด๋‹ค. (ํ†ต์งธ๋กœ ์˜ฎ๊ธด๋‹ค.)

    • rebase๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.
    • rebase๋Š” ํ•ญ์ƒ ์กฐ์‹ฌํ•ด์„œ ์จ์•ผํ•œ๋‹ค.
  • merge๋Š” ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค.

    • ๊ธฐ์กด ์ปค๋ฐ‹์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ ์ƒํƒœ๋กœ ์žˆ๋‹ค.

      • rebase์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
      • rebase๋ณด๋‹ค ์•ˆ์ „ํ•˜๋‹ค.
  • ํ„ฐ๋ฏธ๋„ ์ถ”์ฒœ

    • ๋งฅ๋ถ์—์„œ๋Š” zsh
    • ์„œ๋ฒ„์—์„œ๋Š” bash

์˜ค๋Š˜ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๋‘ ๊ฐ€์ง€!

  • ์ปค๋ฐ‹์€ ๋‹ค์‹œ ์‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜์ด๋‹ค.