๐ ํด๋น ํฌ์คํ ์ ๋ชจ๋์ ๋ฆฌ๋ ์ค ์์ ๋ด์ฉ ์ค 19์ฅ์ ํด๋นํ๋ ๋ด์ฉ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ์ ๋ฆฌ ๋ชฉ์ ํ์ ์์ฑ๋ ๊ธ์ ๋๋ค. ํฌ์คํ ๋ด์ฉ์ ํด๋น ์์ ์ ๊ธฐ๋ฐํ์์ผ๋ฉฐ ํฌ์คํ ์์ ์ฌ์ฉ๋ ์๋ฃ๋ ๋ชจ๋ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ฆ, ํ์ผ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ธ 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 ๋ช ๋ น์ด๋ก ์ฐจ์ด๋ฅผ ํ์ธํด๋ณด์.
๋ณด๋ฉด ์๊ฒ ์ง๋ง ์์ ํฌ์คํ ์์ ์์๋ณธ ๊ฒ์ฒ๋ผ ๋ฆฌ๋ ์ค์ diff ๋ช ๋ น์ด์ ํต์ผ ํฌ๋งท์ ๋ฐ๋ฅด๋ ๊ฒ์ ์ ์ ์๋ค. ์ถ๊ฐ๋ก ์ปค๋ฐ์ ํ ์ด๋ ฅ์ log ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋๋ฐ, ์ด์ ๋ํด์๋ ์ด์ ์ ๊ฒ์ํ๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ๋๋ก ํ์.
2. ์์ ํธ๋ฆฌ(work tree) ์ ์ธ๋ฑ์ค(index) ๊ฐ์ ๊ด๊ณ
์ด๋ฒ ๋ชฉ์ฐจ์๋ add, commit ๋ช ๋ น์ด์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด๋๋ก ํ์. ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์์ ํธ๋ฆฌ, ์ธ๋ฑ์ค, ๋ ํฌ์งํ ๋ฆฌ์ ๊ด๊ณ์ ๋ํด ์์์ผ ํ๋ค. ์์ ํธ๋ฆฌ์ ๋ ํฌ์งํ ๋ฆฌ๋ ์์์ ๋ฐฐ์ ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ธ๋ฑ์ค๋ ๋ฌด์์ผ๊น? ์์ ํธ๋ฆฌ์ ์๋ ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ ํฌ์งํฐ๋ฆฌ์ ๋ฐ์ํ๊ธฐ ์ ์ ์ผ๋จ ์ธ๋ฑ์ค๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณต๊ฐ์ ๋ฐฐ์น๋ฅผ ํ๊ฒ ๋๋ค. ์ฆ, ์ธ๋ฑ์ค๋ ์ปค๋ฐํ๊ธฐ ์ ์ ๋ ํฌ์งํฐ๋ฆฌ์ ์์ ํธ๋ฆฌ ์ฌ์ด์ ์กด์ฌํ๋ ๊ณต๊ฐ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ํธ๋ฆฌ์์ ์ธ๋ฑ์ค๋ก ํ์ผ์ ๋ฑ๋กํ๋ ๋ช ๋ น์ด๊ฐ ๋ฐ๋ก git add ๋ช ๋ น์ด์ด๋ค.
์ ๊ทธ๋ฆผ์ ์ ์ดํด๋ณด๋๋ก ํ์. ๊ฐ์ฅ ์ผ์ชฝ์ ์ด๊ธฐ ๋จ๊ณ์์๋ ์ธ๋ฑ์ค์ ์์ ํธ๋ฆฌ ์ํ๊ฐ ๋์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ 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๋ช ์ ๊ฐ์ธ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์์ ๋์ ๊ด๊ณ๋ฅผ ๋์ํํ ๊ทธ๋ฆผ์ด๋ค.
๋นจ๊ฐ์, ํ๋์ ๊ธ์จ๋ 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๋ฅผ ํด๊ฒฐํ๋ ๋ด์ฉ์ ๋ํด์๋ ๋ค๋ฃจ๋๋ฐ, ์ด์ ๋ํด์๋ ์์ ํฌ์คํ ์์ ๋ค๋ฃฌ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์๊ฐํ์ง ์๊ฒ ๋ค.
์ด๋ ๊ฒ ํด์ ๋ชจ๋์ ๋ฆฌ๋ ์ค ์์ ์ ๋ชจ๋ ๋ด์ฉ์ ๊ณต๋ถํ๊ณ ๋ธ๋ก๊น ํ๋ ๊ฒ ๋์ด ๋ฌ๋ค. ์ด๋ฏธ ์์๋ ๋ด์ฉ๋ ์์๊ณ ๋ชฐ๋๋ ๋ด์ฉ๋ ์์ด์ ๋น๊ต์ ๋น ๋ฅด๊ฒ ์ฝ์ด๋๊ฐ ์ ์์๋ค. ์๋ฌด์ชผ๋ก ์ด ๊ธ์ ์ฝ๋ ๋๊ตฐ๊ฐ์๊ฒ๋ ๊ผญ ๋์์ด ๋๊ธธ ๋ฐ๋๋ค!
'Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] git remote branch name conflict ๋ฅผ ์์๋์? (0) | 2023.12.25 |
---|---|
[Git] confilct ์ ๊ฒฐ๋ถ๋๋ cherry-pick, rebase, revert ์์๋ณด๊ธฐ (0) | 2022.06.06 |
[Git] git์ stash ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (0) | 2021.08.28 |
[Git] ๋ฌด์๋ฌด์ํ conflict๋ฅผ ํด๊ฒฐํด๋ณด์ (0) | 2021.08.28 |
[Git] Merge ํ ๋, Fast-forward ๋ฐฉ์์ ๋ฌด์์ธ๊ฐ? (2) | 2021.08.27 |