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

Git

[Git] ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ, git

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ชจ๋‘์˜ ๋ฆฌ๋ˆ…์Šค ์„œ์  ๋‚ด์šฉ ์ค‘ 19์žฅ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ์ •๋ฆฌ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ… ๋‚ด์šฉ์€ ํ•ด๋‹น ์„œ์ ์— ๊ธฐ๋ฐ˜ํ•˜์˜€์œผ๋ฉฐ ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋œ ์ž๋ฃŒ๋Š” ๋ชจ๋‘ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•˜์˜€์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ, git


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์ฆ‰, ํŒŒ์ผ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ธ git์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋จผ์ € ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๋ฌด์—‡์ธ์ง€ ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ๋ฆฌ๋ˆ…์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งฅ, ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ํŠน์ • ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋‚˜ ์†Œ์Šค์ฝ”๋“œ ๋˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ณ„์†ํ•ด์„œ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ผ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์ด์ „ ๋ฒ„์ „์˜ ํŒŒ์ผ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ธฐ๋„ ํž˜๋“ค๊ณ  ํŒŒ์ผ ์ˆ˜๊ฐ€ ๊ณ„์† ๋งŽ์•„์ ธ ๋””์Šคํฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์šฉ๋Ÿ‰๋„ ์ ์ง„์ ์œผ๋กœ ์ปค์งˆ ๊ฒƒ์ด๋‹ค.

 

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

1. git ์„ค์น˜์™€ ์ดˆ๊ธฐ ์„ค์ •

git์„ ์„ค์น˜ํ•˜๊ณ  ์ดˆ๊ธฐ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์šฐ์„  ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ ๊นƒ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„, ๋งŒ์•ฝ git ๋ช…๋ น์–ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋ฉด yum ๋˜๋Š” apt ๊ณ„์—ด ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด git์„ ์„ค์น˜ํ•˜์ž.

 

$ git --version
$ yum install git-core
$ sudo apt-get install git-core

 

๋‹ค์Œ์€ ๊นƒ์„ ์„ค์น˜ํ•œ ํ›„ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์ฃผ์–ด์•ผ ํ•  ์ด๋ฆ„๊ณผ ๋ฉ”์ผ ์ฃผ์†Œ ์„ค์ •์ด๋‹ค. git config ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

$ git config --global user.name 'zedd'
$ git config --global user.email 'zedd@example.com'

 

์ฐธ๊ณ ๋กœ git config ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ git ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ ํ‘œ์ค€ ์ถœ๋ ฅ ๊ฒฐ๊ณผ ๊ธ€์ž ์ƒ‰๊น”์„ ์ปฌ๋Ÿฌ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. 

 

$ git config --global color.ui auto

 

์ด๋Ÿฌํ•œ ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๊ธฐํƒ€ ์„ค์ •๋“ค์€ ~/.git/config ๋ผ๋Š” ํŒŒ์ผ์— ๋ณด๊ด€๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

1-1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ž‘์„ฑํ•˜๊ณ  ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋จผ์ € ์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ์ž„์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  git init ๋ช…๋ น์–ด๋กœ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์ˆจ๊ฒจ์ง„ ํŒŒ์ผ๊นŒ์ง€ ๋ชจ๋‘ ์ถœ๋ ฅํ•ด๋ณด๋ฉด .git ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์‹ค์ฒด์ด๋‹ค.

 

$ mkdir -p ~/git/findgrep
$ cd ~/git/findgrep
$ git init
$ ls -al

 

์—ฌ๊ธฐ์„œ .git ์ด๋ผ๋Š” ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๊นƒ์ด ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ์˜ ์ด๋ ฅ์„ ๋ณด์กดํ•˜๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ˆ˜์ • ์ด๋ ฅ์€ ์ „๋ถ€ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๊ธฐ๋ก๋˜๋ฉฐ ๊ณผ๊ฑฐ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐˆ ๋•Œ๋„ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊นƒ์ด ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ด๊ฒƒ์„ ํŽธ์ง‘ํ•  ์ผ์€ ์—†๋‹ค.

 

๋ฐ˜๋ฉด์—, ์ด๋ ฅ ๊ด€๋ฆฌ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํŒŒ์ผ์ด ๋†“์ธ ๊ณต๊ฐ„์ด ์ž‘์—… ํŠธ๋ฆฌ(work tree)๋ผ๊ณ  ํ•œ๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” findgrep ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ณต๊ฐ„์ด ์ž‘์—… ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ฒ ๋‹ค. ํ•ด๋‹น ๊ณต๊ฐ„์—์„œ ์‚ฌ๋žŒ์ด ํŽธ์ง‘, ์ˆ˜์ •, ์ถ”๊ฐ€, ์‚ญ์ œ ๋“ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋งŒ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž. 2๊ฐ€์ง€ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ add ์™€ commit์ด๋‹ค. ๋จผ์ € add๋Š” ๊นƒ์ด ๊ด€๋ฆฌํ•  ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. add ๋ช…๋ น์–ด๋ฅผ ๋‚ ๋ฆผ์œผ๋กœ์จ ํ•ด๋‹น ํŒŒ์ผ์„ staging ์ƒํƒœ๋กœ ์˜ฌ๋ ค๋†“๊ฒŒ ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ -u ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ์ž‘์—… ํŠธ๋ฆฌ์— ๊ธฐ๋ก๋œ ๋ชจ๋“  ํŒŒ์ผ์ด ์ธ๋ฑ์Šค(์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์—์„œ ์†Œ๊ฐœ)์— ๋“ฑ๋ก๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ ์ž‘์„ฑํ•œ ํŒŒ์ผ๊นŒ์ง€ ๋“ฑ๋กํ•˜๋ ค๋ฉด -A ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

$ git add <ํŒŒ์ผ ์ด๋ฆ„>

 

์ด๋ ‡๊ฒŒ ํŒŒ์ผ์„ staging ์ƒํƒœ๋กœ ์˜ฌ๋ ค๋†“์€ ํ›„ commit ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. commit์€ ์‹ค์ œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(.git ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ)์— ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋ฉฐ ์ปค๋ฐ‹ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฒจ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•  ๋•Œ(-m ์˜ต์…˜์„ ๋„ฃ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์‹คํ–‰ํ•  ๋•Œ ๋ฐ”๋€Œ๋Š” ํ™”๋ฉด์—์„œ) ์ฒซ ํ–‰์€ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์š”์•ฝ, ๋‘๋ฒˆ์งธ ํ–‰์€ ๋นˆ ํ–‰, ์„ธ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ์ƒ์„ธ ๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

$ git commit -m "work1 ํŒŒ์ผ ์ถ”๊ฐ€"

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ณ€๊ฒฝ ์ด๋ ฅ์ด ๋“ฑ๋ก๋œ ๊ฒƒ์ด๋‹ค. ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ๋ฒ„์ „ ํ•˜๋‚˜๋กœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(.git ๋””๋ ‰ํ† ๋ฆฌ)๋‚ด์— ๋ณด๊ด€๋œ๋‹ค. ์ด์ฒ˜๋Ÿผ ์–ด๋Š ์‹œ์ ์—์„œ์˜ ํ”„๋กœ์ ํŠธ ์ƒํƒœ๋ฅผ ๋ฆฌ๋น„์ ผ(revision) ๋˜๋Š” ์ปค๋ฐ‹(commit) ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๋ฆฌ๋น„์ ผ์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์„ "์ปค๋ฐ‹ํ•œ๋‹ค"๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ๋Š” ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋” ์ˆ˜์ • ํ•œ ๋’ค, ์ˆ˜์ •ํ•˜๊ธฐ ์ด์ „๊ณผ์˜ ์ฐจ์ด๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. ์šฐ์„  ํŒŒ์ผ์„ ์ถ”๊ฐ€๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์ปค๋ฐ‹ํ•œ ๋’ค git diff ๋ช…๋ น์–ด๋กœ ์ฐจ์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

git diff ๋ช…๋ น์–ด๋กœ ์ฐจ์ด ํ™•์ธ

 

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฆฌ๋ˆ…์Šค์˜ diff ๋ช…๋ น์–ด์˜ ํ†ต์ผ ํฌ๋งท์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ปค๋ฐ‹์„ ํ•œ ์ด๋ ฅ์„ log ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์ด์ „์— ๊ฒŒ์‹œํ–ˆ๋˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๋„๋ก ํ•˜์ž.

2. ์ž‘์—… ํŠธ๋ฆฌ(work tree) ์™€ ์ธ๋ฑ์Šค(index) ๊ฐ„์˜ ๊ด€๊ณ„

์ด๋ฒˆ ๋ชฉ์ฐจ์—๋Š” add, commit ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž‘์—… ํŠธ๋ฆฌ, ์ธ๋ฑ์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ž‘์—… ํŠธ๋ฆฌ์™€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์œ„์—์„œ ๋ฐฐ์› ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ธ๋ฑ์Šค๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์ž‘์—… ํŠธ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— ๋ฐ˜์˜ํ•˜๊ธฐ ์ „์— ์ผ๋‹จ ์ธ๋ฑ์Šค๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ณต๊ฐ„์— ๋ฐฐ์น˜๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ธ๋ฑ์Šค๋ž€ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์™€ ์ž‘์—… ํŠธ๋ฆฌ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ์ธ๋ฑ์Šค๋กœ ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ git add ๋ช…๋ น์–ด์ด๋‹ค.

 

add, commit ๋ช…๋ น์–ด ๋™์ž‘ ์‹œ ๊ทธ๋ฆผ

 

์œ„ ๊ทธ๋ฆผ์„ ์ž˜ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. ๊ฐ€์žฅ ์™ผ์ชฝ์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ์ธ๋ฑ์Šค์™€ ์ž‘์—… ํŠธ๋ฆฌ ์ƒํƒœ๊ฐ€ ๋™์ผํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  A, B file์„ ํŽธ์ง‘ํ•œ๋‹ค.(A, B file ๋‚ด์šฉ์ด ํŽธ์ง‘๋œ ๋ฒ„์ „์„ ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋‚˜ํƒ€๋ƒ„) ๊ทธ๋ฆฌ๊ณ  add ๋ช…๋ น์–ด๋กœ file A๋งŒ staging ์‹œํ‚จ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์—์„œ๋Š” file A์— ๋Œ€ํ•ด์„œ๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋“ฑ๋ก๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ์ด์–ด commit ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ์— ๋“ฑ๋ก๋˜๊ฒŒ ๋œ๋‹ค.

 

์ฐธ๊ณ ๋กœ git diff ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ž‘์—… ํŠธ๋ฆฌ, ์ธ๋ฑ์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ช…๋ น์–ด ์˜๋ฏธ ํŠน์ง•
git diff ์ž‘์—… ํŠธ๋ฆฌ์™€ ์ธ๋ฑ์Šค ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œ addํ•  ๋‚ด์šฉ์ด ๋ฌด์—‡์ธ์ง€ ์žฌํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ
git diff --cached ์ธ๋ฑ์Šค์™€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œ ๋ณดํ†ต add๋ฅผ ํ•œ ํ›„ commit ํ•˜๊ธฐ ์ „์— ์‹ค์ œ ์ปค๋ฐ‹๋  ๋‚ด์šฉ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์ž์ฃผ ์‚ฌ์šฉ
git diff HEAD ์ž‘์—… ํŠธ๋ฆฌ์™€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œ git diff ์™€ git diff --cached๋ฅผ ํ•ฉ์นœ ์ฐจ์ด๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ

 

๋ณดํ†ต์€ ์ปค๋ฐ‹ ํ•˜๋‚˜์—๋Š” ํ•œ ๊ฐ€์ง€ ์ด์Šˆ์™€ ๊ด€๋ จ๋œ ์ˆ˜์ • ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋งŒ์•ฝ ํ•œ ๋ฒˆ์— ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ์‹ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ 2๊ฐœ๋ฅผ ์ปค๋ฐ‹ํ•˜๋ ค๋ฉด ๋ณ„๋„๋กœ ์ปค๋ฐ‹ 1๊ฐœ์”ฉ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

3. ์‹ค์ˆ˜ํ–ˆ์„ ๋•Œ ๋ณต๊ตฌํ•˜๊ธฐ

๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ๊ฐ€์žฅ ํฐ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์˜ˆ์ „ ์ƒํƒœ๋กœ ์‰ฝ๊ฒŒ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์˜ˆ์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ๋Š” commit ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ณต๊ตฌ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ๋•Œ ์ž‘์—… ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ฐ€์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ๋ณต์›๋˜๋ฉฐ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ(add๋กœ staging ์‹œํ‚จ ๋‚ด์šฉ)๋“ค๋„ ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

 

$ git checkout HEAD .

 

๋‘๋ฒˆ์งธ๋กœ๋Š” ์ด๋ฏธ ์ปค๋ฐ‹ํ•œ ์‚ฌํ•ญ์„ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. revert ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

$ git revert <ํŠน์ • ์ปค๋ฐ‹ Object๋ช…>

 

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

4. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ฐฑ์—… ์ž‘์„ฑํ•˜๊ธฐ

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

 

$ mkdir -p ~/git/backup.git
$ cd ~/git/backup.git
$ git --bare init

 

๊ทธ๋ฆฌ๊ณ  ์•„๊นŒ ์œ„์—์„œ ๋งŒ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฒฝ๋กœ์ธ ~/git/findgrep ์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ด์„œ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ์— ์ „์†ก์‹œ์ผœ๋ณด์ž. ์ด ๋•Œ๋Š” push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์•„๋ž˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ git push <์ด๋ ฅ์„ ๋ฐ›์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(๋ฐฑ์—…)> <์ด๋ ฅ์„ ๋ณด๋‚ผ ๋ธŒ๋žœ์น˜>:<์ด๋ ฅ์„ ๋ฐ›์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ธŒ๋žœ์น˜>

 

์œ„ ํ˜•์‹์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

$ git push ~/git/backup.git master:master

 

์ด๋ ‡๊ฒŒ ๋ฐฑ์—…์‹œ์ผœ๋†“์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ณต์›์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด git clone ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํด๋ก ์„ ๋ฐ›์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฐฑ์—… ์›์ฒœ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ปค๋ฐ‹ ์ด๋ ฅ๊นŒ์ง€ ๋ชจ๋‘ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

$ git clone ~/git/backup.git

 

push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‘ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ํ•œ ๊ฐœ๋งŒ ์ž‘์„ฑํ•ด์ค˜๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ๋˜ํ•œ push ํ•  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ„๋ช…์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณ„๋ช…์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด๋Š” remote ๋ช…๋ น์–ด๋กœ ์ž‘์„ฑํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

$ git remote add <๋ณ„๋ช…> <๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ฒฝ๋กœ>

 

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

 

$ git remote -v

 

๋งŒ์•ฝ ๋ณ„๋ช…์„ origin ์œผ๋กœ ์ง€์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด push ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ถ•์•ฝ๋  ์ˆ˜ ์žˆ๋‹ค.

 

$ git push origin master

 

์šฐ๋ฆฌ๊ฐ€ GitHub์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— push๋ฅผ ํ•  ๋•Œ ๋งค์šฐ ์ž์ฃผ ๋ณธ ๋ช…๋ น์–ด์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ช…๋ น์–ด์˜ ๊ธฐ์›์„ ๋ฐฑ์—… ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์„œ ์ถœ๋ฐœํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

5. 2์ธ ์ด์ƒ์˜ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ

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

 

๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ 2์ธ ์ด์ƒ์ด ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ์˜ ๊ด€๊ณ„

 

๋นจ๊ฐ„์ƒ‰, ํŒŒ๋ž€์ƒ‰ ๊ธ€์”จ๋Š” git ๋ช…๋ น์–ด์ด๋‹ค. ์ง์ „ ๋ชฉ์ฐจ์—์„œ ์•Œ์•„๋ณธ ๋ฐฑ์—… ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐœ์ธ ์ฆ‰, User๋“ค์ด ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ๋‚ด์—ญ์„ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ด๋ ฅ์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ ์ ์€ User๋“ค์ด ์ด๋ฏธ ์ƒˆ๋กญ๊ฒŒ ๋ฐ˜์˜๋œ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ ์œ„ํ•œ pull ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ ์ด์•ผ๊ธฐ์ธ์ง€ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž.

 

์œ„ ๊ทธ๋ฆผ์—์„œ User 1์ด ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ A๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— push๋ฅผ ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„, User 2๊ฐ€ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, User 1์ด ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— A๋ผ๋Š” ํŒŒ์ผ์„ ๋ช‡ ์‹œ๊ฐ„ ์ „์— ์ƒ์„ฑํ•œ ์ด๋ ฅ์„ ํ™•์ธํ–ˆ๊ณ  User 2๋Š” ์ž๊ธฐ๊ฐ€ ๋งก์€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ User 1์ด push ํ•ด๋†“์€ ํŒŒ์ผ A๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด User 2๋Š” ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ A๋ฅผ ์ž์‹  ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ฐ˜์˜์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ pull ์ด๋ฉฐ pull ๋ช…๋ น์–ด๋Š” fetch, merge ๋ช…๋ น์–ด๋ฅผ ํ•ฉ์นœ ๊ฒƒ์ด๋‹ค.

 

๋จผ์ € fetch ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. User 2๋Š” ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ด๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด fetch ๋ช…๋ น์–ด๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์‚ฌ์šฉ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

$ git fetch <์ด๋ ฅ์„ ๋ฐ›์„ ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ>

 

fetch ๋ช…๋ น์–ด์—์„œ๋„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•  ๋•Œ push ๋ช…๋ น์–ด ๋•Œ ์ฒ˜๋Ÿผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ„๋ช…์„ ์ง€์ •ํ•ด์„œ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ fetch ๋ช…๋ น์–ด๋กœ ๊ฐ€์ ธ์˜จ ์ด๋ ฅ์€ ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ธŒ๋žœ์น˜์— ์ €์žฅ์ด ๋œ๋‹ค. ์ด๋Š” ์ž๊ธฐ ์ž์‹ (User 2)์ด ์ž‘์„ฑํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋‚ด๋ ค๋ฐ›๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ด์™€ ๋ฐ˜๋Œ€๋กœ User2๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ๋ธŒ๋žœ์น˜, ์˜ˆ๋ฅผ ๋“ค์–ด, ์• ์ดˆ๋ถ€ํ„ฐ ์กด์žฌํ•˜๋Š” master ๋˜๋Š” main, ์•„๋‹ˆ๋ฉด git branch ๋ช…๋ น์–ด๋กœ ์ž๊ธฐ๊ฐ€ ์ž„์˜๋กœ ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ผ๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜๋Š” '์›๊ฒฉ ์ด๋ฆ„/ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„' ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๊นƒ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ git ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ดํŽด๋ณด๋ฉด origin/dev ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์ด๋ฆ„์ด ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋ณธ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜์ด๋‹ค. ๋งŒ์•ฝ git ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์€๋ฐ, ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜๋“ค์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ผ๊ณ  ํ•˜๋ฉด -r ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

$ git branch -r

 

fetch ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐฑ์‹ ๋  ๋ฟ(์ฆ‰, ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ด๋ ฅ์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ–ˆ์„ ๋ฟ) User2์˜ ๊ฐœ์ธ ์ž‘์—… ํŠธ๋ฆฌ๋‚˜ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ์ด๋ ฅ์ด ๋ฐ˜์˜๋œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์ ธ์˜จ ์ด๋ ฅ์„ ์‹ค์งˆ์ ์œผ๋กœ ๋ฐ˜์˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” git merge ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋ ฅ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ์€ ๊ฐœ์ธ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ด master ์ด๊ณ , ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์ด๋ ฅ์ด ๋‹ด๊ฒจ ์žˆ๋Š” ์›๊ฒฉ ์ถ”์  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ด origin/master ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ ํ•ด์„œ ๋ฐ˜์˜์‹œํ‚ค๋ฉด ๋œ๋‹ค.

 

# User2์˜ ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด์ด๋ผ๊ณ  ๊ฐ€์ •
$ git checkout master
$ git fetch origin
$ git merge origin/master

 

์ด๋ ‡๊ฒŒ fetch, merge ๋ช…๋ น์–ด 2๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ์ผ์ด ์žฆ๊ธฐ ๋•Œ๋ฌธ์— ์ด 2๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์ˆ˜ํ–‰ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ pull ์ด๋‹ค.

 

$ git pull <๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ> <๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ธŒ๋žœ์น˜>
$ git pull origin master

 

์ฐธ๊ณ ๋กœ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ํ˜‘์—…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ ์‚ฌ์šฉ์ž๋“ค์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์ ์ ˆํžˆ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ์•…์˜๋ฅผ ํ’ˆ๊ณ  ๋ง˜๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ์ ์„ ๋ง‰๊ธฐ ์œ„ํ•ด GitHub์—์„œ๋Š” ์ž์‹ ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— push๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์†Œ์œ ์ž์—๊ฒŒ ํ—ˆ๋ฝ์„ ๋งก์•„์•ผ ํ•˜๋Š” Pull Request(Gitlab์—์„œ๋Š” Merge Request)๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค. ๋˜ํ•œ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ณดํ†ต HTTP๋‚˜ SSH ์™€ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ณณ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ทธ๋ž˜์•ผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ถ”๊ฐ€๋กœ ์ฑ…์—์„œ๋Š” git branch ๊ด€๋ จ ๋ช…๋ น์–ด์™€ conflict๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃจ๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฌ ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์†Œ๊ฐœํ•˜์ง€ ์•Š๊ฒ ๋‹ค.


์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ชจ๋‘์˜ ๋ฆฌ๋ˆ…์Šค ์„œ์ ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋ธ”๋กœ๊น…ํ•˜๋Š” ๊ฒŒ ๋์ด ๋‚ฌ๋‹ค. ์ด๋ฏธ ์•Œ์•˜๋˜ ๋‚ด์šฉ๋„ ์žˆ์—ˆ๊ณ  ๋ชฐ๋ž๋˜ ๋‚ด์šฉ๋„ ์žˆ์–ด์„œ ๋น„๊ต์  ๋น ๋ฅด๊ฒŒ ์ฝ์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•„๋ฌด์ชผ๋ก ์ด ๊ธ€์„ ์ฝ๋Š” ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ๊ผญ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค!

๋ฐ˜์‘ํ˜•