πŸ‘Ύ git μ™„λ²½ 정볡 - git μ΄λž€?

2021λ…„ 3μ›” 29일

λ“€μ–΄κ°€λ©°

μ˜¬ν•΄μ— 개인적으둜 λͺ©ν‘œλ₯Ό μ„Έμ› λ˜ 것듀 쀑 Git 곡뢀가 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ νšŒμ‚¬λ‚΄μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 주말에도 일을 ν•˜λŠ” λ°”λžŒμ— λ”°λ‘œ κ³΅λΆ€ν•˜λŠ” μ‹œκ°„μ„ 갖지 λͺ»ν–ˆμ£ ....

ν”„λ‘œμ νŠΈκ°€ μ„±κ³΅μ μœΌλ‘œ 마무리 λ˜λ©΄μ„œ 이제 개인 곡뢀λ₯Ό ν•  μ‹œκ°„μ΄ 확보가 λ˜λ©΄μ„œ κ³„νšν–ˆμ—ˆλ˜ Git 곡뢀λ₯Ό μ‹œμž‘ν•˜λ €κ³  ν•©λ‹ˆλ‹€!

μ›λž˜ Git을 즐겨 μ‚¬μš©ν–ˆμ—ˆμ§€λ§Œ deepν•˜κ²Œ κ³΅λΆ€ν•˜κ³  μ‹Άμ—ˆκ³ , 특히 git을 λˆ„κ΅°κ°€μ—κ²Œ μ„€λͺ…ν•  수 μžˆμ„ μ •λ„μ˜ μˆ˜μ€€μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬κ³  μ‹Άμ–΄ 곡뢀λ₯Ό ν•˜κΈ°λ‘œ κ²°μ‹¬ν•˜κ²Œ λ˜μ—ˆμ–΄μš”! πŸ™‡πŸΌβ€β™‚οΈ

이 ν¬μŠ€νŒ…μ€ μ‹œλ¦¬μ¦ˆλ‘œμ¨ μž‘μ„±λ  것이며 μ±… ProGit 을 κ³΅λΆ€ν•˜λ©΄μ„œ μš”μ•½/정리 ν•˜λŠ” ν¬μŠ€νŒ…μž…λ‹ˆλ‹€!

이 κ²Œμ‹œκΈ€μ„ 보며 도움이 λ˜μ—ˆμœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

버전 κ΄€λ¦¬λž€?

버전 κ΄€λ¦¬λŠ” 무엇이고, 이것을 μ™œ ν•΄μ•Όν• κΉŒ ?

버전 관리 μ‹œμŠ€ν…œμ€ 파일 λ³€ν™”λ₯Ό μ‹œκ°„μ— 따라 κΈ°λ‘ν–ˆλ‹€κ°€ λ‚˜μ€‘μ— νŠΉμ • μ‹œμ μ˜ 버전을 λ‹€μ‹œ κΊΌλ‚΄μ˜¬ 수 μžˆλŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

버전 관리 μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜κ²Œ 되면 각 νŒŒμΌμ„ 이전 μƒνƒœλ‘œ 되돌릴 수 있고, ν”„λ‘œμ νŠΈλ₯Ό ν†΅μ§Έλ‘œ 이전 μƒνƒœλ‘œ 되돌릴 수 있고, μ‹œκ°„μ— 따라 μˆ˜μ • λ‚΄μš©μ„ 비ꡐ해보며, λˆ„κ°€ 문제λ₯Ό μΌμœΌμΌ°λŠ”μ§€λ„ 좔적이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 또, νŒŒμΌμ„ μžƒμ–΄λ²„λ¦¬κ±°λ‚˜ 잘λͺ» 고쳀을 λ•Œλ„ μ‰½κ²Œ 볡ꡬ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Git의 기초

μŠ€λƒ…μƒ·

Git의 핡심은 데이터λ₯Ό λ‹€λ£¨λŠ” λ°©λ²•μž…λ‹ˆλ‹€. Git은 데이터λ₯Ό 파일 μ‹œμŠ€ν…œ μŠ€λƒ…μƒ·μœΌλ‘œ μ·¨κΈ‰ν•˜κ³  μ•„μ£Ό μž‘μŠ΅λ‹ˆλ‹€. Git은 μ»€λ°‹ν•˜κ±°λ‚˜ ν”„λ‘œμ νŠΈμ˜ μƒνƒœλ₯Ό μ €μž₯ν•  λ•Œλ§ˆλ‹€ 파일이 μ‘΄μž¬ν•˜λŠ” κ·Έ μˆœκ°„μ„ μ·¨κΈ‰ν•©λ‹ˆλ‹€. 파일이 달라지지 μ•Šμ•˜μœΌλ©΄ Git은 μ„±λŠ₯을 μœ„ν•΄μ„œ νŒŒμΌμ„ μƒˆλ‘œ μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Git은 데이터λ₯Ό μŠ€νƒ­μƒ·μ˜ 슀트림처럼 μ·¨κΈ‰ν•©λ‹ˆλ‹€.

거의 λͺ¨λ“  λͺ…령을 λ‘œμ»¬μ—μ„œ μ‹€ν–‰

Git은 거의 λͺ¨λ“  λͺ…령이 둜컬 퐈일과 λ°μ΄ν„°λ§Œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬μ— μžˆλŠ” λ‹€λ₯Έ μ»΄ν“¨ν„°λŠ” ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, Git은 ν”„λ‘œμ νŠΈμ˜ νžˆμŠ€ν† λ¦¬λ₯Ό μ‘°νšŒν•  λ•Œ μ„œλ²„μ—†μ΄ μ‘°νšŒν•©λ‹ˆλ‹€. μ–΄λ–€ 파일의 ν˜„μž¬ 버전과 ν•œλ‹¬ μ „μ˜ μƒνƒœλ₯Ό 비ꡐ해 보고 싢을 λ•Œλ„ Git은 κ·Έλƒ₯ ν•œλ‹¬ μ „μ˜ 파일과 μ§€κΈˆμ˜ νŒŒμΌμ„ λ‘œμ»¬μ—μ„œ μ°ΎμŠ΅λ‹ˆλ‹€.

즉, μ˜€ν”„λΌμΈ μƒνƒœμ΄κ±°λ‚˜ VPN으둜 μ—°κ²° ν•  수 없어도 λ§‰νž˜μ—†μ΄ 일할 수 μžˆμŠ΅λ‹ˆλ‹€.

Git의 무결성

Git은 데이터λ₯Ό μ €μž₯ν•˜κΈ° 전에 항상 체크섬을 κ΅¬ν•˜μ—¬ κ·Έ μ²΄ν¬μ„¬μœΌλ‘œ 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μ²΄ν¬μ„¬μ—†μ΄λŠ” μ–΄λ– ν•œ νŒŒμΌμ΄λ‚˜ λ””λ ‰ν† λ¦¬λ‘œ λ³€κ²½ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

Git은 SHA-1 ν•΄μ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ 체크섬을 λ§Œλ“€κ³  λͺ¨λ“  것을 ν•΄μ‹œλ‘œ μ‹λ³„ν•©λ‹ˆλ‹€.

Git은 데이터λ₯Ό μΆ”κ°€

Git으둜 무엇을 ν•˜λ“  Git λ°μ΄ν„°λ² μ΄μŠ€μ— 데이터가 μΆ”κ°€λ©λ‹ˆλ‹€. λ˜λŒλ¦¬κ±°λ‚˜ 데이터λ₯Ό μ‚­μ œν•  방법이 μ—†μŠ΅λ‹ˆλ‹€. Git도 μ»€λ°‹ν•˜μ§€ μ•ŠμœΌλ©΄ 변경사항을 μžƒμ–΄λ²„λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 일단 μŠ€λƒ…μƒ·μ„ μ»€λ°‹ν•˜κ³  λ‚˜λ©΄ 데이터λ₯Ό μžƒμ–΄λ²„λ¦¬κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

또, Git을 μ‚¬μš©ν•˜λ©΄ ν”„λ‘œμ νŠΈκ°€ μ‹¬κ°ν•˜κ²Œ λ§κ°€μ§ˆ 걱정없이 맀우 즐겁게 μ—¬λŸ¬ 가지 μ‹€ν—˜μ„ ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€!

μ„Έ 가지 μƒνƒœ

  • 이 뢀뢄은 맀우 μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ— μ§‘μ€‘ν•΄μ„œ μ½μœΌμ…”μ•Ό ν•©λ‹ˆλ‹€ !

Git은 νŒŒμΌμ„ Committed, Modified, Stagedμ΄λ ‡κ²Œ 3κ°€μ§€λ‘œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

git_status

  • Committed : 데이터가 둜컬 데이터 λ² μ΄μŠ€μ— μ•ˆμ „ν•˜κ²Œ μ €μž₯된 μƒνƒœ
  • Modified : μˆ˜μ •ν•œ νŒŒμΌμ„ 아직 둜컬 데이터 λ² μ΄μŠ€μ— μ»€λ°‹ν•˜μ§€ μ•Šμ€ μƒνƒœ
  • Staged : ν˜„μž¬ μˆ˜μ •ν•œ νŒŒμΌμ„ 곧 컀밋할 것 μ΄λΌλŠ” μƒνƒœ

Git Directory(Repository) ν”„λ‘œμ νŠΈμ˜ 메타데이터와 객체 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ €μž₯ν•˜λŠ” 곳을 λ§ν•©λ‹ˆλ‹€. 이 Git Directoryκ°€ Git의 ν•΅μ‹¬μž…λ‹ˆλ‹€. λ‹€λ₯Έ 컴퓨터에 μžˆλŠ” μ €μž₯μ†Œλ₯Ό Clone ν•  λ•Œ Git 디렉토리가 λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.

Working DirectoryλŠ” ν”„λ‘œμ νŠΈμ˜ νŠΉμ • 버전을 checkoutν•œ κ²ƒμž…λ‹ˆλ‹€.

Staging AreaλŠ” Git directory에 μžˆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœν•œ 파일이고 곧 컀밋할 νŒŒμΌμ— λŒ€ν•œ λ‚΄μš©μ„ μ €μž₯ν•©λ‹ˆλ‹€.

Git으둜 ν•˜λŠ” 일은 기본적으둜 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  1. Working Directoryμ—μ„œ νŒŒμΌμ„ μˆ˜μ • ν•œλ‹€.
  2. Staging Area에 μžˆλŠ” νŒŒμΌμ„ Stageν•΄μ„œ 컀밋할 μŠ€λƒ…μƒ·μ„ λ§Œλ“ λ‹€.
  3. Staging Area에 μžˆλŠ” νŒŒμΌλ“€μ„ μ»€λ°‹ν•΄μ„œ Git 디렉터리에 영ꡬ적인 μŠ€λƒ…μƒ·μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.

Git Directory에 μžˆλŠ” νŒŒμΌλ“€μ€ Committed μƒνƒœμž…λ‹ˆλ‹€. νŒŒμΌμ„ μˆ˜μ •ν•˜κ³  Staging Area에 μΆ”κ°€ν–ˆλ‹€λ©΄ Stagedμž…λ‹ˆλ‹€. 그리고 Checkoutν•˜κ³  μˆ˜μ •ν–ˆμ§€λ§Œ, 아직 Staging Area에 μΆ”κ°€ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ Modifiedμž…λ‹ˆλ‹€.

Git 졜초 μ„€μ •

Git을 처음 μ„€μΉ˜ν•˜κ³  λ‚˜λ©΄ Git의 μ‚¬μš© ν™˜κ²½μ„ μ μ ˆν•˜κ²Œ μ„€μ •ν•΄μ£Όμ…”μ•Ό ν•©λ‹ˆλ‹€. ν•œ 번만 μ„€μΉ˜ν•˜λ©΄ 되며 μ„€μ •ν•œ λ‚΄μš©μ€ Git이 μ—…κ·Έλ ˆμ΄λ“œν•΄λ„ μœ μ§€κ°€ λ©λ‹ˆλ‹€.

git config
  1. /etc/gitconfig : μ‹œμŠ€ν…œμ˜ λͺ¨λ“  μ‚¬μš©μžμ™€ λͺ¨λ“  μ €μž₯μ†Œμ— μ μš©λ˜λŠ” μ„€μ •μž…λ‹ˆλ‹€. git config --system μ˜΅μ…˜μœΌλ‘œ 이 νŒŒμΌμ„ 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. ~/.gitconfig, ~/.config/git/config : νŠΉμ • μ‚¬μš©μžμ—κ²Œλ§Œ μ μš©λ˜λŠ” μ„€μ •μž…λ‹ˆλ‹€. git config --global μ˜΅μ…˜μœΌλ‘œ 이 νŒŒμΌμ„ 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. .git/cnofig : Git Directory(Repository)에 있고 νŠΉμ • μ €μž₯μ†Œ(ν˜Ήμ€ ν˜„μž¬ μž‘μ—…μ€‘μΈ ν”„λ‘œμ νŠΈ)μ—λ§Œ μ μš©λ©λ‹ˆλ‹€.

μœ„μ˜ 섀정은 3->2->1 순으둜 μš°μ„ μ‹œ λ©λ‹ˆλ‹€.

μ‚¬μš©μž 정보

Git을 μ„€μΉ˜ν•˜κ³  λ‚˜μ„œ κ°€μž₯ λ¨Όμ € ν•΄μ•Όν•˜λŠ” 것은 μ‚¬μš©μž 이름과 이메일 μ£Όμ†Œλ₯Ό μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

$ git config --global user.name "l2h"
$ git config --global user_email hosu4549@gmail.com

--global μ˜΅μ…˜μœΌλ‘œ μ„€μ •ν•˜λŠ” 것은 λ”± ν•œλ²ˆλ§Œ ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€! 즉, ν•΄λ‹Ή μ‹œμŠ€ν…œμ—μ„œ ν•΄λ‹Ή μ‚¬μš©μžκ°€ μ‚¬μš©ν•  λ•Œμ—λŠ” 이 정보λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ§Œμ•½ ν”„λ‘œμ νŠΈλ§ˆλ‹€ λ‹€λ₯Έ 이름과 λ‹€λ₯Έ 이메일 μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ©΄ --global μ˜΅μ…˜μ„ λΉΌκ³  λͺ…령을 μ‹€ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ„€μ • 확인

git config --list λͺ…령을 μ‹€ν–‰ν•˜λ©΄ μ„€μ •ν•œ λͺ¨λ“  λ‚΄μš©μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

$ git config --list

config-list