๐Ÿ“

3. Git

1. Git์ด๋ž€?

  • Git์€ ์†Œ์Šค์ฝ”๋“œ ๋ฐ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ๋‚ด์—ญ์„ ์ €์žฅํ•˜๋Š” ๋ถ„์‚ฐ๋ฒ„์ „๊ด€๋ฆฌ์‹œ์Šคํ…œ ์ž…๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ์— ์˜ํ•ด ์ฒ˜์Œ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • Github, Bitbucket, Gitlab ๋“ฑ์˜ Git๊ธฐ๋ฐ˜์˜ ๋ฒ„์ „๊ด€๋ฆฌํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

2. Git ์„ค์น˜ํ•˜๊ธฐ

2-1. Ubuntu์—์„œ ์„ค์น˜ํ•˜๊ธฐ

๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Git์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
$ sudo apt-get update $ sudo apt-get install git
ย 

2-2. Mac ์„ค์น˜ํ•˜๊ธฐ

Mac์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Git์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
$ git usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] ...
ย 
์„ค์น˜๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  1. https://git-scm.com/ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  1. Download for Mac ๋ฒ„ํŠผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  1. ๋‹ค์šด ๋ฐ›์€ ํŒŒ์ผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ย 

2-3. Windows ์„ค์น˜ํ•˜๊ธฐ

  1. https://git-scm.com/ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  1. Download for Windows ๋ฒ„ํŠผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  1. ๋‹ค์šด ๋ฐ›์€ ํŒŒ์ผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ย 

3. ๋ฒ„์ „ ํ™•์ธ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •

๋‹ค์šด๋ฐ›์€ Git ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
$ git --version git version 2.19.1
ย 
Git์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค.
$ git config --global user.name "hojun.lee" $ git config --global user.email email@example.com
ย 

4. ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

  • ์ž‘์—…ํ•  ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ณ (mkdir) ์ด๋™ํ•˜๊ธฐ(cd)
    • $ mkdir git-test $ cd git-test
ย 
  • ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Git ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ค์–ด ์›ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
    • $ cd git-test $ git init
      ย 
      git init์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ํด๋” ๊ธฐ์ค€์œผ๋กœ .git(๋กœ์ปฌ ์ €์žฅ์†Œ)๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ €์žฅ์†Œ์—๋Š” ๋ฒ„์ „ ์ •๋ณด, ์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
      notion imagenotion image
      ๐Ÿ’ก
      ์ด๋•Œ, ํ•œ ํด๋”์—๋Š” ํ•˜๋‚˜์˜ .git(๋กœ์ปฌ ์ €์žฅ์†Œ)๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
  • ์ €์žฅ์†Œ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€(touch)ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ธฐ
    • $ touch README $ git add README $ git commit -m "first commit"
ย 

5. ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐ

  • ํŒŒ์ผ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ
    • $ git status
      notion imagenotion image
      ย 
  • git์ด ๊ด€๋ฆฌํ•  ๋Œ€์ƒ์œผ๋กœ ํŒŒ์ผ ๋“ฑ๋ก
    • ๋ณ€๊ฒฝํ•œ ํŒŒ์ผ ์ค‘ ์˜ฌ๋ฆฌ๊ธฐ ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์œผ์‹  ๊ฒฝ์šฐ์—๋Š” ์ (.)์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      $ git add README
      ย 
      notion imagenotion image
ย 
  • ๋ฒ„์ „ ๋งŒ๋“ค๊ธฐ(commit)
    • $ git commit -m "์ €์žฅ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"
      ย 
      notion imagenotion image
ย 
  • ํŒŒ์ผ ๋ฌด์‹œํ•˜๊ธฐ - gitignore
    • .gitignoreํŒŒ์ผ์— ๋ฒ„์ „๊ด€๋ฆฌ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
      # a comment - ์ด ์ค„์€ ๋ฌด์‹œํ•œ๋‹ค. # ํ™•์žฅ์ž๊ฐ€ .a์ธ ํŒŒ์ผ ๋ฌด์‹œ *.a # ์œ— ์ค„์—์„œ ํ™•์žฅ์ž๊ฐ€ .a์ธ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ฒŒ ํ–ˆ์ง€๋งŒ lib.a๋Š” ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. !lib.a # ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” TODOํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ณ  subdir/TODO์ฒ˜๋Ÿผ ํ•˜์œ„๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. /TODO # build/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์€ ๋ฌด์‹œํ•œ๋‹ค. build/ # `doc/notes.txt`๊ฐ™์€ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ณ  doc/server/arch.txt๊ฐ™์€ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. doc/*.txt # `doc` ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ ๋ชจ๋“  .txt ํŒŒ์ผ์„ ๋ฌด์‹œํ•œ๋‹ค. doc/**/*.txt
ย 
  • ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ™•์ธํ•˜๊ธฐ
    • ์ตœ๊ทผ commit ๋‚ด์šฉ๊ณผ ํ˜„์žฌ ํด๋”์˜ ๋‚ด์šฉ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      $ git diff
      notion imagenotion image
      ย 
  • ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒํ•˜๊ธฐ
    • $ git log
      notion imagenotion image
      ย