BackEnd๐Ÿงต

2023.04.14 TIL(Git ์‚ฌ์šฉ๋ฒ•)

hae02y 2023. 4. 18. 03:52
๋ฐ˜์‘ํ˜•

 

๐Ÿ‘€Today...


์˜ค๋Š˜์€ ์ฒซ ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„ํ–‰ํ–ˆ๋‹ค...! ๊ฒจ์šฐ ์‚ผ์ผ๋™์•ˆ ์˜จ๋ผ์ธ์œผ๋กœ ์ˆ˜์—…๋“ฃ๊ณ  ๋งŒ๋‚˜๋Š” ํŽ˜์–ด๋ผ๋‹ˆ... ์†”์ฐํžˆ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ณด๋‹ค๋Š” ๊ฑฑ์ •์ด ์•ž์„ฐ๋˜๊ฑฐ๊ฐ™๋‹ค. ์™ธ๋ถ€์—์„œ ์‚ฌ๋žŒ๋“ค์„ ๋งŒ๋‚˜๊ณ  ์ด์•ผ๊ธฐํ•˜๋Š”๊ฒƒ์„ ๋”ฑํžˆ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋ฐ, ์˜คํžˆ๋ ค ์˜จ๋ผ์ธ์—์„œ ๋งŒ๋‚˜์„œ ์–ผ๊ตด์„ ๋ณด๊ณ  ๋Œ€ํ™”ํ•ด์•ผ๋œ๋‹ค๋Š”๊ฒƒ์ด ์ƒ๊ฐ๋ณด๋‹ค ๋ถ€๋‹ด์œผ๋กœ ๋‹ค๊ฐ€์˜จ๊ฒƒ๊ฐ™์•˜๋‹ค. ๊ทผ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์ด๊ฑฐ ๊ดœ์ฐฎ์€๋ฐ? ์‹ถ์—ˆ๋‹ค. ํŽ˜์–ด๋ถ„๊ณผ ์ฒซ ๋Œ€ํ™”์—ฌ์„œ ์–ด์ƒ‰์–ด์ƒ‰ํ•œ ์ƒํƒœ๋กœ ๊ณผ์ œ๋ฅผ ํ•˜๋‚˜์”ฉ ํ’€์–ด๋‚˜๊ฐ€๋Š”๊ฒŒ ์žฌ๋ฏธ์žˆ์—ˆ๋‹คใ…‹ใ…‹ใ…‹ ์จ‹๋“  Git์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ๋Š”๋ฐ ํ˜ผ์ž ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด๊ฐ€๋ฉด์„œ ์—ด์‹ฌํžˆ ๋”ฐ๋ผํ–ˆ๋˜๊ฒŒ ๋‚˜๋ฆ„ ๋„์›€์ด ๋๋˜๊ฒƒ๊ฐ™๋‹ค. ์˜ค๋Š˜์˜ ์žก๋‹ด์€ ์—ฌ๊ธฐ๊นŒ์ง€...!

 

 

โ˜•์˜ค๋Š˜์˜ TIL(Today I Learn)


Git์ด๋ž€?

#Git

Git์€ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ด€๋ฆฌ๋ผ๋Š” ๊ฒƒ์€

  • ๋ฒ„์ „ ๊ด€๋ฆฌ
  • ๋ฐฑ์—…
  • ํ˜‘์—…

์ •๋„๋กœ ์ƒ๊ฐํ•ด๋ณผ์ˆ˜์žˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ์˜๋ฌธ์ด ์ƒ๊ธด๋‹ค. ์›น์— ์กฐ๊ธˆ๋งŒ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๋ฉด ์ž์ฃผ๋“ฃ๊ฒŒ๋˜๋Š” ๊นƒํ—ˆ๋ธŒ๋Š” ๊ณผ์—ฐ ๋ฌด์—‡์ธ๊ฐ€?

๊นƒํ—ˆ๋ธŒ๋Š” ๋กœ์ปฌ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” Git์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ผ์šฐ๋“œ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰ ํ˜‘์—…์ด๋‚˜ ๋ฐฑ์—…์˜ ๊ด€์ ์—์„œ ๋กœ์ปฌ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. 

์ถœ์ฒ˜ : designless.net

 

 

 

Git ๊ธฐ์ดˆ

# Git์˜ ์˜์—ญ

Git์˜ ์˜์—ญ์€ ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

(1) Work space : ํŒŒ์ผ์ด ์ž„์‹œ๋กœ ๋Œ€๊ธฐํ•˜๋Š” ์˜์—ญ

(2) Staging area

(3) Local repository : 

git init

์„ ํ•˜๊ฒŒ๋˜๋ฉด ํ•ด๋‹น๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“ ํŒŒ์ผ๋“ค์ด Git์˜ ๊ด€๋ฆฌ๋ฅผ ๋ฐ›๊ฒŒ๋œ๋‹ค. ์ด๋•Œ์˜ ์ƒํƒœ๊ฐ€ Work space์ด๋‹ค. 

Work space์— ์˜ฌ๋ผ๊ฐ€์žˆ๋Š”์ƒํƒœ๋Š” Git์˜ ๊ด€๋ฆฌ๋ฅผ ๋ฐ›๊ฒŒ๋œ Tracked(์ถ”์  ๋˜๊ณ ์žˆ์Œ) ๋ผ๊ณ  ํ• ์ˆ˜์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  git์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€์•Š์€ ์ƒํƒœ๋ฅผ Untracked(์ถ”์ ๋˜๊ณ ์žˆ์ง€์•Š์Œ) ์ƒํƒœ๋ผ๊ณ  ํ• ์ˆ˜์žˆ๋‹ค. 

์ถ”์ ์ด ๋˜๊ณ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋Š” ํŒŒ์ผ์˜ ์ˆ˜์ •์ด๋‚˜ ๋ณ€๊ฒฝ์ด ์žˆ์„๋•Œ Git์ด ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ฐ์ง€๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ผ๊ณ  ๋ณผ์ˆ˜์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Tracked์˜ ๊ฒฝ์šฐ ๋‹ค์‹œ 3๊ฐ€์ง€ ์ƒํƒœ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

 

Unmodified : ํŒŒ์ผ์˜ ์ˆ˜์ •์ด Git์— ์˜ํ•ด ๊ฐ์ง€๋˜์ง€ ์•Š์€ ์ƒํƒœ

Modified : ํŒŒ์ผ์˜ ์ˆ˜์ •์ด Git์— ์˜ํ•ด ๊ฐ์ง€๋œ ์ƒํƒœ

Staged : ํŒŒ์ผ์ด Staging area์— ์กด์žฌํ•˜๋Š” ์ƒํƒœ

 

์ฆ‰ ์œ„์˜ ๊ทธ๋ฆผ์—์„œ Work space -> Staging area๋กœ ์ด๋™์„ ํ•˜๊ฒŒ๋œ ์ƒํƒœ๋ฅผ Staged๋ผ๊ณ  ํ•˜๋ฉฐ ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š”

git add .

๋ช…๋ น์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (์ด๋•Œ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฉ”์„ธ์ง€๋„ ์ถœ๋ ฅ์•ˆ๋จ), ์„ฑ๊ณต์ ์ธ ์ˆ˜ํ–‰์„ ํ™•์ธํ•˜๊ณ ์‹ถ์œผ๋ฉด

git status

๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  Stage์— ์˜ฌ๋ฆฐ ํŒŒ์ผ์„ ๋‹ค์‹œ Staging are -> Work space๋กœ ๋Œ๋ฆฌ๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด๋œ๋‹ค.

git rm --cached [file name]

 

์ž์ด์ œ Staging are์— ์žˆ๋Š” ํŒŒ์ผ์„ Local repository๋กœ ์˜ฎ๊ฒจ๋ณด์ž. ์ด๋ฅผ commit ์ด๋ผ๊ณ  ํ•˜๋ฉฐ Local repository์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ฉฐ ๋™์‹œ์— ํŒŒ์ผ์˜ ๋ฒ„์ „๊นŒ์ง€ ๊ธฐ๋ก์„ ํ•œ๋‹ค.

git commit -m "[short message]"

commit์ด ์™„๋ฃŒ๋œ ์ƒํƒœ์—์„œ

git log

๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ„ฐ๋ฏธ๋„ ๋‚ด์— ๋ณ„๋„์˜ ์ฐฝ์ด ์—ด๋ฆฌ๋ฉด์„œ commit ๋‚ด์—ญ์„ ํ™•์ธํ•˜๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋•Œ ๋กœ๊ทธ๋ฉ”์„ธ์ง€์ค‘์— HEAD๋Š” ๋ธŒ๋žœ์น˜๋“ค์ค‘์— ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๋งํ•˜๊ณ  ์ˆซ์ž์˜์–ด ์กฐํ•ฉ์˜ ํ•ด์‹œ๊ฐ’์ด ๋ฒ„์ „๋งˆ๋‹ค ๋ถ€์—ฌ๋˜๋Š”๋ฐ ์ด๋ฅผ ์ปค๋ฐ‹ ํ•ด์‹œ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฒ„์ „์„ ์‹๋ณ„ํ• ์ˆ˜์žˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€์˜ ์ž‘์—…์€ ๋กœ์ปฌ์—์„œ ์ง„ํ–‰๋œ๊ฒƒ์ด๊ณ  ์ด์ œ Github๋ฅผ ํ†ตํ•ด Remote repository๋กœ ์ด๋ฅผ ์˜ฎ๊ฒจ๋ณด์ž. ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์˜จ๋ผ์ธ์— Remote repository ์ƒ์„ฑ

2. Remote repository ์™€ Local repository ์—ฐ๊ฒฐ ( git remote )

3. ์—…๋กœ๋“œ

 

1๋ฒˆ์ž‘์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ๊ณ ์žˆ์œผ๋‹ˆ ์ƒ๋žตํ•˜๊ณ  ๋‹ค์Œ์€ 2๋ฒˆ git remote๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ํ• ์ฐจ๋ก€์ด๋‹ค.

git remote add [๋ณ„์นญ] [์›๊ฒฉ์ €์žฅ์†Œ URL]

//ex
git remote add origin https://github.com/example/example.git

์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ์„ ์ง„ํ–‰ํ•œ๋’ค์— ๋งŒ์•ฝ Remote repository๋ฅผ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ด์ œํ•˜๋ ค๋ฉด

git remote rm [ํ•ด์ œํ•  ๋ณ„์นญ]

์„ ํ†ตํ•ด์„œ ํ•ด์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด

git remote --v

์ด๋Ÿฐ ๋ฉ”์„ธ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ ์ด๋•Œ

fetch๋Š” ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›์„๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ„์นญ๊ณผ URL์„ ๋‚˜ํƒ€๋‚ด๊ณ 

push๋Š” Remote repository๋กœ ์—…๋กœ๋“œํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ„์นญ๊ณผ URL์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

์ž์ด์ œ ์—ฐ๊ฒฐ์ด ๋๋‚ฌ์œผ๋‹ˆ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์—…๋ฌผ์„ Remote repository์— ์—…๋กœ๋“œ ํ•ด๋ณด์ž. ์ด๋ฅผ push๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

git push [remote์‹œ ์ž…๋ ฅํ–ˆ๋˜ ๋ณ„์นญ] [๋ธŒ๋žœ์น˜ ์ด๋ฆ„]

//ex
git push origin main

์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค..!

 

Git ์‹ค์Šต

์š”๊ฑฐ ๊ทธ๋ฆผ ์จ๋„ ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ... ์ผ๋‹จ ๋„ˆ๋ฌด ์ž˜์ •๋ฆฌ๋˜์–ด์žˆ์–ด์„œ ์˜ฌ๋ ค๋†“๊ณ  ๋งŒ์•ฝ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์‚ญ์ œํ•ด์•ผ๊ฒ ๋‹ค..!

 

# ํ˜‘์—…

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํƒ€์ธ์˜ Repo์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ํ˜‘์—…ํ• ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋‹จ ํƒ€์ธ์˜ repo์™€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

git remote add [repo ๋ณ„์นญ] [repo URL]

//ex
git remote add pair <์—ฐ๊ฒฐํ• ์ฃผ์†Œ>

๊ทธ๋ฆฌ๊ณ  ์ด์ƒํƒœ์—์„œ ์„œ๋กœ ์ˆ˜์ •์ด ์ง„ํ–‰๋˜๊ณ  ์ž‘์—…๋ฌผ์„ ๋ฐ›์•„์˜ค๋ ค๋ฉด 

git pull [repo ๋ณ„์นญ] [๋ธŒ๋žœ์น˜์ด๋ฆ„]

//ex
git pull pair main

์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์„œ ์ƒ๋Œ€๋ฐฉ์˜ remote repository์˜ ์ž‘์—…๋ฌผ์„ ๋ฐ›์•„์˜ฌ์ˆ˜์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ๋ฐ›์•„์˜ค๋Š” ๋‚ด์šฉ์€ ์ž๋™์œผ๋กœ ๋ณ‘ํ•ฉ(merge)๋œ๋‹ค.

 

 

Git ๋ช…๋ น์–ด ๋ชจ์Œ

git clone [URL] 	//remote repository ๋กœ์ปฌ๋กœ ๋ณต์ œ

 

 


๐Ÿ‘Šํ˜ผ์ž์„œ ํ•ด๊ฒฐํ•˜๊ธฐ


1. ํ˜‘์—… ์ง„ํ–‰์‹œ์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด?

ํ˜‘์—…์ค‘ ๋™์ผํ•œ ๋ผ์ธ์„ ์ˆ˜์ •ํ•œ๋’ค ์„œ๋กœ pull์„ ํ•˜๊ฒŒ๋˜๋ฉด merge ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋•Œ๋Š” git status ๋ช…๋ น์œผ๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์„ ๋ณผ์ˆ˜์žˆ๋‹ค. ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•œ๋’ค์— ๋‹ค์‹œ staging area๋กœ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  commit์„ ์ง„ํ–‰ํ•˜๋ฉด๋œ๋‹ค. 

 

2. ๋ฆฌ๋ˆ…์Šคํ™˜๊ฒฝ์—์„œ Github SSH์ธ์ฆ๊ณผ์ •์—์„œ ์žฅ์• ๋ฐœ์ƒ

2023.04.18 - [Tip!โœจ] - ์šฐ๋ถ„ํˆฌ ํ™˜๊ฒฝ์—์„œ Github ssh์ธ์ฆ์‹œ ์žฅ์• 

 

3.git pull ๊ณผ git clone์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

- git clone์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์ด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•ด์ง„๋‹ค. 

- git pull์„ ์‚ฌ์šฉํ•˜๋ฉด ์›๊ฒฉ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์™€ ๋ณ‘ํ•ฉ(merge)๊นŒ์ง€ ์‹คํ–‰ํ•ด์ค€๋‹ค. ์ฆ‰ ๊ธฐ์กด ์ž‘์—… ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ตœ์‹ ์ฝ”๋“œ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

* ๋‹ค์‹œ๋งํ•ด์„œ git clone์€ ์ดˆ๊ธฐ ๋‹ค์šด๋กœ๋“œ์— ์‚ฌ์šฉํ•˜๊ณ  git pull์€ ์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ ๋“ฑ์„ ๋‹ค์šด๋กœ๋“œ ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•