πŸ“

2. Git

Β 

1. Gitμ΄λž€?

  • Git은 μ†ŒμŠ€μ½”λ“œ 및 파일의 변경내역을 μ €μž₯ν•˜λŠ” λΆ„μ‚° 버전 관리 μ‹œμŠ€ν…œ μž…λ‹ˆλ‹€.
  • λ¦¬λˆ„μŠ€ ν† λ°œμ¦ˆμ— μ˜ν•΄ 처음 λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€. λ¦¬λˆ…μŠ€ 컀널을 λ§Œλ“œμ‹  λΆ„μ΄μ‹­λ‹ˆλ‹€.
  • GitHub, Bitbucket, Gitlab λ“±μ˜ Git 기반 버전 관리 ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.
  • help λͺ…λ Ήμ–΄
    • git help -a : μƒμ„Ένžˆ λͺ…λ Ήμ–΄λ“€ μ‚΄νŽ΄λ³΄κΈ° git λͺ…λ Ήμ–΄ -h : λͺ…λ Ήμ–΄ μ˜΅μ…˜ 보기 git help λͺ…λ Ήμ–΄ : webμ—μ„œ ν•΄λ‹Ή λͺ…λ Ήμ–΄ 상세보기
  • git에 κΈ°λ³Έ 에디터 λ³€κ²½
    • git config --global core.editor "editor이름" git config --global core.editor "code --wait" #VSCλ₯Ό κΈ°λ³Έ μ—λ””ν„°λ‘œ μ„€μ •, wait을 ν•΄μ£Όμ–΄μ•Ό μž μ‹œ λ©ˆμΆ”μ—ˆλ‹€κ°€ VSC에 μ—΄λ¦° code μˆ˜μ • 창을 λ‹«μœΌλ©΄ CLIκ°€ 지속 μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.
  • git에 κΈ°λ³Έ μ„€μ • λ³€κ²½
    • git config global -e #global μ„€μ •μž…λ‹ˆλ‹€. λ§Œμ§€μ‹€ λ•Œ μœ μ˜ν•΄μ£Όμ„Έμš”.

2. Git μ„€μΉ˜ν•˜κΈ°

2-1. Ubuntuμ—μ„œ μ„€μΉ˜ν•˜κΈ°

μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ Git을 μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
$ sudo apt-get update $ sudo apt-get install git
Β 

2-2. Macμ—μ„œ μ„€μΉ˜ν•˜κΈ°

Macμ—λŠ” 기본적으둜 Git이 μ„€μΉ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 버전에 따라 μ„€μΉ˜κ°€ μ•ˆλ˜μ–΄ μžˆλŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. μ„€μΉ˜κ°€ λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” 터미널 μ°½(cmd + spacebar β†’ terminal)에 μ•„λž˜μ˜ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
$ git usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] ...
Β 

2-2-1. zip파일 λ‹€μš΄λ°›μ•„ μ„€μΉ˜ν•˜κΈ°

μ„€μΉ˜κ°€ λ˜μ§€ μ•Šμ€ κ²½μš°λ‚˜ μ΅œμ‹ λ²„μ „μ˜ git을 μ„€μΉ˜ν•˜κ³  싢은 경우 μ•„λž˜μ˜ μˆœμ„œλŒ€λ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€.
  1. https://git-scm.com/ μ ‘μ†ν•©λ‹ˆλ‹€.
  1. Download for Mac λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.
  1. λ‹€μš΄ 받은 νŒŒμΌμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
Β 
Β 

2-2-2. homebrew둜 μ„€μΉ˜ν•˜κΈ°

πŸ’‘
homebrew둜 git μ„€μΉ˜ν•˜κΈ°
Β 

2-3. Windowsμ—μ„œ μ„€μΉ˜ν•˜κΈ°

  1. https://git-scm.com/ μ ‘μ†ν•©λ‹ˆλ‹€.
  1. Download for Windows λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ•„λž˜μ™€ 같은 νŽ˜μ΄μ§€κ°€ μ—΄λ¦¬λŠ”λ° Click here to downloadλ₯Ό λˆŒλŸ¬μ£Όμ„Έμš”. Portable은 λ¬΄μ„€μΉ˜ λ²„μ „μž…λ‹ˆλ‹€.
    1. notion imagenotion image
  1. λ‹€μš΄ 받은 νŒŒμΌμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€. (μ„€μΉ˜ μ˜΅μ…˜ 쀑 κΈ°λ³Έ 브랜치λ₯Ό main으둜 λ°”κΎΈλŠ” μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이미 Git을 μ–΄λŠμ •λ„ μˆ™μ§€ν•˜μ‹  뢄이라면 μ•„λž˜ 것을 ν΄λ¦­ν•΄μ„œ μ§„ν–‰ν•΄μ£Όμ„Έμš”. μˆ˜μ—…μ€ λͺ¨λ“  μ˜΅μ…˜μ„ λ³€κ²½ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€.)
      • git config --global init.defaultbBranch main으둜 μΆ”ν›„ λ³€κ²½ κ°€λŠ₯ν•©λ‹ˆλ‹€.
      notion imagenotion image
      notion imagenotion image

3. 버전 확인 및 초기 μ„€μ •

λ‹€μš΄ 받은 Git 버전을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
$ git --version git version 2.37.3
Β 
Git을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μž 정보λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 섀정을 μ œλŒ€λ‘œ ν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œ list λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (get λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ…”λ„ λ©λ‹ˆλ‹€.)
🧐
ν•΄λ‹Ή 절차λ₯Ό μ§„ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ 뒀에 push κ°€ μ•ˆλ  수 μžˆμŠ΅λ‹ˆλ‹€.
$ git config --global user.name "hojun.lee" $ git config --global user.email email@example.com $ git config --list
$ git config --get user.name $ git config --get user.email
μ΄λ•Œ, email μ„€μ •κ³Ό username 섀정을 μ œλŒ€λ‘œ μ•ˆν•΄μ£Όμ‹œλ©΄ μ»€λ°‹λ‚΄μ—­μ—μ„œ 계정 이름이 μ•„λ‹Œ μœ μ €μ΄λ¦„μ΄ 올라갈 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image
  • GitHub을 λ¨Όμ € κ°€μž…ν•˜μ…¨λ‹€λ©΄ GitHub에 μžˆλŠ” μ£Όμ†Œλ‘œ ν•˜μ„Έμš”. 이 μ±•ν„°μ—μ„œ GitHub에 κ°€μž…ν•˜μ‹œμ§€ μ•ŠμœΌμ…¨μ–΄λ„ μ§„ν–‰ν•˜λŠ”λ° 무리가 μ—†μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„ 이름과 이메일을 μž…λ ₯ν•΄μ£Όμ„Έμš”. μ΄λŠ” ν˜‘μ—…ν•  λ•Œ λˆ„κ°€ μž‘μ—…ν–ˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • notion imagenotion image
Β 
  • VSCμ—μ„œ μ‚¬μš©ν•˜μ‹€ 것이라면 Ctrl + Shift + Pλ₯Ό 눌러 Terminal: Select Default Profile을 git bash둜 λ³€κ²½ν•΄μ£Όμ„Έμš”.
    • notion imagenotion image

4. μ €μž₯μ†Œ λ§Œλ“€κΈ°

  • μž‘μ—…ν•  디렉토리λ₯Ό λ§Œλ“€κ³ (mkdir) μƒμ„±ν•œ λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜κΈ°(cd)
    • $ mkdir git-test $ cd git-test
Β 
  • ν˜„μž¬ 디렉토리λ₯Ό Git μ €μž₯μ†Œλ‘œ λ§Œλ“€μ–΄ μ›ν•˜λŠ” 디렉토리λ₯Ό κΈ°μ€€μœΌλ‘œ 버전관리λ₯Ό ν•©λ‹ˆλ‹€.
    • $ git init
      Β 
      git init 을 μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή 폴더 κΈ°μ€€μœΌλ‘œ .git(둜컬 μ €μž₯μ†Œ)κ°€ μƒμ„±λ©λ‹ˆλ‹€. 둜컬 μ €μž₯μ†Œμ—λŠ” 버전 정보, 원격 μ €μž₯μ†Œ μ£Όμ†Œκ°€ μ €μž₯λ©λ‹ˆλ‹€.
      notion imagenotion image
      πŸ’‘
      μ΄λ•Œ, ν•œ ν΄λ”μ—λŠ” ν•˜λ‚˜μ˜ .git(둜컬 μ €μž₯μ†Œ)을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•Šμ„ 경우 좩돌이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. First commit!

5.1. μΆ”κ°€ν•˜κ³  μ»€λ°‹ν•˜κΈ°(add, commit)

  • νŒŒμΌμ„ 생성(touch), μΆ”κ°€(add)ν•˜κ³  컀밋(commit)ν•˜κΈ°
    • μ•„λž˜ μ½”λ“œλ₯Ό μž…λ ₯ 및 μ‹€ν–‰ν•˜κ³ , 이어 μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
$ touch README.md $ git status # Untracked 확인 $ git add README.md $ git commit -m "first commit"

5.1.1. git이 관리할 λŒ€μƒμ˜ 파일 λ“±λ‘ν•˜κΈ°(add)

λ³€κ²½ν•œ 파일 λͺ©λ‘ 쀑 μŠ€ν…Œμ΄μ§€μ— 올리기 μ›ν•˜λŠ” 파일만 μ„ νƒν•©λ‹ˆλ‹€. 파일 전체λ₯Ό 올리고 싢은 κ²½μš°μ—λŠ” git add 뒀에 .을 μž…λ ₯ν•©λ‹ˆλ‹€(git add .). 이 λ•Œ, 슀페이슀 λ°”κ°€ ν•œ μΉΈ λ“€μ–΄κ°„ λ‹€λŠ” 점을 μžŠμ§€λ§ˆμ„Έμš”!
$ git add README.md // 지정 파일 올리기 $ git add . // 파일 전체 올리기
notion imagenotion image
πŸ’‘
Untracked β†’ Unmodified β†’ Modefied β†’ Staged |β€”β€”β€”β€”β€”β€” git add β€”β€”β€”β€”β€”β€”β€”β†’| | ←——— git commit β€”β€”| (각각 μƒνƒœμ— λŒ€ν•œ 상세 μ„€λͺ…은 5.2 챕터에 μžˆμŠ΅λ‹ˆλ‹€.)

5.1.2. 버전 λ§Œλ“€κΈ° (commit)

$ git commit -m "μ €μž₯ 메세지λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”"
notion imagenotion image

5.2. μƒνƒœ ν™•μΈν•˜λŠ” 방법 (status , diff , log)

5.2.1. 파일 μƒνƒœ ν™•μΈν•˜κΈ° (status)

$ git status
notion imagenotion image
Β 
파일의 μƒνƒœμ— 따라 Untracked 와 Tracked 둜 λΆ„λ₯˜λ©λ‹ˆλ‹€.
1) Untracked(관리 λŒ€μƒμ΄ μ•„λ‹˜) : 파일 생성 ν›„ ν•œλ²ˆλ„ git addν•˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό λ§ν•©λ‹ˆλ‹€.
2) Tracked(관리 λŒ€μƒμž„) : git이 κ΄€λ¦¬ν•˜λŠ” νŒŒμΌμž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • Unmodified : 졜근의 컀밋과 λΉ„κ΅ν–ˆμ„ λ•Œ 바뀐 λ‚΄μš©μ΄ μ—†λŠ” μƒνƒœ
  • Modified : 졜근 컀밋과 λΉ„κ΅ν–ˆμ„ λ•Œ 바뀐 λ‚΄μš©μ΄ μžˆλŠ” μƒνƒœ
  • Staged : 파일이 μˆ˜μ •λ˜κ³  λ‚˜μ„œ μŠ€ν…Œμ΄μ§€ 곡간에 μ˜¬λΌμ™€ μžˆλŠ” μƒνƒœμ΄λ©°, git add ν›„μ˜ μƒνƒœ
Β 
μ•„λž˜μ˜ 그림을 톡해 둜컬 μ €μž₯μ†Œμ™€ 원격 μ €μž₯μ†Œ μ‚¬μ΄μ˜ 파일 이동 경둜 및 μƒνƒœλ₯Ό ν™•μΈν•˜κ³  μ–΄λ–€ λͺ…λ Ήμ–΄κ°€ μ‚¬μš©λ˜λŠ”μ§€ μ‚΄νŽ΄λ³΄μ„Έμš”!
μ•Œμž˜λ”±κΉ”μ„Ό githubμ•Œμž˜λ”±κΉ”μ„Ό github
μ•Œμž˜λ”±κΉ”μ„Ό github
Β 

5.2.2. 변경사항 ν™•μΈν•˜κΈ° (diff)

addν•˜κΈ° μ „ 졜근 commitν•œ λ‚΄μš©κ³Ό ν˜„μž¬ ν΄λ”μ˜ λ³€κ²½ 사항을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
$ git diff
notion imagenotion image
Β 

5.2.3. 컀밋(commit) νžˆμŠ€ν† λ¦¬ μ‘°νšŒν•˜κΈ° (log)

$ git log
notion imagenotion image
μœ„μ™€ 같이 git log λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜λ©΄, 졜근 μ»€λ°‹ν•œ νžˆμŠ€ν† λ¦¬λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 log λͺ…령어에 λŒ€ν•œ 더 μžμ„Έν•œ λ‚΄μš©μ€ λΆ€λ‘μ˜ β€˜GitHub log μ˜΅μ…˜β€™ μ—μ„œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
λ‘œκ·Έκ°€ κΈΈ 경우 qλ₯Ό λˆ„λ₯΄μ‹œλ©΄ λ°–μœΌλ‘œ λΉ μ Έλ‚˜μ˜΅λ‹ˆλ‹€. jμœ„, kλŠ” μ•„λž˜λ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.

5.3. μ €μž₯μ†Œμ— λ¬΄μ‹œν•  파일 μ„€μ •ν•˜λŠ” 방법

5.3.1. λ¬΄μ‹œν•  파일 (gitignore) μΆ”κ°€ ν•˜κΈ°

1) .gitignore μ‚¬μš©ν•˜κΈ°
push μ „ .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
Β 
2) .gitignore μžλ™ 생성기 ν™œμš©ν•˜κΈ°
.gitignore νŒŒμΌμ„ 직접 생성해야 ν•˜λŠ” κ²½μš°κ°€ μ’…μ’… μžˆμŠ΅λ‹ˆλ‹€. 이 λ•Œ, λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” μ–΄λ–€ νŒŒμΌμ„ κΉƒ 버전 κ΄€λ¦¬μ—μ„œ μ œμ™Έ μ‹œμΌœμ•Ό ν•˜λŠ”μ§€(.gitignoreνŒŒμΌμ— λ„£μ–΄μ•Ό λ˜λŠ”μ§€) ν—·κ°ˆλ¦¬λŠ” κ²½μš°κ°€ 있죠. ν˜Ήμ€ 일일이 μž‘μ„±ν•˜κΈ° 번거둜운 κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. 이럴 λ•Œ νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 툴인 gitingnore.io λ₯Ό ν™œμš©ν•΄λ³΄μ„Έμš”!
  • .gitignore μ‚¬μš© 방법
    • 1) μœ„ 링크에 접속 ν›„ 본인의 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 운영체제, 개발 ν™˜κ²½, 기술 μŠ€νƒμ„ μž‘μ„±ν•©λ‹ˆλ‹€.
      notion imagenotion image
      2) 생성 λ²„νŠΌμ„ 눌러 λ‚΄μš©μ„ μƒμ„±ν•œ ν›„, 전체 λ‚΄μš©μ„ λ³΅μ‚¬ν•˜κ³  .gitignore νŒŒμΌμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
      gitignore.ioμ—μ„œ node μŠ€νƒμœΌλ‘œ μƒμ„±ν•œ 파일gitignore.ioμ—μ„œ node μŠ€νƒμœΌλ‘œ μƒμ„±ν•œ 파일
      gitignore.ioμ—μ„œ node μŠ€νƒμœΌλ‘œ μƒμ„±ν•œ 파일
Β