๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Git & Github

๐Ÿ˜ƒGit bash - Part 1 : ์‚ฌ์ „์ง€์‹๊ณผ ์ดˆ๊ธฐ ์„ค์ • & Github์™€ Git ์—ฐ๊ฒฐํ•˜๊ธฐ

728x90

๐Ÿ˜ƒ Git

์ปดํ“จํ„ฐ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์— ํ•ด๋‹น ํŒŒ์ผ ์ž‘์—…์„ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(VCS) ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ˜ƒ Github

Git์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ์›นํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋กœ, ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ฒ„์ „ ์ œ์–ด ๋ฐ ๊ณต๋™ ์ž‘์—…์„ ์œ„ํ•œ ํ”Œ๋žซํผ ์ž…๋‹ˆ๋‹ค.

 

Git์„ ์„ค์น˜ํ•˜๊ณ , Gitbash๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์„ค์ •ํ•ด์•ผํ•  ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ˜ƒ ์›๊ฒฉ ์ €์žฅ์†Œ (Remote Repository)

ํŒŒ์ผ์ด ์›๊ฒฉ ์ €์žฅ์†Œ ์ „์šฉ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํ•จ๊ป˜ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ์ €์žฅ์†Œ ์ž…๋‹ˆ๋‹ค.(git push)

 

๐Ÿ˜ƒ ๋กœ์ปฌ ์ €์žฅ์†Œ (Local Repository)

ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ๊ฐœ์ธ ์ „์šฉ ์ €์žฅ์†Œ(PC) ์ž…๋‹ˆ๋‹ค. 

 

๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ Working Directory(์ž‘์—… ์˜์—ญ)  /  Index ์˜์—ญ  Header ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. 

  • Working Directory(์ž‘์—… ์˜์—ญ) : PC์—์„œ ํ˜„์žฌ ์ž‘์—… ์ค‘์— ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(git init)  ==  ์ž‘์—…ํŠธ๋ฆฌ(working tree) 
  • Index ์˜์—ญ : Git์— ์˜ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถ”์  ๊ด€๋ฆฌ๋˜๋Š” ์ปค๋ฐ‹์„ ์ค€๋น„ํ•˜๋Š” ์˜์—ญ(git add)  ==  Stage(์Šคํ…Œ์ด์ง€)
  • Header ์˜์—ญ : PC ๋‚ด์—์„œ ์ปค๋ฐ‹๋“ค์ด ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ์˜์—ญ(git commit)

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ Git์€ Index ์˜์—ญ์—์„œ 40์ž์˜ hashCode์ธ Tree๋กœ ๊ด€๋ฆฌ(๊ฐ Tree๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹)๋˜๊ณ  ์ด ๊ฒƒ์„ Header ์˜์—ญ์— commit ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Index ์˜์—ญ ์ž์ฒด๊ฐ€ ๋”ฐ๋กœ ๋ณต์ œ๋˜์–ด ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ˆ˜๋กœ ์กฐ์ž‘์„ ์ž˜๋ชปํ–ˆ๋”๋ผ๋„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ๋“  ๋ฐฑ์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์‚ฌ์ดํŠธ์—์„œ ์ตœ์ฃผํ˜ธ๋‹˜์˜ "์ง€์˜ฅ์—์„œ ์˜จ ๊ด€๋ฆฌ์ž Git"์˜ "Git 3๊ฐ€์ง€ ์˜์—ญ"์ด๋ผ๋Š” ๊ฐ•์˜ ์˜์ƒ์„ ํ†ตํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://www.inflearn.com/

 

์ธํ”„๋Ÿฐ - ํ”„๋กœ๊ฐ€ ๋˜๋Š” ์˜จ๋ผ์ธ ํด๋ž˜์Šค | ์˜จ๋ผ์ธ ๊ฐ•์˜ ํ”Œ๋žซํผ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ธ๊ณต์ง€๋Šฅ, ๋ฐ์ดํ„ฐ, ๋งˆ์ผ€ํŒ…, ๋””์ž์ธ, ์—‘์…€ ์‹ค๋ฌด ๋“ฑ ์ž…๋ฌธ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ์—…๊ณ„ ์ตœ๊ณ  ์„ ๋ฐฐ๋“ค์—๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ณณ. ์šฐ๋ฆฌ๋Š” ์„ฑ์žฅ ๊ธฐํšŒ์˜ ํ‰๋“ฑ์„ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค....

www.inflearn.com

 

 

๐Ÿ˜ƒ Master์™€ HEAD

Mater๋Š” ์ฒ˜์Œ์— ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ๊ธฐ๋ณธ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” branch๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

HEAD๋Š” ์ง€๊ธˆ ์ž‘์—…์ค‘์ธ branch ๋˜๋Š” commit์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค.

 

 

1๏ธโƒฃ ์‚ฌ์šฉ์ž ์ •๋ณด ์„ค์ •

Git์„ ์„ค์น˜ํ•œ ํ›„ ๊ฐ€์žฅ ๋จผ์ € ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” Git์ด ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•˜๋ฉฐ, Git GUI ๋„๊ตฌ๋“ค์€ ์ฒ˜์Œ ์‹คํ–‰ ์‹œ ์ด ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

--global ์˜ต์…˜์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ , ํ•œ ๋ฒˆ commit ํ•œ ํ›„์—๋Š” ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด --global ์˜ต์…˜์„ ๋นผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Git ๋ฒ„์ „์„ ํ™•์ธ
$ git --version

Git ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์„ค์ •
$ git config --global user.name "GONI95"
$ git config --global user.email "git95@example.com"

์„ค์ •๊ฐ’ ํ™•์ธ (q๋กœ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
$ git config --list

 

Windows์™€ Mac์—์„œ CRLF ๊ฐœํ–‰ ๋ฌธ์ž ์ฐจ์ด๋กœ ์ธํ•ด์„œ Windows์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ Unix๊ณ„์—ด์—์„œ ํŽธ์ง‘ํ•  ๋•Œ ^M์ด ๋ถ™๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Windows์˜ ๊ฒฝ์šฐ
$ git config --global core.autocrlf true

Mac์˜ ๊ฒฝ์šฐ
$ git config --global core.autocrlf input

 

 

์ถ”๊ฐ€์ ์œผ๋กœ, ํŠน์ • ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋‘” ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” Alias๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๋‹จ์ถ•ํ‚ค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ถ•ํ‚ค ์„ค์ •
$ git config --global alias.st 'status -s'
$ git config --global alias.๋‹จ์ถ•ํ‚ค '๋ช…๋ น์–ด'

 

2๏ธโƒฃ Git์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

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

์ž‘์—… ํŠธ๋ฆฌ ์ƒ์„ฑ
$ mkdir workDirectory

์ž‘์—… ํŠธ๋ฆฌ๋กœ ์ด๋™
$ cd workDirectory

ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๋น„์–ด์žˆ๋Š” Git ์ €์žฅ์†Œ ์ƒ์„ฑ ๋˜๋Š” ๊ธฐ์กด ์ €์žฅ์†Œ๋ฅผ ์ดˆ๊ธฐํ™”
์ฆ‰, ํ•ด๋‹น ํด๋” or ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Git ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
$ git init

 

 

3๏ธโƒฃ Github Repository์™€ Git ์—ฐ๊ฒฐ

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

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ Github์˜ Repository ์ƒ์„ฑํ•ด ๋กœ์ปฌ ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ ์ €์žฅ์†Œ์— ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
$ git remote ๋˜๋Š” $ git remote add origin ์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ

์ €์žฅ์†Œ ์—ฐ๊ฒฐ ์กฐํšŒ
$ git remote -v

 

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.