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

Study/Gitโ”‚GitHub

Git, GitHub๋ž€?

Git ์†Œ๊ฐœ

๋„๊ตฌ ๊ฐœ์š”

- ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ๋Œ€ํ‘œ ๋„๊ตฌ

 

๋ชฉ์ : ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

- ์‚ฐ์ถœ๋ฌผ์˜ ๋ฌด๊ฒฐ์„ฑ ํ™•๋ณด

- ์†Œ์Šค์ฝ”๋“œ ๋ฒ„์ „ ๊ด€๋ฆฌ - ํŒŒ์ผ ๋ณ€๊ฒฝ ์ด๋ ฅ ๊ด€๋ฆฌ

- ์™œ ์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ–ˆ๋Š”์ง€ ํ™•์ธ

 

์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

- ๋ณ„๋„์˜ ์ €์žฅ์†Œ ์šด์˜ ์„œ๋ฒ„ ์‚ฌ์šฉ

    - Git: GitHub, Bitbucket, Gitlab, Gitblit

- ํด๋ผ์ด์–ธํŠธ๋Š” Core๋‚˜ ๋ณ„๋„์˜ ํ™•์žฅ ๋„๊ตฌ ์‚ฌ์šฉ

    - Eclipse/Intelli J ๊ณ„์—ด/Vs Code ํ”Œ๋Ÿฌ๊ทธ์ธ: ๊ธฐ๋ณธ ํฌํ•จ

 

 

Git ๊ฐœ์š”

์—ญ์‚ฌ

- 2005๋…„ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฐœ์ฆˆ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ

- ํ˜„์žฌ GitHub์—์„œ ์šด์˜

 

์‚ฌ์šฉ ์ฃผ์ฒด

- ๋ฆฌ๋ˆ…์Šค, Git์„ ํฌํ•จํ•˜์—ฌ ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค๋Š” Git(GitHub) ์‚ฌ์šฉ

- ํšŒ์‚ฌ์˜ ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๋Š” Git์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์„ธ

 

 

Git

๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜

- ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋™์ผํ•œ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์œ ์ง€

 

 

๊ธฐ๋ณธ ์šฉ์–ด

๋ฒ„์ „

- Git์—์„œ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ง€์ •ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ๊ธฐ๋Š” ๊ฒƒ

- ๋ฒ„์ „๋งˆ๋‹ค ๋ณ€๊ฒฝ ์‹œ์ ๊ณผ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

- ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ

 

์ž‘์—…ํŠธ๋ฆฌ, ์Šคํ…Œ์ด์ง€, ์ €์žฅ์†Œ

โ€ป ์ด ์ €์žฅ์†Œ๋Š” ๋กœ์ปฌ ์ €์žฅ์†Œ์— ํ•ด๋‹น๋จ

 

์˜๋ฌธ ์„ค๋ช…
Init ๊ธฐ์กด ํด๋”์— ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑ
Clone ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋‚ด ๋กœ์ปฌ์— ๋ณต์‚ฌ
Push ๋‚ด ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ฐ˜์˜
Pull ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‚ด ์ €์žฅ์†Œ์— ๋ฐ˜์˜
Add ์ˆ˜์ •๋œ ํŒŒ์ผ์„ Staging Area์— ๋“ฑ๋กํ•˜์—ฌ Staged ์ƒํƒœ ๋งŒ๋“ฆ
Check-out ์ž‘์—…ํ•  ๋ธŒ๋žœ์น˜๋ฅผ ์ง€์ •
Commit Staged ์ƒํƒœ์˜ ํŒŒ์ผ์„ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ฐ˜์˜
Remote Rspository ๊ณต์œ ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ์†Œ, ์„œ๋ฒ„์˜ ์—ญํ•  (๊นƒํ—ˆ๋ธŒ๊ฐ™์€ ์›๊ฒฉ ์ €์žฅ์†Œ)

 

๊นƒ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ (๋กœ์ปฌ ์ €์žฅ์†Œ)

๊นƒ ์ดˆ๊ธฐํ™”

- ์›ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ฆ

- ์ดˆ๊ธฐํ™” ํ›„์— .git ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ๊น€ (์ˆจ๊น€ ํด๋”์ž„)

๋ช…๋ น์–ด (์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ํ•  ๋•Œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ (์•ˆ๋“œ ๋ฐฐ์šฐ๋Š” ์ค‘..))
$ git init

 

 

๋ฒ„์ „ ๋งŒ๋“ค๊ธฐ

๋ฒ„์ „ ๋งŒ๋“œ๋Š” ๊ณผ์ •

1) ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅ

 

2) ๋ฒ„์ „์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์Šคํ…Œ์ด์ง€์— ๋„ฃ์Œ (๋ฒ„์ „์„ ๋งŒ๋“ค๊ธฐ ์ „ ํŒŒ์ผ์„ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ๊ฒƒ)

    - git add . / git add hello.txt

    - ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ(hello.txt)์„ ์Šคํ…Œ์ด์ง€์— ์ถ”๊ฐ€

 

3) ์Šคํ…Œ์ด์ง€์— ์žˆ๋˜ ํŒŒ์ผ์„ ์ €์žฅ์†Œ์— ๋ฒ„์ „์œผ๋กœ ์ €์žฅ (๋ฒ„์ „ ์ƒ์„ฑ)

    - git commit -m "message 1"

    - ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ '์ปค๋ฐ‹ํ•œ๋‹ค'๋ผ๊ณ  ํ•จ

    - ๋ฒ„์ „์— ์–ด๋–ค ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋Š”์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๊ธฐ๋กํ•ด ๋‘ 

500

 

 

GitHub

์›๊ฒฉ ์ €์žฅ์†Œ

- ์ง€์—ญ ์ €์žฅ์†Œ(๋กœ์ปฌ ์ €์žฅ์†Œ)๊ฐ€ ์•„๋‹Œ ์ปดํ“จํ„ฐ๋‚˜ ์„œ๋ฒ„์— ๋งŒ๋“  ์ €์žฅ์†Œ

- ์ง€์—ญ ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ

- ์ธํ„ฐ๋„ท์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ ์ œ๊ณต ์„œ๋น„์Šค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ → ๊นƒํ—ˆ๋ธŒ

 

 

์›๊ฒฉ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

โ‘  Repository nome: ์ €์žฅ์†Œ ์ด๋ฆ„, ์˜๋ฌธ๊ณผ ์ˆซ์ž, ์–ธ๋”๋ฐ”(_), ๋ถ™์ž„ํ‘œ(-) ๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ‘ก Description: ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช… ์ž…๋ ฅ

โ‘ข Public / Private: ์ €์žฅ์†Œ๋ฅผ ๊ณต๊ฐœ๋กœ ํ• ์ง€ ๋น„๊ณต๊ฐœ๋กœ ํ• ์ง€ ์„ ํƒ

โ‘ฃ Initialize this repository with a README: ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์†Œ๊ฐœ์™€ ์„ค๋ช…์„ ์ž‘์„ฑํ•˜๋Š” README ํŒŒ์ผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

โ‘ค Add .gitignore: [โ–ผ]๋ฅผ ๋ˆ„๋ฅธ ํ›„ ์–ด๋–ค ์–ธ์–ด์™€ ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์„ .gitignore ํŒŒ์ผ์— ์ง€์ •ํ• ์ง€ ์„ ํƒ (.gitignore๋Š” ๊นƒ์—์„œ ๋ฌด์‹œํ•  ํŒŒ์ผ์„ ์ €์žฅํ•œ ๋ชฉ๋ก)

    - ์˜ˆ) ์•ˆ๋“œ๋กœ์ด๋“œ ์„ ํƒ -> gitignore ํŒŒ์ผ์— ์ €์žฅ๋œ ํŒŒ์ผ๋“ค์„ ๋ฌด์‹œํ•˜๊ฒŒ ๋จ

โ‘ฅ Add a License: ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ ์˜คํ”ˆ ์†Œ์Šค์˜ ๋ผ์ด์„ ์Šค ์„ ํƒ

 

 

๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•˜๊ธฐ

- ๋ช…๋ น์–ด ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ์ด์šฉํ•ด์„œ ๋ช…๋ น์–ด ์—†์ด ์‚ฌ์šฉํ•  ์˜ˆ์ •)

 

๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ฃผ์†Œ ๋ณต์‚ฌ

- ์ฃผ์†Œ ๋ณต์‚ฌํ•ด์„œ ๋กœ์ปฌ ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐ

 

์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐํ•˜๊ธฐ

- git remote add origin ๋ณต์‚ฌํ•œ ์ฃผ์†Œ ๋ถ™์—ฌ๋„ฃ๊ธฐ (๊นƒํ—ˆ๋ธŒ ์ €์žฅ ์ฃผ์†Œ๋ฅผ origin์œผ๋กœ ์ค„์—ฌ์„œ ํ‘œํ˜„ํ•˜๊ณ  remote์— ์ถ”๊ฐ€ํ•จ)

 

 

์›๊ฒฉ ์ €์žฅ์†Œ ํŒŒ์ผ ์˜ฌ๋ฆฌ๊ธฐ

์›๊ฒฉ ์ €์žฅ์†Œ์— ํŒŒ์ผ ์˜ฌ๋ฆฌ๊ธฐ

- ํ‘ธ์‹œ(push): ์ง€์—ญ ์ €์žฅ์†Œ์˜ ์†Œ์Šค๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ ๋งŒ๋“ค๊ธฐ

- ์ง€์—ญ ์ €์žฅ์†Œ์˜ ์†Œ์Šค๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ(origin)์˜ master ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ

    - ์ฒ˜์Œ ํ‘ธ์‹œํ•  ๋•Œ๋Š” -u ์˜ต์…˜์„ ๋ถ™์—ฌ์คŒ (git push -u origin master)

    - ํ•œ๋ฒˆ ํ‘ธ์‹œํ•œ ํ›„์—๋Š” git push ๋ช…๋ น์œผ๋กœ ํ‘ธ์‹œ

- ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์ ‘์†ํ•˜๋ฉด ์ง€์—ญ ์ €์žฅ์†Œ์— ์žˆ๋˜ ํŒŒ์ผ๊ณผ ์ปค๋ฐ‹์ด ์˜ฌ๋ผ๊ฐ€ ์žˆ์Œ

 

 

์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํŒŒ์ผ ๋‚ด๋ ค๋ฐ›๊ธฐ

์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํŒŒ์ผ ๋‚ด๋ ค๋ฐ›๊ธฐ

- ํ’€(pull): ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ์ด ์žˆ์„ ๊ฒฝ์šฐ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์†Œ์Šค๋ฅผ ์ง€์—ญ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ด

    - git pull origin master

 

 

ํ˜‘์—…ํ•˜๊ธฐ

๊ณต๋™ ์ž‘์—…์ž ์ถ”๊ฐ€ํ•˜๊ธฐ

- ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ํ•˜๋‚˜์˜ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•  ๋•Œ ์†Œ์Šค๋ฅผ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก ์Šน์ธ๋œ ๊ณต๋™ ์ž‘์—…์ž์—๊ฒŒ๋งŒ ์ปค๋ฐ‹ ๊ถŒํ•œ์„ ์ฃผ๋„๋ก ํ•จ

 

์ฒซ๋ฒˆ์งธ ์ž‘์—…์ž๊ฐ€ ์ปค๋ฐ‹ ํ›„ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ํ‘ธ์‹œ

 

๊ณต๋™ ์ž‘์—…์ž๋“ค์€ git clone ๋ช…๋ น์œผ๋กœ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์— ์›๊ฒฉ ์ €์žฅ์†Œ ๋ณต์ œ

 

์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๊ธฐ

- ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํ’€(pull)์„ ๋จผ์ € ํ•œ ํ›„ 

- ์ž์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ปค๋ฐ‹(commit)ํ•˜๊ณ 

- ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ํ‘ธ์‹œ(push)

 

 

Git์˜ Branch

๋ธŒ๋žœ์น˜(Branch)

- ์›๋ณธ์˜ ๋ณต์‚ฌ๋ณธ

- ๋Œ€๋ถ€๋ถ„์˜ VCS(Version Control System)์—์„œ ์ง€์›

- ์šฉ๋„

    - ํŠน์ • ๊ธฐ๋Šฅ์„ ์›๋ณธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ใ…Ž

    - ๋ฒ ์ด์Šค๋ผ์ธ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด

 

Git ๋ธŒ๋žœ์น˜์˜ ์šฉ์ดํ•จ

- Git์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๋ณ€๊ฒฝ์„ ์Šค๋ƒ…์ƒท ํฌ์ธํ„ฐ๋กœ ๊ด€๋ฆฐ

- ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ๋ณต์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ด๋™ ๊ฐ€๋Šฅ

 

Git๋ฅผ ๋ณด๋‹ค ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ธŒ๋žœ์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€์— ์ขŒ์šฐ