๐Ÿ“š ํŒจํŠธ์Šค์บ ํผ์Šค ๋ฐ๋ธŒ์บ ํ”„ ํ”„๋ก ํŠธ์—”๋“œ 1์ฃผ์ฐจ ํŠน๊ฐ• ์ˆ˜๊ฐ• ํ›„ ์‹ค์Šต ๋ฐ ๋ณต์Šต ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๐Ÿ“š ์ž˜๋ชป๋œ ์ •๋ณด๋Š” ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
๐Ÿ“š ํ•™์Šต์— ๋„์›€๋œ ๋„์„œ : ํŒ€ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Git, GitHub ์‹œ์ž‘ํ•˜๊ธฐ

์ผ์ƒ์ƒํ™œ์—์„œ ๊ณผ์ œ๋‚˜ ์—…๋ฌด๋ฅผ ํ•˜๋‹ค ๋ณด๋ฉด ํŠน์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋ณดํ†ต ๊ธฐ์กด์˜ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ ํ›„ ์ž‘์—…ํ•˜๊ฒŒ ๋˜๊ณ , ์ด ๊ณผ์ •์—์„œ ๋™์ผํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง„ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‘ ๋ช… ์ด์ƒ์ด ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ์—ฌ๋Ÿฌ ๋ช…์ด ์ฐธ์—ฌํ•˜๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Git๊ณผ GitHub๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋“ค์€ "Git์ด GitHub ์•„๋‹ˆ์•ผ?"๋ผ๊ณ  ์ฐฉ๊ฐํ•˜๊ธฐ๋„ ํ•˜๊ณ , ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ์•Œ์ง€๋งŒ ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. (๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ €) ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด Git๊ณผ GitHub์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , Git์ด ์–ด๋–ป๊ฒŒ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.


Git๊ณผ GitHub์˜ ์ฐจ์ด

Git : ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

Git์€ ๋ถ„์‚ฐํ˜• ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ž€? ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‹œ์ (๋ฒ„์ „)์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋„์™€์ฃผ๋Š” ์‹œ์Šคํ…œ์ด ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด Git์ž…๋‹ˆ๋‹ค.

GitHub : ํ˜ธ์ŠคํŒ… ์‚ฌ์ดํŠธ

ํ˜ธ์ŠคํŒ…์ด๋ž€? ์ผ์ • ๊ณต๊ฐ„์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž„๋Œ€ํ•ด ์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Git์„ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ์˜ ๋ฒ„์ „์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๊ณผ ํ˜‘์—…ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋งŒ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉด ๊ทธ๊ฒŒ ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ์„๊นŒ์š”? ์ด์— ์šฐ๋ฆฌ๋Š” GitHub๋ผ๋Š” ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์›น์ƒ์— ์˜ฌ๋ ค๋‘๊ณ  ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„์˜ ์ œ์•ฝ ์—†์ด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค๊ณผ ํ˜‘์—… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Git์˜ ๋‚ด๋ถ€๋ฅผ ํŒŒํ—ค์ณ๋ณด์ž

git init - ์ €์žฅ์†Œ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ

์œ„ ์‚ฌ์ง„์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ git-obj ํด๋”๋ฅผ git init ๋ช…๋ น์–ด๋กœ ์ดˆ๊ธฐํ™”ํ•œ ์ƒํƒœ๋กœ, ์•„์ง ์•„๋ฌด ํŒŒ์ผ๋„ ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  .git/objects ํด๋”๋Š” Git ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์œผ๋กœ ํ˜„์žฌ๋Š” ๋˜‘๊ฐ™์ด ์•„๋ฌด๊ฒƒ๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์›Œํ‚น ํŠธ๋ฆฌ์— ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ

README.md ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ , git status ๋ช…๋ น์„ ํ†ตํ•ด ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉด Untracked ์ƒํƒœ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•„์ง๊นŒ์ง€๋Š” ์›Œํ‚น ํŠธ๋ฆฌ์— ํŒŒ์ผ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ ์™ธ์— ๋ณ„๋‹ค๋ฅธ ๋ณ€ํ™”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

git add - ์Šคํ…Œ์ด์ง€์— ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ

(Tip) Git Index๋Š” ์Šคํ…Œ์ด์ง€์˜ ๋‹ค๋ฅธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

git add README.md ๋ช…๋ น ์‹คํ–‰ ํ›„ git status ๋ช…๋ น์œผ๋กœ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉด README.md ํŒŒ์ผ์ด ์Šคํ…Œ์ด์ง€์— ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ .git ๋‚ด๋ถ€์— index ํŒŒ์ผ์ด ํ•˜๋‚˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ํŒŒ์ผ์ด ๋ฐ”๋กœ Git์˜ ์Šคํ…Œ์ด์ง€(Git Index)์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ .git/objects ํด๋”๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋ชป ๋ณด๋˜ 2f ํด๋”๊ฐ€ ์ƒ๊ธด ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Git ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜๋กœ git cat-file -t ํ•ด์‹œ ๋ช…๋ น์„ ํ†ตํ•ด blob ๊ฐ์ฒด์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋•Œ ํด๋”๋ช…, ํŒŒ์ผ๋ช…์ด ์ƒ์„ฑ๋˜๋Š” ๊ทœ์น™์€ ์•„๋ž˜์˜ Git์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

โœ”๏ธ index ํŒŒ์ผ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?
git ls-files --stage ๋ช…๋ น์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”๏ธ Git์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
Git์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ฐ์ดํ„ฐ์™€ ํ—ค๋”๋กœ ์ƒ์„ฑํ•œ SHA-1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ์ง“์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ์˜ ์ฒ˜์Œ ๋‘ ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์— ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€ 38๊ธ€์ž๋Š” ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ์‹ค์Šต๋ฐฉ๋ฒ•์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git commit - ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐ

commit ๋ช…๋ น ์‹คํ–‰ ํ›„ git status ๋ช…๋ น์œผ๋กœ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉด '์ž‘์—… ํด๋” ๊นจ๋—ํ•จ(clean)' ์ƒํƒœ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ clean ์ƒํƒœ๋Š” ์Šคํ…Œ์ด์ง€๊ฐ€ ๋น„์–ด์žˆ๋‹ค๊ฐ€ ์•„๋‹Œ ์›Œํ‚นํŠธ๋ฆฌ์™€ ์Šคํ…Œ์ด์ง€, HEAD ์ปค๋ฐ‹์˜ ๋‚ด์šฉ์ด ๋˜‘๊ฐ™๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

.git/objects ํด๋”์˜ ๋ณ€ํ™”๋ฅผ ์‚ดํŽด๋ณด๋ฉด 2๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  git cat-file -t ํ•ด์‹œ ๋ช…๋ น์–ด๋กœ ํƒ€์ž…์„ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฐ๊ฐ tree์™€ commit ๊ฐ์ฒด์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”๏ธ Tree ๊ฐ์ฒด
์ผ์ข…์˜ ๋””๋ ‰ํ† ๋ฆฌ(ํด๋”) ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋ฉฐ ํŒŒ์ผ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹œ๊ฐ’, ์‹ค์ œ ํŒŒ์ผ๋ช…์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.


๐Ÿ”— Git, GitHub ์‚ฌ์šฉ์— ์œ ์šฉํ•œ ์ •๋ณด

  1. GitFlow : Git ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. gitignore : ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ถ”์ฒ™ ๊ธˆ์ง€ ๋Œ€์ƒ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. mermaid : MarkDown ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์‹œ๊ฐ์ ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฌธ์„œ ์ž‘์„ฑ ์‹œ ์œ ์šฉ)
profile
๐Ÿ“š ๋ฐฐ์›€์˜ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด์š” | ๐Ÿ’ฌ ๊ฐ€๋ณด์ž๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€