[ # 2ํ์ฐจ ์ ๋ณด ]
- 2023๋ 7์ 26์ผ 14:00 - 17:00
- Discord ์์ ํตํ๋ก ์จ๋ผ์ธ ์คํฐ๋ ํ์ ์งํ
[ # 2ํ์ฐจ ๊ฐ์ธ ๋ชฉํ ]
Git ๊ธฐ๋ณธ ๋ช ๋ น์ด ์์๋ณด๊ธฐ
02 ๊น ๊ธฐ๋ณธ ๋ช ๋ น์ด ์์๋ณด๊ธฐ
2.1 ๊น/๊นํ๋ธ ์์ค ๊ด๋ฆฌ ๊ธฐ๋ณธ ํ๋ฆ
2.2 ์ง์ญ ์ ์ฅ์ ์์ฑํ๊ธฐ
2.3 ํ๊ฒฝ ์ค์ ํ๊ธฐ
2.4 ํ์ผ ์ํ ํ์ธํ๊ธฐ
[ # 2ํ์ฐจ ๊ฐ์ธ ํ๋ ๋ด์ฉ ]
Git & Github ์์ค ๊ด๋ฆฌ ๊ธฐ๋ณธ ํ๋ฆ
ํฌ๊ฒ ๋ณด๋ฉด ์์ค ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ํ๋ฆ์ ๊ฐ๊ฒ ๋๋ค.
1 ์ง์ญ ์ ์ฅ์ → ๊นํ๋ธ(์๊ฒฉ ์ ์ฅ์)
์ง์ญ ์ ์ฅ์์ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด โ git init
๋ช
๋ น์ด๋ก ํด๋น ํ๋ก์ ํธ๋ฅผ ๊น ์ง์ญ ์ ์ฅ์๋ก ์ง์ ํ๋ค. โก ํ์ผ์ ์์ ํ๊ณ โข git add
๋ช
๋ น์ด๋ก ์์ ํ ํ์ผ์ ์คํ
์ด์ง ์์ญ(staging area)์ผ๋ก ์ฎ๊ธฐ๊ณ โฃ git commit
์ผ๋ก ์ง์ญ ์ ์ฅ์(local repository)์ ์ ์ฅํ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ์ง์ญ ์ ์ฅ์์์ ๋ฐ์ํ ๋ณ๊ฒฝ ๋ด์ญ์ โค git push
๋ช
๋ น์ด๋ก ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ํ๋ค.
2 ๊นํ๋ธ(์๊ฒฉ ์ ์ฅ์) → ์ง์ญ ์ ์ฅ์
์ด๋ฏธ ๊นํ๋ธ์ ์ฌ๋ ค์ง ํ๋ก์ ํธ ์ ์ฒด๋ฅผ โฅ git clone
๋ช
๋ น์ด๋ก ์ง์ญ ์ ์ฅ์์ ๋ด๋ ค๋ฐ๊ฑฐ๋ ํน์ ์ผ๋ถ ๋ณ๊ฒฝ ์ฌํญ๋ง โฆ git pull
๋ช
๋ น์ด๋ก ๋ด๋ ค๋ฐ์ ์ ์๋ค.
์ง์ญ ์ ์ฅ์ ์์ฑํ๊ธฐ
ํ๋ก์ ํธ๋ฅผ ๊น ์ง์ญ ์ ์ฅ์๋ก ์ค์ ํ๊ณ , ์ด๋ ์์ฑ๋๋ .git ํด๋์ ๋ํด ์์๋ณด์.
๊น ์ง์ญ ์ ์ฅ์ ์ค์
๊น ์ง์ญ ์ ์ฅ์๋ init
๋ช
๋ น์ผ๋ก ์ค์ ํ๋ค.
git init
01 ๊น ์ ์ฅ์ ์ด๊ธฐํ๋ถํฐ ๋ค์ ์ค์ตํ๊ธฐ ์ํด ์๋ก์ด chapter2-basic ํด๋๋ฅผ ์์ฑํ๋ค.
02 ํด๋์์ Open Git Bash here
๋ฅผ ํด๋ฆญํ๊ณ git init
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๊น ์ง์ญ ์ ์ฅ์๋ก ์ค์ ๋๋ค.
$ git init
Initialized empty Git repository in C:/Users/USER/Documents/Projects/git/github/programming/chapter2-basic/.git/
'Initialized empty Git repository in ...' ๋ฉ์์ง๋ฅผ ํ์ธํ๋ค๋ฉด ๊น ์ง์ญ ์ ์ฅ์๋ก ์ค์ ๋ ๊ฒ์ด๋ค.
.git ์ ์จ๊ฒจ์ง ํด๋๋ก(ํด๋๋ช
์์ ์ ์ด ๋ถ์ด ์์ผ๋ฉด ์จ๊ฒจ์ง ํด๋์ด๋ค), .git ํด๋ ๋ด๋ถ๋ฅผ ์ดํด๋ณด๊ณ ์ถ๋ค๋ฉด ์จ๊น ํด๋ ๋ฐ ํ์ผ ๋ชฉ๋ก์ ํจ๊ป ๋ณด์ฌ์ฃผ๋ ls -a
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ .git ํด๋๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
$ ls -a
./ ../ .git/
.git ํด๋ ํ์ธ
์์์ git init
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์ผ๋ฐ ํ๋ก์ ํธ๋ฅผ ๊น ์ง์ญ ์ ์ฅ์๋ก ์ค์ ํ๋ค. ์ด ๋ง์ ํด๋น ํ๋ก์ ํธ๋ฅผ ๊น ์ง์ญ ์ ์ฅ์๋ก ๊ด๋ฆฌํ๋ ์ ๋ณด๊ฐ ์ด๋๊ฐ์ ์๋ค๋ ๋ป์ด๋ค. ๋ฐ๋ก ๊ทธ ์ ๋ณด๊ฐ ๋ด๊ธด ๊ณณ์ด .git ์จ๊น ํด๋์ด๋ค. ls -l
๋ช
๋ น์ด๋ก .git ํด๋ ๋ด์ ํ์ผ ๋ฐ ํด๋ ๋ชฉ๋ก์ ํ์ธํด๋ณด์.
chapter2-basic
$ cd .git
.git
$ ls -l
total 7
-rw-r--r-- 1 USER 197121 23 Jul 26 22:31 HEAD
-rw-r--r-- 1 USER 197121 130 Jul 26 22:31 config
-rw-r--r-- 1 USER 197121 73 Jul 26 22:31 description
drwxr-xr-x 1 USER 197121 0 Jul 26 22:31 hooks/
drwxr-xr-x 1 USER 197121 0 Jul 26 22:31 info/
drwxr-xr-x 1 USER 197121 0 Jul 26 22:31 objects/
drwxr-xr-x 1 USER 197121 0 Jul 26 22:31 refs/
๊น ์ง์ญ ์ ์ฅ์์์ ๊ด๋ฆฌํ๋ ํ์ผ, ๋ธ๋์น, ์ค์ ์ ๋ณด ๋ฑ์ด ๋ด๊ฒจ ์๋ค. .git ํด๋ ๋ด์ ํ์ผ ๋ฐ ํด๋๋ฅผ ์ฌ๋์ด ์ง์ ์์ ํ ์ผ์ ๊ฑฐ์ ์๋ค. ๊น ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์์ ํ ๋ ๊น์ ์ํด ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ค.
git init ์ทจ์
ํน์ ํ๋ก์ ํธ๋ฅผ ๊น ์ง์ญ ์ ์ฅ์๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ง ์๊ฑฐ๋ ์ฒ์๋ถํฐ ๋ค์ ๊น ์ง์ญ ์ ์ฅ์๋ก ์ง์ ํ๊ณ ์ถ์ ์ ์๋ค. ์ด๋ ๊ธฐ์กด git init
์ ์ทจ์ํด์ผ ํ๋ค.
.git ์จ๊น ํด๋๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ๊ทธ ์๋ฆฌ์ด๋ค.
ํฐ๋ฏธ๋์ ์ด์ฉํด ์ญ์ ํ๋ ๊ฒฝ์ฐ rm -rf .git
๋ช
๋ น์ด๋ฅผ ํตํด .git ์จ๊น ํด๋๋ฅผ ์ญ์ ํ ์ ์๋ค.
rm -rf .git
ํ๊ฒฝ ์ค์ ํ๊ธฐ
๊น ์ง์ญ ์ ์ฅ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ , ๋ฑ๋กํ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์ด๋ป๊ฒ ์ ์ฅ๋์ด ์๋์ง ํ์ธํ์. ๋ํ ๊น ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ค์ ํ๊ณ ๊น์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ํ์ผ ๋ฐ ํด๋๋ฅผ ์ ์ํด๋ณด์.
์ฌ์ฉ์ ๋ฑ๋ก
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ๊น ์ง์ญ ์ ์ฅ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ค. ํ ํ๋ก์ ํธ๋ฅผ ๋์์ผ๋ก ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ์์ ํ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ตฌ์ธ์ง ๋ฑ๋กํ๋ ๊ณผ์ ์ด๋ค(์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ ์ฃผ์๋ ๋ณธ์ธ ๊นํ๋ธ ๊ณ์ ์ Username, Email๊ณผ ๋์ผํด์ผ ํ๋ค).
git config user.name "์ฌ์ฉ์ ์ด๋ฆ"
git config user.email "์ด๋ฉ์ผ ์ฃผ์"
01 ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ๋ค.
chapter2-basic
$ git config user.name "lrycro"
chapter2-basic
$ git config user.email "thscw973@naver.com"
ํ์ฌ ๊น ์ง์ญ ์ ์ฅ์์๋ง ํด๋นํ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ์ง๋ง, ๋ชจ๋ ํ๋ก์ ํธ์ ์ ์ฉ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ ์ถ๋ค๋ฉด --global
์ต์
์ ์ฌ์ฉํ๋ค.
git config --global user.name "์ฌ์ฉ์ ์ด๋ฆ"
git config --global user.email "์ด๋ฉ์ผ ์ฃผ์"
ํ ์ปดํจํฐ์์ ์ฌ๋ฌ ๊ณ์ ์ ์ฌ์ฉํ ์ผ์ด ์๋ค๋ฉด --global ์ต์ ์ ์ฌ์ฉํด์ ์ ๋ ฅํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ํ๋ก์ ํธ์์ ๋์ผํ ์ฌ์ฉ์ ์ ๋ณด๋ก ์ฌ์ฉํ ์ ์์ด ํธ๋ฆฌํ๋ค.
๋ง์ฝ, ํ ์ปดํจํฐ์์ ํ์ฌ ํ๋ก์ ํธ์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ๋์์ ์งํํ๋ค๋ฉด ํ๋ก์ ํธ๋ง๋ค ์ง์ญ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊น ์ค์ ํ์ผ ํ์ธ
์์์ ๊น ์ ์ฅ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ค. ๊น์ .git ํด๋ ์์ config ํ์ผ ์์ ์ ์ฅ๋ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ๊ฒ ๋๋ค.
ํ์ฌ ํ๋ก์ ํธ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ค์ผ๋ก ํฐ๋ฏธ๋์์ cat .git/config
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ config ํ์ผ ๋ด์ฉ์ ์ดํด๋ณด์.
cat .git/config
chapter2-basic
$ cat .git/config
[core]
repositoryformatversion = 0 โ
filemode = false โก
bare = false โข
logallrefupdates = true โฃ
symlinks = false โค
ignorecase = true โฅ
[user]
name = lrycro
email = thscw973@naver.com
core์ user ์น์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. core๋ ๊น์ด ํ์ผ์ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ, ์บ์ฑํ๋ ๋ฐฉ๋ฒ ๋ฑ ๊น์ ๋์์ ์ ์ดํ๋ ์ค์ ์ด ์ ์ฅ๋์ด ์๊ณ , user ์น์ ์๋ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๋ค.
์๋ Windows ํ๊ฒฝ์ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ด๋ค. macOS๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋ํ๋๋ค.
chapter2-baisc % cat .git/config
[core]
repositoryformatversion = 0 โ
filemode = true โก
bare = false โข
logallrefupdates = true โฃ
ignorecase = true โฅ
precomposeunicode = true โฆ
[user]
name = lrycro
email = thscw973@naver.com
core ์น์ ์ ๋ช ๊ฐ์ง ์ค์ ๋ด์ฉ์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
โ repositoryformatversion
: ํ์ฌ ๊น ์ ์ฅ์์ ํ์ ๋ฐ ๋ฒ์ ์ ์๋ณํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณ์์ด๋ค.
โก filemode
: ๊น ์ ์ฅ์์ ํฌํจ๋ ํ์ผ ๋ชจ๋์ ๋ณ๊ฒฝ ๊ฐ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์ผ์์คํ
์ด ๋ค๋ฅธ ์๋์ฐ์ ๋ฆฌ๋
์ค์์ ๋์์ ์์
ํ๋ ๊น ์ ์ฅ์ ํ์ผ์ด๋ผ๋ฉด ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋๋ฐ๋ ๋ณ๊ฒฝ๋ ํ์ผ์ด๋ผ๊ณ ํ์๋ ์ ์๋ค. ํ์ผ ๋ชจ๋์ ๋ณ๊ฒฝ์ ๋ฌด์ํ๊ณ ์ถ๋ค๋ฉด 'filemode = false'
๋ก ์ค์ ํ๋ฉด ๋๋ค.
โข bare
: ํ์ฌ ๊น ์ ์ฅ์๊ฐ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์์
ํ๋ ์ฉ๋๊ฐ ์๋ ํ์ฌ๊น์ง ์์
์ ๋ณต์ฌํ๋ ์ฉ๋๋ผ๋ฉด 'bare = true'
๋ก ์ค์ ํ๋ฉด ๋๋ค. ๋ณดํต ์๊ฒฉ ์ค์ ์ ์ฅ์๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ํ์ต ์ค์๋ ์ฌ์ฉํ ์ผ์ด ์๋ค.
โฃ logallrefupdates
: ๊น ๋ช
๋ น์ด๋ฅผ ํตํด ์ํ๋๋ ์์
๋ด์ญ์ ๊ธฐ๋กํ๋ reflog๋ฅผ ํ์ฑํํ๋ค. git reflog
๋ช
๋ น์ด๋ฅผ ํตํด ๊ธฐ๋ก๋ ์์
๋ด์ญ์ ํ์ธํ ์ ์๋ค.
โค symlinks
: ๊น์ด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง ์ค์ ํ๋ ์ต์
์ด๋ค. ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ํ์ผ ์์คํ
์์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ์ข
๋ฅ์ ๋งํฌ์ด๋ค. ์๋์ฐ ํ๊ฒฝ์์๋ "๋ฐ๋ก ๊ฐ๊ธฐ"๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ ์ ์ง ๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค. 'symlinks = false'
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๊น์ด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ผ๋ฐ ํ์ผ๋ก ์ทจ๊ธํ๋๋ก ํ๋ฉฐ, ์ด๋ ํด๋น ํ๋ซํผ์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์ง์๋์ง ์์ ๋ ์ ์ฉํ๋ค. ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํฌํจํ๋ ์ ์ฅ์๋ฅผ ์๋์ฐ์ ๊ฐ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ง์ํ์ง ์๋ ํ๋ซํผ์์ ๊ณต์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ 'symlinks = false'
๋ก ์ค์ ํ์ฌ ์ ์ฅ์๋ฅผ ๋ ๋๋ฆฌ ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ฉด์ ๋ฆฌ๋
์ค๋ macOS์ ๊ฐ์ด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ง์ํ๋ ํ๋ซํผ์์๋ 'symlinks = true'
๋ก ์ค์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
โฅ ignorecase
: ๋์๋ฌธ์ ๊ตฌ๋ถ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ ๊ฐ์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ true๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
โฆ precomposeunicode
: macOS๋ก ๊น ์ ์ฅ์๋ฅผ ์์
ํ ๋ ์ฌ์ฉํ ์ ์๋ ์ค์ ์ด๋ค. macOS์ ์ ๋์ฝ๋ ์ ๊ทํ ๋ฐฉ์์ด ๋ฌ๋ผ์ ํ์ผ๋ช
์ด ํ๊ธ์ผ ๋ ๊น์์ ํด๋น ํ์ผ์ ์ธ์ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ 'precomposeuicode = true'
๋ก ์ค์ ํ๋ฉด ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊น ์ ์ฅ์์์ ์์ ํ ๋ core ์น์ ์ ์ค์ ์ ๋ณ๊ฒฝํ ์ผ์ ๋ง์ง ์๋ค. ๋ฐ๋ผ์ ๊น ์ ์ฅ์์ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ผ๋ก ํ์ต์ ์งํํ๋ ค๊ณ ํ๋ค. ๊ธฐ๋ณธ ์ค์ ๊ฐ์ ๊ฐ์ธ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค. ์๊ฐํ ๊ฒ๊ณผ ๊ฐ์ด ๋ค๋ฅผ ์ ์์ผ๋ ํ์ต์ ์งํํ๋ ๋ฐ ๋ฌธ์ ๋ ์๋ค.
๊น ์๊ฒฉ ์ ์ฅ์ ์ค์
01 ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ค์ ํ๋ ค๋ฉด ์ฐ์ ๊นํ๋ธ์์ ์๋ก์ด ์ ์ฅ์๋ฅผ ์์ฑํด์ผ ํ๋ค. github.com ๋ก๊ทธ์ธ → ์ฐ์๋จ + ๊ธฐํธ๋ฅผ ์ขํด๋ฆญ → ํ์
์์ [New repository]๋ฅผ ์ ํ
ํ๋ค.
02 ํ๋ก์ ํธ ์ด๋ฆ์ธ [Repository name] ํญ๋ชฉ์ chapter2-basic ์ด๋ผ๊ณ ์์ฑ ํ ๋๋จธ์ง ํญ๋ชฉ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์งํ ์ฑ [Create repository] ๋ฒํผ์ ๋๋ฌ ์ ์ฅ์๋ฅผ ์์ฑํ๋ค.
03 ์์ฑํ ์๊ฒฉ ์ ์ฅ์์ ์ฃผ์๋ฅผ ๋ณต์ฌํ๋ค.
04 ํฐ๋ฏธ๋์ ์คํํด cd ๋ช ๋ น์ผ๋ก chapter2-basic ํด๋๋ก ์ด๋ํ๋ค(์๋์ฐ ํ๊ฒฝ์์๋ ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์งํํ๋ฉด ๋๋ค).
05 git remote add origin
๋ช
๋ น์ด๋ฅผ ์คํํด ์๊ฒฉ ์ ์ฅ์ ์ฃผ์๋ฅผ ๊น ์ง์ญ ์ ์ฅ์์ ๋ฑ๋กํ๋ค.
git remote add origin {๋ณต์ฌํ ์๊ฒฉ ์ ์ฅ์ ์ฃผ์}
chapter2-basic
$ git remote add origin https://github.com/lrycro/chapter2-basic.git
06 ์ค์ ํ์ผ์ ํ์ธํด๋ณด๊ธฐ ์ํด ํฐ๋ฏธ๋์์ cat .git/config
๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
chapter2-basic
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[user]
name = lrycro
email = thscw973@naver.com
[remote "origin"]
url = https://github.com/lrycro/chapter2-basic.git
fetch = +refs/heads/*:refs/remotes/origin/*
์์์ ํ์ธํ๋ config ํ์ผ๊ณผ๋ ๋ค๋ฅด๊ฒ [remote "origin"] ์น์ ์ด ์ถ๊ฐ๋์ด ์๋ค.
์ด๋ ๊ฒ ๊น ์ง์ญ ์ ์ฅ์์ ์ค์ ํ๋ ๋ด์ฉ๋ค์ .git ํด๋์ config ํ์ผ์ ์ถ๊ฐ๋์ด ๊น์ด ์ฌ์ฉํ๋ค.
์ด๊ฒ์ผ๋ก ๊น ์ง์ญ ์ ์ฅ์์ ์๊ฒฉ ์ ์ฅ์ ์ค์ ์ ๋ง์ณค๋ค.
.gitignore ํ์ผ ์ค์
ํน์ ํ๋ก์ ํธ์์ ์์ฑ๋๋ ๋ชจ๋ ํ์ผ์ ๋ฒ์ ์ ๊น์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์์๊น? ์๋ฅผ ๋ค์ด ๋ก๊ทธ ํ์ผ ํน์ ๋น๋ ๊ฒฐ๊ณผ ํ์ผ ๋ฑ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ ํ ์ผ์ด ์๊ณ , ํ๋ก์ ํธ ๋ฒ์ ๊ด๋ฆฌ์ฉ์ผ๋ก๋ ํ์ ์๋ค. ๋ฐ๋ผ์ ๊น์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ .gitignore ํ์ผ์ ์ด์ฉํด ์ด๋ฐ ํ์ผ๋ค์ ๊น์ด ๋ฌด์ํ๋๋ก ๋ง๋ค ์ ์๋ค.
01 .gitignore ํ์ผ์ chapter2-basic ํ๋ก์ ํธ์ ์ต์์ ๊ฒฝ๋ก์ ์์ฑํ๋ค. ๋ค์์ VSCode์์ ์์ฑํ๋ ๊ทธ๋ฆผ์ด๋ค. ์ํ๋ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ๋๋ค.
02 .gitignore ํ์ผ์ (์ํ๋ ํธ์ง๊ธฐ๋ก) ์ด์ด ๋ก๊ทธ ํ์ผ๊ณผ ์ธ๋ถ ํจํค์ง๋ค์ด ์ค์น๋๋ node_modules/ ํด๋๋ฅผ ๊น์ผ๋ก ๊ด๋ฆฌํ์ง ์๊ฒ ๋ค๊ณ ์ง์ ํ ์ ์ฅํ๋ค.
# Logs
logs
*.log
npm-debug.log*
# Dependency directories
node_modules/
ํด๋ ๋ง๊ณ ๊ฐ๋ณ ํ์ผ๋ ์ง์ ํ ์ ์๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๊น์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ํ์ผ์ด ์๊ธธ ๋๋ง๋ค ํด๋น .gitignore ํ์ผ์ ์ถ๊ฐํ๋ฉด ๋๋ค. .gitignore ํ์ผ์ ํฌํจ๋ ํ์ผ์ ์์ ์ด ์ผ์ด๋๋ ๊น์์ ๋ณ๊ฒฝ๋ ํ์ผ์ด๋ผ๊ณ ์๋ ค์ฃผ์ง ์๋๋ค.
์ฐธ๊ณ ๋ก .gitignore ํ์ผ์ ๋ช ์ํ๋ ๊ฒฝ๋ก๋ .gitignore ํ์ผ ๊ฒฝ๋ก์ ์๋์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฃผ์ํด์ ์์ฑํด์ผ ํ๋ค.
.gitignore ํ์ผ์์ #์ ์ฃผ์ ๊ธฐํธ๋ค. #์ผ๋ก ์์ํ๋ ์ค์ ์ฃผ์์ผ๋ก .gitignore ํ์ผ์ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ค๋ช ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
.gitignore ํ์ผ ์ฌ์ฉ์ ์ต์ํด์ก๋ค๋ฉด, ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๊ฒ ๊ธฐ๋ณธ์ ์ธ .gitignore ํ์ผ์ ์์ฑํด์ฃผ๋ gitignore.io์ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํด๋ ์ข๋ค.
ํ์ผ ์ํ ํ์ธํ๊ธฐ
๊น์ผ๋ก ๊ด๋ฆฌํ๋ ํ์ผ ์ํ๋ฅผ ์ดํดํ๋ ค๋ฉด ๊น ์์ ํธ๋ฆฌ(working tree) ๊ฐ๋ ์ ์์์ผ ํ๋ค.
๊น ์์ ํธ๋ฆฌ(working tree)
๊น์ ๊ด๋ฆฌํ๋ ํ๋ก์ ํธ์ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์์ ํธ๋ฆฌ๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. ์์ ํธ๋ฆฌ๋ ๊น์ด ์ถ์ (๊ด๋ฆฌ)ํ๋ ํ์ผ๊ณผ ์ถ์ ํ์ง ์๋ ํ์ผ์ ๊ตฌ๋ถํ๊ณ , ์ถ์ ํ๋ ํ์ผ๋ค์ ์ํ๋ฅผ ๊ตฌ๋ถ ์ง๋ ์์ญ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊น ์์ ํธ๋ฆฌ ๋ด์ฉ๋ค์ .git ์จ๊น ํด๋ ์์์ ๊ด๋ฆฌ๋๋ค.
๊น ์์ ํธ๋ฆฌ์๋ ํฌ๊ฒ 3๊ฐ์ง ์์ญ์ด ์กด์ฌํ๋ค.
โ ์์ ๋๋ ํฐ๋ฆฌ(Working Directory) : ์ค์ ์์ ์ค์ธ ํ์ผ๋ค์ด ์กด์ฌํ๋ ์์ญ์ด๋ค. ํ์ผ์ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ํ์ผ์ ์์ ํ๋ค๋ฉด ์ด๋ ์์ ์ค์ธ ํ์ผ์ ์๋ฏธํ๋ค.
โก ์คํ ์ด์ง ์์ญ(Staging Area) : ์์ ๋๋ ํฐ๋ฆฌ์์ ์์ ์ค์ธ ํ์ผ ์ค ๊น์ด ์ถ์ ํ๋ ํ์ผ๋ค์ ์๋ณํ๋ ์์ญ์ด๋ค. ์ค์ ๋ก๋ .git ์จ๊น ํด๋ ๋ด๋ถ์ index ํ์ผ์์ ์ถ์ ํ๋ ํ์ผ๋ค์ ์๋ณํ๊ณ ์๋ค.
โข ์ง์ญ ์ ์ฅ์(Local Repository) : ์คํ ์ด์ง ์์ญ์์ ์ถ์ ๋๋ ํ์ผ์ด ์ปค๋ฐ์ผ๋ก ๋ฑ๋ก๋๋ ์์ญ์ด๋ค. ์ฆ, ์คํ ์ด์ง ์์ญ์ ํ์ผ ํน์ ํ์ผ๋ค์ด ํ๋์ ๋ณ๊ฒฝ ๋จ์์ธ ์ปค๋ฐ์ผ๋ก ๋ฑ๋ก๋๋ ๊ณผ์ ์ด๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊น ์์
ํธ๋ฆฌ๋ ๊น ๋ช
๋ น์ด์ ๋ฐ๋ผ ๋์ํ๋ค. ์์
๋๋ ํฐ๋ฆฌ์์ ์์
์ค์ธ ํ์ผ์ โ git add
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์คํ
์ด์ง ์์ญ์ ์ถ์ ํ๋ ํ์ผ๋ก ๋ฑ๋กํ๊ณ , ์คํ
์ด์ง ์์ญ์์ ์๋ณ๋ ํ์ผ์ โก git commit
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์ง์ญ ์ ์ฅ์์ ๋ฑ๋กํ๊ฒ ๋๋ค.
๊น์ผ๋ก ํ์ผ ์ํ ํ์ธ - Untracked ๋ฐ Tracked ์ํ
๊น์์ ๊ด๋ฆฌํ๋ ํ์ผ์ Untracked(์ถ์ ํ์ง ์๋)์ Tracked(์ถ์ ํ๋) ์ํ๋ก ๋๋๋ค. ํ์ฌ ์์ ์งํ ์ค์ธ ์์ ๋๋ ํฐ๋ฆฌ์์ ์๋ก ์์ฑ๋ ํ์ผ์ Untracked ์ํ๊ฐ ๋๋ค. ์ฃผ์ํ ์ ์ ํ ๋ฒ Tracked ์ํ๊ฐ ๋์๋ค๊ฐ ์์ ๋๋ ํฐ๋ฆฌ์์ ์์ ๋ ํ์ผ์ Untracked ์ํ๊ฐ ์๋๋ผ๋ ์ ์ด๋ค.
01 git status
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ๋ก์ ํธ์ ํ์ฌ ํ์ผ ์ํ๋ฅผ ํ์ธํ๋ค.
git status
chapter2-basic
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
.gitignore ํ์ผ์ ํ์ฌ ์์ ์งํ ์ค์ธ ์์ ๋๋ ํฐ๋ฆฌ์์ ์๋ก ์์ฑํ ํ์ผ์ด๊ธฐ ๋๋ฌธ์ Untracked ์ํ๋ก ์กด์ฌํ๋ค.
02 .gitignore ํ์ผ์ git add
๋ช
๋ น์ด๋ก ์ปค๋ฐ์ ํฌํจ๋ ํ์ผ๋ก ๋ฑ๋กํ๋ฉด ํ์ผ ์ํ๊ฐ tracked ์ํ๋ก ๋ณ๊ฒฝ๋๋ค.
git add "ํ์ผ๋ช
"
๋ง์ฝ ํด๋๋ฅผ ํต์งธ๋ก ์ฌ๋ฆฌ๊ณ ์ถ๋ค๋ฉด ํด๋น ํด๋์ ์์ ํด๋์์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
git add "ํด๋ ์ด๋ฆ"
์ ํํ ์ด๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ก ์์ ๊ฐ์ด ํด๋น ํด๋์ ์์ ํด๋์์ ์งํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ํด๋ ๊ตฌ์กฐ๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์ ๋
my_project/
โโโ my_folder/
โโโ file1.txt
โโโ file2.txt
ํ์ฌ ์์
์ค์ธ ๋๋ ํ ๋ฆฌ๊ฐ 'my_project'๋ผ๊ณ ํ์. ์ด ์ํ์์ 'my_folder'๋ฅผ ํต์งธ๋ก ์ฌ๋ฆฌ๊ณ ์ถ๋ค๋ฉด, git add
๋ช
๋ น์ ์คํํ ๋ 'ํด๋ ์ด๋ฆ'์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ ํด๋น ํด๋๋ฅผ ์ ํํ๋ค.
git add my_folder
์ด๋ 'my_folder'๋ 'my_project' ํด๋์ ํ์ ํด๋๋ก ์์นํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ ๊ฒฝ๋ก๋ก ๊ทธ๋ฅ 'my_folder'๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
๋ค์์ ํด๋น ํด๋์์ ์งํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ง์ฝ ์ด๋ฏธ ํด๋น ํด๋ ์์ ์์นํด ์๋ค๋ฉด, ํด๋น ํด๋๋ก ์ด๋ํ ํ์ git add
๋ช
๋ น์ ์คํํ๋ฉด ๋๋ค.
cd my_project/my_folder
git add .
.
์ ํ์ฌ ๋๋ ํ ๋ฆฌ(์ฆ, 'my_folder')๋ฅผ ์๋ฏธํ๋ค.
๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์์ โ .gitignore ํ์ผ์ add
ํ๊ณ โก git status
๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
chapter2-basic
$ git add .gitignore
chapter2-basic
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
git add
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ .gitignore ํ์ผ์ ์ปค๋ฐ ๋์์ผ๋ก ๋ฑ๋กํ๊ณ , git status
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ํ์ผ ์ํ๋ฅผ ๋ค์ ํ์ธํด๋ณด๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์๋ค. Changes to be committed๋ ํด๋น ํ์ผ์ด ๊น์์ ๊ด๋ฆฌํ๋ ํ์ผ์ธ Tracked ์ํ๋ฟ๋ง ์๋๋ผ ์คํ
์ด์ง ์์ญ์์ ์ปค๋ฐ์ผ๋ก ๊ธฐ๋ก๋ ์ค๋น๊ฐ ๋์ด์๋ค๋ ๋ป์ด๋ค.
์ฐธ๊ณ ๋ก, git add
๋ฅผ ์ํํ ๋ ์ฌ๋ฌ ํ์ผ์ ์ ํํ๊ธฐ ์ํ๋ ๊ฒฝ์ฐ ํด๋น ํ์ผ ์ด๋ฆ์ ๋์ดํ๋ฉด ๋๋ค.git add
๋ช
๋ น์ด๋ฅผ ์คํํ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋ณด์ผ ์๋ ์๋ค.
warning: LF will be replaced by CRLF in .gitignore.
์ด ๊ฒฝ๊ณ ๋ ์ด์์ฒด์ ๋ง๋ค ๊ฐํ๋ฌธ์๋ฅผ ์ธ์ํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ ๋ฐ์ํ๋ค. ํด๋น ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํด๋ ์ค์ต์ ์งํํ๋ ๋ฐ ๋ฌธ์ ๋ ์์ง๋ง, ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ๋ณด๊ณ ์ถ์ง ์๋ค๋ฉด ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค. ์ด ๋ช ๋ น์ด๋ฅผ ํตํด ๊ฒฝ๊ณ ๋ฌธ๊ตฌ ์์ด ๊น์ด ์๋์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ์ค์ ํ ์ ์๋ค.
git config core.autocrlf true
๊น์ผ๋ก ํ์ผ ์ํ ํ์ธ - Unmodified ๋ฐ Modified ์ํ
ํ ๋ฒ ์คํ ์ด์ง ์์ญ์ ์ถ๊ฐ๋ ํ์ผ์ ์์ ์ฌ๋ถ์ ๋ฐ๋ผ Unmodified(์์ ๋์ง ์์) ์ํ์ Modified(์์ ๋) ์ํ๋ก ๋ถ๋ฅ๋๋ค.
์์
๋๋ ํฐ๋ฆฌ์์ git add
๋ช
๋ น์ผ๋ก ์คํ
์ด์ง ์์ญ์ ์ถ๊ฐ๋ ํ์ผ์ ์ํ๋ฅผ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
โ Stage : ์ปค๋ฐ์ผ๋ก ๊ธฐ๋กํ ์ ์๋ ์ต์ข
์ํ
โก Unstage : ์คํ
์ด์ง ์์ญ์ ์์ง๋ง, ํ์ผ์ ๋ณํ๊ฐ ์๋ ์ํ
Stage ์ํ๋ Tracked ์ํ์ Unmodified ์ํ๋ก ๋ถ๋ฅํ ์ ์์ง๋ง ๊ฐ์ ์๋ฏธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. Unmodified ์ํ๋ Tracked ์ํ์ด๋ฉด์ ํ์ผ์ด ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ฅผ ์๋ฏธํ๋ค. Unstage ์ํ์ ์๋ ํ์ผ์ ์คํ ์ด์ง ์์ญ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ์ปค๋ฐ์ผ๋ก ๊ธฐ๋กํ ์ ์๋ ์ํ๊ฐ ์๋๋ค. ์ฆ, Stage ์ํ์๋ค๊ฐ ํ์ผ์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ ์๊ฐ Unstage์ธ Modified ์ํ๋ก ์ด์ ๋๋ค.
โ ํ์ฌ ํ๋ก์ ํธ์์ ์๋ก์ด ํ์ผ์ ์์ฑํ๊ณ ๋ด์ฉ์ ์์ฑํ๋ค. ์์
๋๋ ํฐ๋ฆฌ์ Untracked ์ํ๊ฐ ๋๋ค. โก git add
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ๋ฑ๋กํ๋ค. ์คํ
์ด์ง ์์ญ์ Tracked ๋ฐ Unmodified ์ํ๋ก ์ด์ ํ๋ค. โข ํด๋น ํ์ผ์ ์ฝ๋ ํ ์ค์ ์ถ๊ฐํ๋ค. ํ์ผ์ด ๋ณ๊ฒฝ๋์๊ธฐ์ ์ฌ์ ํ ์คํ
์ด์ง ์์ญ์ ์กด์ฌํ์ง๋ง Tracked ๋ฐ Modified ์ํ๋ก ์ด์ ํ๋ค. โฃ ์ฝ๋ ์ถ๊ฐ๊ฐ ์๋ฃ๋์ด ๋ค์ git add
๋ช
๋ น์ด๋ก ํด๋น ํ์ผ์ ์ฌ๋ฑ๋กํ๋ฉด Tracked ๋ฐ Unmodified ์ํ๋ก ์ด์ ๋๋ค.
git status
๋ช
๋ น์ด๋ฅผ ์์ฃผ ์คํํด๋ณด๋ฉฐ ๊น์์ ๊ด๋ฆฌํ๋ ํ์ผ์ ์์ญ๊ณผ ์ํ์ ๋ํด ํ์
ํ ์ ์๋ค.