์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

Git & GitHub ๊ธฐ๋ณธ ๊ฐœ๋…

๐ŸŽ iOS/Git&GitHub

by AHN.Jihyeon 2024. 5. 30. 23:51

๋ณธ๋ฌธ

1. Git & GitHub ์ฐจ์ด์ 


โœ… Git

: ์ปดํ“จํ„ฐ์— ์„ค์น˜๋˜๋Š” SW๋กœ ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(VCS)

Git์€ ๋กœ์ปฌ์ €์žฅ์†Œ(๋‚ด ์ปดํ“จํ„ฐ)์™€ ์›๊ฒฉ ์ €์žฅ์†Œ(์„œ๋ฒ„ ์ปดํ“จํ„ฐ)๋กœ ๋‚˜๋‰œ๋‹ค. 

 

Git์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ์ฝ”๋“œ์˜ ์›๋ณธ์ด๋‚˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์‹œ ์ž‘์—… ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. 

 

์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํˆด์„ ํ˜•์ƒ ๊ด€๋ฆฌ ํˆด์ด๋ผ๊ณ  ํ•˜๊ณ , ๋Œ€ํ‘œ์ ์œผ๋กœ Git, SVN, CVS ๋“ฑ์ด ์žˆ๋‹ค. 

 

 

* repository(repo) : Git์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ํ”„๋กœ์ ํŠธ

๋‚ด ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋กœ์ปฌ repo,

Github ๊ฐ™์€ ์›น ์„œ๋น„์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์›๊ฒฉ repo๋ผ๊ณ  ํ•œ๋‹ค. 

 

 

 

โœ… GitHub

: ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ํˆด์ธ Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์„œ๋น„์Šค

(GitLab, Bitbucket ๋“ฑ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๊ฐ€ ์žˆ์Œ)

 

 

 

 

 

2. Git ๊ธฐ๋ณธ ๋ช…๋ น์–ด(CLI) 


๐Ÿ”ฝ  $ git init
: git๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด. ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํฌ๋งํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ
์ฒ˜์Œ์— ํ•œ ๋ฒˆ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๐Ÿ”ฝ  $ git clone
: ์›๊ฒฉ repo์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด ์ปดํ“จํ„ฐ์— ๋ณต์ œํ•ด ์ดˆ๊ธฐ repo ์„ธํŒ…
git clone์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ, ์ปค๋ฐ‹ ๋ฐ ๋ธŒ๋žœ์น˜๋ฅผ ํฌํ•จ

๐Ÿ”ฝ $ git add ViewController.swift(ํŒŒ์ผ๋ช…)
: staging ์ƒํƒœ. 
๋กœ์ปฌ, ์›๊ฒฉ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•  ํŒŒ์ผ์„ ์ถ”๊ฐ€.
์ปค๋ฐ‹์— ๋ฐ˜์˜ํ•  ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Œ 

๐Ÿ”ฝ $ git commit -m "UITableView๋ฅผ ํ†ตํ•œ ๋ ˆ์ด์•„์›ƒ ์ž‘์—…"
: git add๋กœ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ๋“ค์„ ๋กœ์ปฌ์ €์žฅ์†Œ(๋‚ด ๋งฅ๋ถ)์— ์ €์žฅ(๊ธฐ๋ก)
- ๋ˆ„๊ฐ€/ ์–ธ์ œ/ ์ปค๋ฐ‹ ์‹œ์ ์˜ ํŒŒ์ผ ์ƒํƒœ / ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ •๋ณด๋ฅผ ํฌํ•จ

$ git commit -m "์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ - close #[์ด์Šˆ ๋ฒˆํ˜ธ]"
$ git commit -m "์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ - fix #[์ด์Šˆ ๋ฒˆํ˜ธ]"
$ git commit -m "์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ - resolve #[์ด์Šˆ ๋ฒˆํ˜ธ]"
 

๐Ÿ”ฝ $ git push origin main(๋ธŒ๋žœ์น˜๋ช…)
: ์ž‘์—…ํ•œ ๋กœ์ปฌ repo์˜ commit๋“ค ->  ์›๊ฒฉ repo๋กœ ์—…๋ฐ์ดํŠธ(push)

๐Ÿ”ฝ $ git pull
: ์›๊ฒฉ repo์— ์—…๋Žƒ๋œ ์ƒˆ๋กœ์šด commit๋“ค ->  ๋กœ์ปฌ repo๋กœ ์—…๋ฐ์ดํŠธ(pull)

๐Ÿ”ฝ $ git status
: ์ถ”์ ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ˆ˜์ •๋˜๊ฑฐ๋‚˜, ์Šคํ…Œ์ด์ง€ ๋œ ๋ณ€๊ฒฝ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ

๐Ÿ”ฝ $ git branch
: ๋กœ์ปฌ์—์„œ ์ž‘์—… ์ค‘์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณด์—ฌ์คŒ.

$ git branch JH            // JH ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ 
$ git branch JH main   // main์—์„œ ํŒŒ์ƒ๋˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.
$ git bracnch -D JH     // JH ๋ธŒ๋žœ์น˜ ์‚ญ์ œ  


๐Ÿ”ฝ $ git merge
: ๋‘ ๊ฐœ์˜ ๋ณ„๊ฐœ์˜ ๋ถ„๊ธฐ์—์„œ ์ด๋ฃจ์–ด์ง„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒฐํ•ฉ


 

 

 

 

3. Xcode ๋‚ด์—์„œ ์‚ฌ์šฉ๋ฒ•


 

์ถœ์ฒ˜ : ์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด๋ฐฐ์บ  ๊ฐ•๋™์˜ ํŠœํ„ฐ๋‹˜ ๋…ธ์…˜ ๊ณต์œ  ์ž๋ฃŒ

 

 

 

 

 

 

4. Git ํ˜‘์—… ์‹œ๋‚˜๋ฆฌ์˜ค_์ถฉ๋Œ(Conflict) ๋ฐฉ์ง€


1. ๋ˆ„๊ฐ€ ํ•ด๋‹น ์ž‘์—…์„ ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•˜๊ธฐ_ Issue ํ• ๋‹น

 

* ํ”„๋กœ์ ํŠธ์—์„œ์˜ issue๋ž€?

- ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์›ํ•˜๋Š”๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ๋ฐœ๊ฒฌ,

ํ”„๋กœ์ ํŠธ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ƒˆ๋กœ ์ถ”๊ฐ€๋  ๊ธฐ๋Šฅ, ๋‚ด๊ฐ€ ํ•  ์ž‘์—… ๋“ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…

 

 

* Github์—์„œ ์ด์Šˆ ์ƒ์„ฑ ์‹œ labels(ํ•ด๋‹น ์ž‘์—… ๋ถ„๋ฅ˜) 

๋‚˜์ค‘์— ๋ณด๋ ค๊ณ  ์ €์žฅํ•ด๋‘” ๋…ธ์…˜์ธ๋ฐ ์ถœ์ฒ˜๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†,,,,๐Ÿฅฒ

 

 

Github๊ณผ ํ•จ๊ป˜ ์ด์Šˆ๋ฅผ ์ถ”์ (tracking)ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ Jira, Trelloe ๋“ฑ์ด ์žˆ๋‹ค. 

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์„ค๊ณ„๋ถ€ํ„ฐ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋””๊นŒ์ง€ ์ง„ํ–‰์ด ๋๋Š”์ง€ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

Github์™€ Jira๋ฅผ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. 

๐Ÿ”ฝ ์—ฐ๋™๋ฐฉ๋ฒ• ๋ธ”๋กœ๊ทธ ๋งํฌ

๐Ÿ”ฝ Github๋ฅผ ์‚ฌ์šฉํ•œ ์ด์Šˆ๊ด€๋ฆฌ 

 

 

2. ๊ฐ์ž ๋งก์€ ์ž‘์—… ํ•˜๊ธฐ_Branch

๋ธŒ๋žœ์น˜๋Š” ํŠน์ • commit์—์„œ ๊ฐˆ๋ผ์ ธ ๋‚˜์™€ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ธฐ๋Šฅ๋ณ„๋กœ ์ด๋ฆ„์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ๋‹ค. 

 

ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค branch๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‚˜

commit ํ•˜๊ณ  ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ‹€์–ด flow๋ผ๊ณ  ํ•œ๋‹ค. 

 

๊ทœ์น™์„ ์ž˜ ์ง€ํ‚จ ๋ธŒ๋žœ์น˜๋ช…์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค. 

 

๐ŸŒŸ Git-flow : ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ

Branch ๊ธฐ๋Šฅ
feature/๊ธฐ๋Šฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒ ํ–ˆ์„ ๊ฒฝ์šฐ develop ๋ธŒ๋žœ์น˜๋กœ ๊ธฐ๋Šฅ์„ ๋”ํ•ด ๊ฐ„๋‹ค. 
develop feature ๋ธŒ๋žœ์น˜์—์„œ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์ด ๋ชจ์ธ ๋ธŒ๋žœ์น˜
release develop ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ, ์‹ค์ œ ๋ฐฐํฌ ์ „ ํ…Œ์ŠคํŠธ, ๋ฒ„๊ทธ ํ™•์ธ ํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ 
main(master) release ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ ์‹ค์ œ ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜
hotfix main ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋˜์—ˆ๋Š”๋ฐ ๋ฌธ์ œ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ƒ์„ฑํ•˜๋Š” ๋ธŒ๋žœ์น˜
๋ฌธ์ œ ํ•ด๊ฒฐ ์ดํ›„ main ๋ธŒ๋žœ์น˜์™€ develop๋ธŒ๋žœ์น˜๋กœ merge

 

 

๐ŸŒŸ Github-flow 

Branch ๊ธฐ๋Šฅ
main(master) ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋กœ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ธŒ๋žœ์น˜ 
(branch) main ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ธŒ๋žœ์น˜๋กœ ๊ธฐ๋Šฅ๊ตฌํ˜„(freature)์ด๋‚˜ ๋ฒ„๊ทธ ํ•ด๊ฒฐ(hotfix) ๋“ฑ์˜ ๋ธŒ๋žœ์น˜ ๋ชฉ์ ์„ ๋ช…์‹œ

 

๐Ÿ”ฝ Github flow ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ  ๋งํฌ1

๐Ÿ”ฝ Github flow ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ  ๋งํฌ2

 

 

 

3. ๋ณธ์ธ์ด ํ–ˆ๋˜ ์ž‘์—…์„ ํ”„๋กœ์ ํŠธ์— ํ•ฉ์น˜๊ธฐ ์ „ ์ฝ”๋“œ๋ฆฌ๋ทฐ

 

 

4. ์ตœ์ข… ํ”„๋กœ์ ํŠธ์— ์ž‘์—… ๋‚ด์šฉ ํ•ฉ์น˜๊ธฐ_merge

merge๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. 

 

์ž‘์—… ์™„๋ฃŒ๋œ ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•ด ๋‚˜์ค‘์— ๋ธŒ๋žœ์น˜๊ฐ€ ๊ผฌ์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿšจ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด merge conflict๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ

๊ฐ ๋ธŒ๋žœ์น˜๋งˆ๋‹ค ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผํ•˜ ํ•œ๋‹ค!!!!

 

 

 

 

5.  ๋ณ‘ํ•ฉ ์ถฉ๋Œ(merge conflict) ํ•ด๊ฒฐ


์„œ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด ์–‘ ์ชฝ์—์„œ

๋‚ด์šฉ์ด ์ˆ˜์ •๋˜์—ˆ๋Š”๋ฐ ์–ด๋–ค ๊ฒƒ์„ ๋ฐ˜์˜ํ•ด์•ผํ• ์ง€ ๋ชจํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

์ด๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์€ <<<<<<<  >>>>>>>๋ฅผ ํ†ตํ•ด 

์ถฉ๋Œ ๋‚˜๋Š” ๋ถ€๋ถ„์„ ์•Œ๋ ค์ค€๋‹ค. 

 

์–ด๋–ค ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•  ์ง€ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ์ถฉ๋Œ ํ‘œ์‹œ ์ฃผ์„์„ ์ง€์›Œ์ฃผ๊ณ 

์ฝ”๋“œ๋ฅผ ์ˆ˜์ • ํ›„ commitํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

 

 

 

 

 


โœ… ๋ฌด์‹œํ•  ํŒŒ์ผ(gitignore) ์‚ฌ์šฉํ•˜๊ธฐ

์˜ˆ๋ฅผ๋“ค๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ๊ณต๊ฐœ๋˜์ง€ ๋ง์•„์•ผํ•  ์ •๋ณด ๋“ฑ์„ 

์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ. 

 

.gitignore์— ๋„ฃ์–ด์•ผํ•  ํŒŒ์ผ์„ ์ž๋™ ์™„์„ฑ ํ•ด์ฃผ๋Š” ํˆด

https://www.toptal.com/developers/gitignore

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ