Git λ‚΄λΆ€ λ™μž‘ νŒŒν—€μΉ˜κΈ° - Part 1

hayeon
  • #Git
  • #git directory
  • #blob
  • #index
  • #ios

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

μ•ˆλ…•ν•˜μ„Έμš”. μ‹ μž…μœΌλ‘œ 원더월 λͺ¨λ°”μΌνŒ€μ—μ„œ μ•± κ°œλ°œμ„ 맑고 μžˆλŠ” μ΄ν•˜μ—°μž…λ‹ˆλ‹€.

Git은 μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ ν•„μˆ˜μ μ΄κ³  κ°•λ ₯ν•œ 도ꡬ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜λ©΄ μ—¬λŸ¬ λͺ…μ˜ κ°œλ°œμžκ°€ ν˜‘μ—…ν•˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œ μ½”λ“œμ˜ λ³€κ²½ 사항을 μΆ”μ ν•˜κ³ , μ½”λ“œ 버전 관리λ₯Ό 효과적으둜 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 큰 μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ λͺ¨λ°”μΌνŒ€ μ—­μ‹œ 이 Git을 ν™œμš©ν•˜λ©΄μ„œ κ°œλ°œμ„ μ§„ν–‰ν•˜κ³  μžˆλŠ”λ°μš”, κ°œλ°œν•˜λ˜ 도쀑 Git의 reset의 원리λ₯Ό μ •ν™•νžˆ λͺ¨λ₯Έμ±„ 잘λͺ» μ‚¬μš©ν•˜μ—¬ 데이터가 μ†μ‹€λ˜κ³  ν”„λ‘œμ νŠΈκ°€ 꼬인 일이 λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ Git μ‹€μŠ΅κ³Ό ν•¨κ»˜ λ‚΄λΆ€λ₯Ό νŒŒν—€μΉ˜λ©° 배운 λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ λ‹€μ–‘ν•œ λͺ…령어듀이 Git λ‚΄λΆ€μ—μ„œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€λ₯Ό Part1, Part2둜 λ‚˜λˆ„μ–΄ μ†Œκ°œν•˜λ €κ³  ν•©λ‹ˆλ‹€.

이번 포슀트 Part 1μ—μ„œλŠ” κΈ°λ³Έ λͺ…령어듀을 톡해 Git의 λ‚΄λΆ€ λ™μž‘ 원리 및 핡심 κ°œλ…λ“€μ„ 낱낱이 νŒŒν—€μ³ λ³΄κ² μŠ΅λ‹ˆλ‹€.

0) .Git 디렉토리

git을 톡해 버전 관리λ₯Ό ν•˜κ²Œ 되면 μ—¬λŸ¬ 정보듀이 μƒμ„±λ˜λŠ”λ°, κ·Έ μƒμ„±λœ 정보듀은 .git 디렉토리에 μ €μž₯이 λ©λ‹ˆλ‹€.

ls -al λͺ…λ Ήμ–΄λ₯Ό 톡해 .git 디렉토리λ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ λ™μž‘ 원리λ₯Ό μ΄ν•΄ν•˜λŠ”λ° 핡심적인 μš”μ†Œλ“€μ„ λ°œκ²¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1) Git의 원리

μ €λŠ” .git 디렉토리 μ•ˆμ˜ 핡심적인 μš”μ†Œλ“€μ˜ λ³€ν™”λ₯Ό gistoryλΌλŠ” 뢄석 도ꡬλ₯Ό μ΄μš©ν•˜μ—¬ λ³΄μ—¬λ“œλ¦¬λ €κ³  ν•©λ‹ˆλ‹€.

gistoryλž€ λͺ…령어에 따라 Git 내뢀에 μ‘΄μž¬ν•˜λŠ” νŒŒμΌλ“€μ΄ μ–΄λ– ν•œ 영ν–₯을 λ°›λŠ”μ§€ git μ €μž₯μ†Œμ˜ 컀밋 둜그λ₯Ό μ‹œκ°ν™”ν•΄μ„œ λ³΄μ—¬μ£ΌλŠ” 뢄석 λ„κ΅¬μž…λ‹ˆλ‹€. 이 λ„κ΅¬λŠ” .git 디렉토리 μ•ˆμ— μžˆλŠ” λ‚΄μš©λ“€μ„ 리슀트둜 보여주고, μƒˆλ‘œ μΆ”κ°€λœ 파일 ν˜Ήμ€ λ³€κ²½λœ 파일의 λ‚΄μš©λ“€μ„ μƒμ„Έν•˜κ²Œ 확인 및 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

1-1 ) git init

μ•„λž˜μ˜ 사진은 git init을 ν•œ μ§ν›„μ˜ λ‚΄λΆ€ λͺ¨μŠ΅μž…λ‹ˆλ‹€.

1-2) git add

이 μƒνƒœμ—μ„œ f1.textλΌλŠ” μƒˆ νŒŒμΌμ„ μƒμ„±ν•˜κ²Œ 되면 git 내뢀에 λ³€ν™”κ°€ μƒκΈΈκΉŒμš”?

μ•„λ‹ˆμš”. νŒŒμΌμ„ μƒμ„±ν•˜λŠ”λ°μ— git이 κ΄€μ—¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ³€ν™”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λ²ˆμ—” νŒŒμΌμ„ 생성 후에 λͺ…λ Ήμ–΄ β€œadd”λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 어떀일이 μƒκΈΈκΉŒμš”?

μœ„μ™€ 같이 git λ‚΄λΆ€μ˜ index 파일, objects 디렉토리에 μžˆλŠ” 78/981… νŒŒμΌμ— λ³€ν™”κ°€ 생긴 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ μ•ˆμ„ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄ objects 디렉토리 μ•ˆμ— μžˆλŠ” 78/981… νŒŒμΌμ€ μ œκ°€ μž‘μ„±ν•œ f1.text λ‚΄μš©μ΄ blob 파일 ν˜•νƒœλ‘œ μ €μž₯λ˜μ–΄ 있고, index μ ν˜€ μžˆλŠ” 파일 이름은 f1.text이 μ•„λ‹Œ 7898β€¦λ‘œ μ‹œμž‘ν•˜λŠ” μ–΄λ– ν•œ 정보에 λ‹΄κ²¨μ ΈμžˆμŠ΅λ‹ˆλ‹€. 이 λ‘˜μ˜ 관계λ₯Ό μžμ„Ένžˆ λ“€μ—¬λ‹€λ³΄λ‹ˆ, ”index의 7898…85 μˆ«μžβ€ λŠ” β€œobject의 78번째 디렉토리 + 9819..85” μž„μ„ μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

1-3) blob

μ œκ°€ blob ν˜•νƒœλ‘œ μ €μž₯λœλ‹€κ³  ν–ˆλŠ”λ°, blob이 λ¬΄μ—‡μΌκΉŒμš”?

gitμ—μ„œλŠ” νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό μ €μž₯ν•  λ•Œ λ‚΄μš©μ„ 직접 μ €μž₯ν•˜μ§€ μ•Šκ³ , sha1λž€ ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 blob 파일 이름을 λ„μΆœν•©λ‹ˆλ‹€. 이 blob κ°μ²΄λŠ” 같은 λ‚΄μš©μ˜ 파일이 μ—¬λŸ¬κ°œ μžˆμ„ 경우, ν•˜λ‚˜μ˜ β€œblob” 객체만 μ €μž₯ν•˜κ³  이λ₯Ό μ—¬λŸ¬ 파일이 μ°Έμ‘°ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ 쀑볡 νŒŒμΌμ„ 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ 이λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ f1.textλ₯Ό copy ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

.git 디렉토리 λ‚΄λΆ€μ—μ„œλŠ” index와 objects/78/98..85 두 νŒŒμΌμ— λ³€ν™”κ°€ 생긴 것 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ € index νŒŒμΌμ„ 보면 f1.text와 f3.text λͺ¨λ‘ 같은 파일 이름이 μ ν˜€μžˆμ—ˆκ³  μ΄λŠ” 곧 같은 였브젝트λ₯Ό 가리킀고 μžˆμŒμ„ μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ λ‹€μŒ objects/78/98..85λŠ” κΈ°μ‘΄ f1.text의 λ‚΄μš©μ„ λ‹΄κ³  있던 파일둜 ν˜„μž¬ f1.text와 f3.text λͺ¨λ‘ 같은 였브젝트λ₯Ό κ°€λ¦¬ν‚¨λ‹€λŠ” 것을 μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

즉, git은 μ–΄λ– ν•œ νŒŒμΌμ„ μ €μž₯ν•  λ•Œ indexμ—λŠ” 파일λͺ…κ³Ό blob νŒŒμΌμ£Όμ†Œλ₯Ό 가지고 μžˆλŠ”λ° 파일 λ‚΄μš©μ΄ κ°™λ‹€λ©΄ 같은 blob 파일 μ£Όμ†Œ( object 파일 )λ₯Ό κ°€λ¦¬ν‚€κ²Œ λ˜μ–΄ 쀑볡을 방지할 수 있게 λ©λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚΄μš©μ΄ λ™μΌν•˜λ©΄μ„œ μš©λŸ‰μ΄ 크고 이름이 λ‹€λ₯Έ μ—¬λŸ¬κ°œμ˜ 파일이 μ‘΄μž¬ν•˜λ”λΌλ„ ν•˜λ‚˜μ˜ blob을 μ°Έμ‘°ν•˜κ³  μžˆμ–΄ 효율적으둜 관리할 수 μžˆλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

1-4) commit

μ΄λ²ˆμ—” addν•œ νŒŒμΌλ“€μ„ commitλ₯Ό ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

κ°€μž₯ λ¨Όμ € objects의 18/1031..78 νŒŒμΌμ„ 열어보면 commit λ©”μ‹œμ§€ 정보가 μ €μž₯λ˜μ—ˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

commit μ•ˆμ—λŠ” μž‘μ„±μž, 컀밋 λ‚΄μš©, treeκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 tree도 sha1으둜 λ§Œλ“€μ–΄μ§„ ν•΄μ‹œκ°’μ΄λ©°, 이 값을 μΆ”μ ν•˜λ©΄ μ»€λ°‹ν•œ 각각의 νŒŒμΌλ“€μ˜ 이름과 λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” blob 파일 이름에 κ΄€ν•œ 정보λ₯Ό 가지고 μžˆμŒμ„ μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 commit을 ν•˜κ²Œ 되면, commit κ²°κ³ΌλŠ” 였브젝트 파일둜 μ €μž₯이 되고, 이 νŒŒμΌμ— μ‘΄μž¬ν•˜λŠ” tree의 값은 ν˜„μž¬ μš°λ¦¬κ°€ μž‘μ„±ν•œ 버전에 ν•΄λ‹Ήλ˜λŠ” 파일의 이름과 λ‚΄μš©μ΄ λ§ν¬λ˜μ–΄ μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 μƒνƒœμ—μ„œ f2.text λ‚΄μš©μ„ μˆ˜μ • ν›„ add, commit ν•  λ•ŒλŠ” μ–΄λ– ν•œ λ³€ν™”κ°€ μƒκΈΈκΉŒμš”?

λ¨Όμ € addλ₯Ό ν•˜κ²Œ 되면 index파일의 f2.text ν•΄μ‹œκ°’μ΄ λ³€κ²½λ˜κ³  μˆ˜μ •λœ λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” μƒˆ objectsκ°€ μƒμ„±λ˜μ—ˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμœΌλ‘œ commit을 ν•˜κ²Œ 되면 μ–΄λ–»κ²Œ λ κΉŒμš”?

μƒˆλ‘œμš΄ ParentλΌλŠ” 정보가 μΆ”κ°€λ˜μ—ˆκ³ , 이λ₯Ό 좔적해보면 직전 μ»€λ°‹μ˜ 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, treeλŠ” ν˜„μž¬ μ»€λ°‹ν•œ 였브젝트λ₯Ό κ°€λ¦¬ν‚€λŠ” ν•΄μ‹œκ°’μ„, parentλŠ” 직전 μ»€λ°‹ν•œ 였브젝트λ₯Ό κ°€λ¦¬ν‚€λŠ” ν•΄μ‹œκ°’μ„ 가지고 μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

쒅합해보면 commit은 μ•„λž˜μ™€ 같은 정보λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

  1. commit은 λ³€κ²½ 사항을 κΈ°λ‘ν•˜λŠ” λ©”νƒ€λ°μ΄ν„°μ˜ λͺ¨μŒμœΌλ‘œ, κ·Έ μ•ˆμ— μž‘μ„±μž, μž‘μ„± 일자, 컀밋 λ©”μ‹œμ§€, treeλ₯Ό 가지고 μžˆλ‹€.
  2. commit은 λ³€κ²½ 사항 자체λ₯Ό μ €μž₯ν•˜λŠ” λŒ€μ‹  이λ₯Ό ν¬ν•¨ν•˜λŠ” 파일의 μŠ€λƒ…μƒ·μ„ 찍고, ν•΄λ‹Ή μŠ€λƒ…μƒ·μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό treeλΌλŠ” 정보 ꡬ쑰에 μ €μž₯ν•œλ‹€.
  3. treeμ—λŠ” commit이 μΌμ–΄λ‚œ μ‹œμ μ— 우리의 μž‘μ—… 디렉토리에 μžˆλŠ” 파일λͺ…κ³Ό λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” Blob νŒŒμΌμ£Όμ†Œκ°€ λ‹΄κ²¨μžˆκ³  이λ₯Ό 톡해 ν”„λ‘œμ νŠΈ 폴더에 λŒ€ν•œ μƒνƒœλ₯Ό μ–»μ–΄ λ‚Ό 수 μžˆλ‹€.
  4. 각 commit(버전)λ§ˆλ‹€ μ„œλ‘œ λ‹€λ₯Έ 트리λ₯Ό 가리킀고 μžˆλ‹€.
  5. parent 값을 톡해 이전 컀밋(직전 버전)이 λˆ„κ΅¬μΈμ§€ μ•Œ 수 μžˆλ‹€.

1-5) object 파일

λ˜ν•œ objects 디렉토리 μ•ˆμ— λ“€μ–΄μžˆλŠ” object νŒŒμΌμ€ 크게 3κ°€μ§€λ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 파일의 λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” Blob ν˜•νƒœμ˜ 파일
  2. μž‘μ—… 디렉토리에 μžˆλŠ” 파일λͺ…κ³Ό 파일 λ‚΄μš©μ— ν•΄λ‹Ήλ˜λŠ” Blob 정보λ₯Ό λ‹΄κ³  μžˆλŠ” tree 파일
  3. λ³€κ²½ 사항을 κΈ°λ‘ν•˜λŠ” 메타데이터( μž‘μ„±μž, μž‘μ„±μΌμž, 컀밋 λ©”μ‹œμ§€, tree)λ₯Ό λ‹΄κ³  μžˆλŠ” commit 파일

Git의 핡심 κ°œλ… 3가지

μ•žμ„œ μ„€λͺ…λ“œλ¦° Git의 원리에 μ΄μ–΄μ„œ working directory, staging area, repository에 λŒ€ν•΄μ„œ μ–˜κΈ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 각 κ°œλ…μ€ 무엇을 μ˜λ―Έν•˜κ³  μ„œλ‘œ μ–΄λ–€ μ—°κ΄€ 관계가 μžˆλŠ”μ§€ μˆœμ„œλŒ€λ‘œ μ „λ‹¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

  • Working directory(workspace)λŠ” .git λ°”κΉ₯μͺ½μ— μžˆλŠ” ν˜„μž¬ ν”„λ‘œμ νŠΈ 폴더에 μ‘΄μž¬ν•˜λŠ” νŒŒμΌλ“€ 자체λ₯Ό μ˜λ―Έν•˜λ©° μƒˆλ‘œμš΄ νŒŒμΌμ„ μƒμ„±ν•˜κ±°λ‚˜ κΈ°μ‘΄ νŒŒμΌμ„ μˆ˜μ •ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ 이 λ””λ ‰ν† λ¦¬μ—μ„œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
    • μœ„μΉ˜ : 각자 ν”„λ‘œμ νŠΈ 폴더
  • Staging Area(Index)λŠ” Git이 μΆ”μ ν•˜κ³  μžˆλŠ” λ³€κ²½ 사항 쀑 μ–΄λ–€ 것을 λ‹€μŒ λ²„μ „μ˜ 컀밋에 ν¬ν•¨μ‹œν‚¬μ§€ μ„ νƒν•˜λŠ” 단계이며 컀밋 ν•˜κΈ° μ „ λ³€κ²½ 사항을 κ²€ν† ν•˜κ³  μ μ ˆν•œ μƒνƒœλ‘œ μ€€λΉ„ν•©λ‹ˆλ‹€. 이 곳은 λ‚΄λΆ€μ μœΌλ‘œ Index 파일이며, μ‚¬μš©μžμ˜ μž…μž₯μ—μ„œ indexλΌλŠ” ν‘œν˜„μ΄ 와닿지 μ•Šμ„ 수 μžˆμ–΄ Commit λŒ€κΈ° μƒνƒœλΌλŠ” μ˜λ―Έμ—μ„œ Staging area라고 λΆ€λ¦…λ‹ˆλ‹€.
    • μœ„μΉ˜ : ν”„λ‘œμ νŠΈ 폴더 ν•˜μœ„ .git/index 파일
  • RepositoryλŠ” λͺ¨λ“  컀밋과 ν•΄λ‹Ή μ»€λ°‹μ˜ 메타데이터λ₯Ό μ €μž₯ν•˜λŠ” Git의 λ°μ΄ν„°λ² μ΄μŠ€μž…λ‹ˆλ‹€.
    • μœ„μΉ˜ : ν”„λ‘œμ νŠΈ 폴더 ν•˜μœ„ .git/objects/ …

λ¨Όμ € μš°λ¦¬λŠ” 각 Working Directoryμ—μ„œ μƒˆλ‘œμš΄ νŒŒμΌμ„ μƒμ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이후 λ³€κ²½ 사항은 Staging area둜 μ΄λ™ν•˜μ—¬ μ€€λΉ„λœ ν›„, 컀밋을 μˆ˜ν–‰ν•˜μ—¬ repository에 μ €μž₯λ©λ‹ˆλ‹€. λ³€κ²½ 사항을 컀밋할 λ•Œ, Git은 staging areaμ—μ„œ λ³€κ²½ μ‚¬ν•­μ˜ μŠ€λƒ…μƒ·μ„ μΊ‘μ²˜ν•˜μ—¬ μƒˆλ‘œμš΄ 컀밋을 λ§Œλ“­λ‹ˆλ‹€. 컀밋을 λ§Œλ“€λ©΄ repositoryμ—μ„œ ν•΄λ‹Ή μ»€λ°‹μ˜ 메타데이터가 μ €μž₯λ©λ‹ˆλ‹€.

λ”°λΌμ„œ, Gitμ—μ„œ working directory, staging area, repositoryλŠ” 각각 νŒŒμΌμ„ μˆ˜μ •ν•˜κ³  μ€€λΉ„ν•˜λŠ” 곡간, λ³€κ²½ 사항을 μ»€λ°‹ν•˜κΈ° μœ„ν•΄ μ€€λΉ„ν•˜λŠ” 곡간, 그리고 λͺ¨λ“  컀밋과 ν•΄λ‹Ή 메타데이터λ₯Ό μ €μž₯ν•˜λŠ” Git의 λ°μ΄ν„°λ² μ΄μŠ€λ‘œ 말할 수 μžˆκ² λ„€μš”.

μ•„λž˜ 사진은 Git의 λ‚΄λΆ€ λ™μž‘ 원리 μ‚΄νŽ΄λ³΄λ©° 이λ₯Ό λ„μ‹ν™”ν•œ λͺ¨μŠ΅μž…λ‹ˆλ‹€.

글을 λ§ˆλ¬΄λ¦¬ν•˜λ©°

이번 ν¬μŠ€νŠΈμ—μ„œλŠ” Git의 κΈ°λ³Έ 원리와 init, add, commit λͺ…령어듀에 따라 핡심적인 μš”μ†Œλ“€μ΄ λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€λ₯Ό μ‚΄νŽ΄λ³΄μ•˜λŠ”λ°μš”. Git을 잘 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ…λ Ήμ–΄λ“€μ˜ μ‚¬μš©λ²•κ³Ό λ™μž‘ 원리λ₯Ό 잘 μ΄ν•΄ν•˜κ³  상황에 맞좰 적절히 μ΄μš©ν•΄μ•Όν•¨μ„ 많이 λŠκΌˆμŠ΅λ‹ˆλ‹€.

저와 같이 Git의 λ‚΄λΆ€ λ™μž‘μ„ 잘 λͺ¨λ₯΄μ…¨λ˜ 뢄듀이 계신닀면 이 글을 보고 도움을 λ°›μœΌμ…¨μœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€!

λ‹€μŒ Part2μ—μ„œλŠ” Gitμ—μ„œ μ€‘μš”ν•œ 역할을 λ‹΄λ‹Ήν•˜λŠ” λͺ…령어듀에 λŒ€ν•΄μ„œ 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λκΉŒμ§€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

← λͺ©λ‘μœΌλ‘œ λŒμ•„κ°€κΈ°

Art Changes Life

λ…Έλ¨ΈμŠ€μ™€ ν•¨κ»˜ μ—”ν„°ν…Œν¬ 산업을 ν˜μ‹ ν•΄λ‚˜κ°ˆ 멀버λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

μ±„μš© 쀑인 곡고 보기