ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Git ์„ค์ •ํ•˜๊ธฐ

 

- ๊นƒ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• git config

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

 

 

๊นƒ ์„ค์ • ๋ฒ”์œ„ 3๊ฐ€์ง€

1. ์‹œ์Šคํ…œ - ๋ชจ๋“  ์‚ฌ์šฉ์ž, ์ €์žฅ์†Œ์— ์ ์šฉ๋˜๋Š” ๋ฒ”์œ„(/etc/gitconfig)

2. ์ „์—ญ(global) - ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์„ค์ •๋˜๋Š” ๋ฒ”์œ„(~/.gitconfig)

3. ์ง€์—ญ(local) - ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋””๋ ‰ํ† ๋ฆฌ (.git/config)

 

 

ํƒ์ƒ‰์ˆœ์„œ

1. ์‹œ์Šคํ…œ

2. ์ „์—ญ

3. ์ง€์—ญ

 

์ค‘๋ณต๋  ๊ฒฝ์šฐ ์ง€์—ญ์— ์„ค์ •๋œ ์„ค์ •๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ด.

 

 

 

ํด๋ผ์ด์–ธํŠธ ์„ค์ •

 

$ man git-config

 

git ๋ฒ„์ „๋งˆ๋‹ค ์˜ต์…˜์ด ๋‹ค๋ฅธ๋ฐ, ์„ค์น˜ํ•œ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์˜ต์…˜์„ ๋ณด์—ฌ์คŒ.

 

 

 

 

 

git commit ํ• ๋•Œ ๋ฉ”์„ธ์ง€ ํ…œํ”Œ๋ฆฟ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•

 

1. ~/.gitmessage.txt ํŒŒ์ผ ๋‚ด๋ถ€ ์„ค์ •

Subject line (try to keep under 50 characters)

Multi-line description of commit,
feel free to be detailed.

[Ticket: X]


// ์ œ๋ชฉ 50์ž ์ดํ•˜,
// ์ž์„ธํ•œ ์ˆ˜์ •๋‚ด์šฉ์€ ํ•œ์นธ ๊ณต๋ฐฑ ์ดํ›„ ์„œ์ˆ 
// ์ด์Šˆ ๋ฒˆํ˜ธ ์ ๋„๋ก ์œ ๋„

 

 

2. commit ํ…œํ”Œ๋ฆฟ ์„ค์ •

$ git config --global commit.template ~/.gitmessage.txt
$ git commit

 

 

 

 

 

 

 

์„œ๋ช… Tag ๋“ฑ๋ก

 

Annotated Tag ์„œ๋ช…ํ• ๋•Œ ํ•„์š”ํ•œ gpgํ‚ค๋ฅผ ์„ค์ •ํ•ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค

git config --global user.signingkey <gpg-key-id>

git tag -s <tag-name>

 

git tag ์‹คํ–‰ํ• ๋•Œ ํ‚ค๋ฅผ ์ƒ๋žตํ•˜๊ณ  ์„œ๋ช… ๊ฐ€๋Šฅ

 

 

+ gpg ํ‚ค ์ƒ์„ฑ์€

gpg --list-keys
gpg --gen-key

 

ํ™•์ธ๋œ ์‚ฌ๋žŒ์—๊ฒŒ์„œ๋งŒ ์ปค๋ฐ‹์„ ๋ฐ›์œผ๋ ค๋ฉด GPG ํ‚ค๋ฅผ ์ด์šฉํ•จ

 

 

 

 

git show ๋ช…๋ น์œผ๋กœ GPG ์„œ๋ช… ํ™•์ธ

git show <tag-name>

 

 

 

 

 

 

 

Git Ignore

๋กœ์ปฌ: git addํ•  ๋•Œ ํŒŒ์ผ ์ œ์™ธ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ .gitignore ํŒŒ์ผ์— ํŒจํ„ด ์ ์œผ๋ฉด๋จ.

 

์ „์—ญ: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์™ธ, ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋„ ์ œ์™ธํ•˜๋ ค๋ฉด ~/.gitignore_global ํŒŒ์ผ์—

*~
.*.swp
.DS_Store

 

์ด๋Ÿฐ ์ œ์™ธ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์„ ์ž‘์„ฑํ•œ ๋’ค,

 

git config --global core.excludesfile ~/.gitignore_global ํ•˜๋ฉด ๋จ

 

 

 

 

ํ„ฐ๋ฏธ๋„ ์ปฌ๋Ÿฌ ์ปค์Šคํ…€ํ•˜๊ธฐ

 

 

color.branch
color.diff
color.interactive
color.status

 

์˜ต์…˜์— ๊ฐ๊ฐ ์ปฌ๋Ÿฌ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

 

์˜ˆ์‹œ

$ git config --global color.diff.meta "blue black bold"

 

: diff ๋ช…๋ น์—์„œ meta ์ •๋ณด์˜ foreground๋Š” blue, backgound๋Š” black ํ…์ŠคํŠธ๋Š” bold๋กœ ์„ค์ •

 

 

 

 

 

Formatting and Whitespace

OS ๋ณ„ ์ค„๋ฐ”๊ฟˆ

 

Linux๋Š” LF๋ฌธ์ž๋งŒ ์‚ฌ์šฉ

์œˆ๋„์šฐ๋Š” CRLF ์‚ฌ์šฉ

 

 

ํ†ต์ผํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ. (์œˆ๋„์šฐ์—์„œ)

$ git config --global core.autocrlf true

 

Git์—์„œ ์ปค๋ฐ‹ํ• ๋•Œ ์ž๋™์œผ๋กœ CRLF -> LF๋กœ ๋ณ€ํ™˜,

Checkoutํ•  ๋•Œ LF -> CRLF ๋กœ ๋ณ€ํ™˜ ํ•ด์ฃผ๋Š” ์ฝ”๋“œ

 

 

 

 

๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” Checkoutํ•  ๋•Œ LF -> CRLF ํ•  ํ•„์š”์—†์Œ

$ git config --global core.autocrlf input

 

๊ทธ๋ž˜์„œ ์ปค๋ฐ‹ํ• ๋•Œ๋งŒ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” CRLF -> LF ํ•ด์ฃผ๋Š” ์ฝ”๋“œ ์‚ฌ์šฉ. (์šฐ์—ฐํžˆ ๋“ค์–ด๊ฐ„ CRLF๋ฅผ ๋ณ€ํ™˜ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค)

 

 

 

 

์„œ๋ฒ„ ์„ค์ •

 

ํ‘ธ์‹œ ํ• ๋•Œ๋งˆ๋‹ค SHA-1 ์ฒดํฌ์„ฌ์ด ์ž˜๋ชป๋œ ๊ฐœ์ฒด ํ™•์ธ.

$ git config --system receive.fsckObjects true

 

- ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ Push ์•ˆํ•˜๋„๋ก  ํ•จ

(ํ•˜์ง€๋งŒ Pushํ•  ๋•Œ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚จ)

 

 

 

 

 

- ํ•œ๋ฒˆ Pushํ•œ ์ปค๋ฐ‹์„ Rebase๋กœ ์žฌ Push ๋ชปํ•˜๋„๋ก ํ•จ.

$ git config --system receive.denyNonFastForwards true

 

 

 

 

๋ธŒ๋Ÿฐ์น˜๋ฅผ ์‚ญ์ œํ•˜๋Š” Push๋Š” ๊ฑฐ์ ˆํ•˜๋„๋ก ํ•จ.

$ git config --system receive.denyDeletes true

 

 

 

 

 

Git Attributes

 

๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ ๋‹จ์œ„๋กœ ๋‹ค๋ฅธ ์„ค์ •์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ”„๋กœ์ ํŠธ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— .gitattributes

 

 

.gitattributes

 

 

๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด Merge๋Š” ์–ด๋–ป๊ฒŒ ํ• ์ง€, ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์€ ์–ด๋–ป๊ฒŒ Diffํ• ์ง€ ๋“ฑ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

.git/info/attributes

 

์œ„ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์„œ ์„ค์ • ์ถ”๊ฐ€

 

 

 

 

 

์˜ˆ์‹œ1)

 

Xcode Bulide Setting ๊ด€๋ฆฌ ํŒจํ‚ค์ง€ pbxproj

 

pbxproj๋Š” JSONํฌ๋งท์— ํ…์ŠคํŠธ๋Š” ASCII ์ทจ๊ธ‰ -> Binaray๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฒŒ ์˜ณ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์žˆ์Œ

 

*.pbxproj binary

 

 

 

 

 

์˜ˆ์‹œ2)

 

๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ์‹œ .pbxproj ์—์„œ ์ถฉ๋Œ์ด ๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ,


๋ณ‘ํ•ฉ๊ด€๋ จ ์‚ฌํ•ญ์„ .gitattributes ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
 

$ vi .gitattributes


 ์ง„์ž… ์ดํ›„ ํ•ด๋‹น ํŒŒ์ผ์—

 

*.pbxproj binary merge=union

 

์ž‘์„ฑํ•˜๋ฉด ๋จธ์ง€ ์ถฉ๋Œ์„ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ์Œ.

 

 

 

 

*merge=union

ํ…์ŠคํŠธ ํŒŒ์ผ 3way ๋ณ‘ํ•ฉ ๋ฐฉ๋ฒ•์œผ๋กœ ์ถฉ๋Œ์‹œ ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋‘ ๋ฒ„์ „์—์„œ ๋ผ์ธ์„ ๋‹ค ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•จ

 

https://schacon.github.io/git/gitattributes.html

 

 

 

 

 

 

Merge ์ „๋žต

 

 

๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ Mergeํ• ๋•Œ,Attribute๋ฅผ ์•„๋ž˜๋กœ ์„ค์ •ํ•˜๋ฉด ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ database.xml ๋Š” ์ œ์™ธํ•˜๊ณ  Merge ํ•˜๋„๋ก ํ•œ๋‹ค.

 

database.xml merge=ours

 

$ git config --global merge.ours.driver true

 

 

 

Git Hooks

 

์ด๋ฒคํŠธ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ, ์ž๋™์œผ๋กœ ํŠน์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ.

 

.git/hooks/ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ํ›…์ด ์กด์žฌ

 

 

์ปค๋ฐ‹๊ด€๋ จ 4๊ฐ€์ง€ Hook

 

 

1. pre-commit

- ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ž‘์„ฑ ์ „ ํ˜ธ์ถœ

- lint๋กœ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜

- ๋ผ์ธ ๋ ๊ณต๋ฐฑ๋ฌธ์ž ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜

- ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ์— ์ฃผ์„ ๋‹ฌ์•˜๋Š”์ง€ ๊ฒ€์‚ฌ

 

2. prepare -commit-msg

- ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ ์ดํ›„ ์‹คํ–‰

- ์Šคํฌ๋ฆฝํŠธ๋กœ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€์— ์ •๋ณด ์‚ฝ์ž… ๊ฐ€๋Šฅ

 

3. commit-msg

- ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๊ฐ€ ์ •์ฑ…์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ๊ฐ€๋Šฅ

 

4. post-commit

- ์ปค๋ฐ‹ ์™„๋ฃŒ ์ดํ›„ ์‹คํ–‰

 

 

๊ธฐํƒ€ ํ›…

 

pre-rebase

- rebase ํ•˜๊ธฐ ์ „ ์‹คํ–‰ (์ด๋ฏธ psuh ํ•œ ์ปค๋ฐ‹์„ rebase ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ)

 

post-rewrite

- git rebase, git commit --amend (๊นƒ ์ปค๋ฐ‹ ์ˆ˜์ •)

 

post-merge

- Merge๋กœ working tree๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, git์ด ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์ด ์›ํ•˜๋Š”๋Œ€๋กœ ์ž˜ ๋ฐฐ์น˜๋๋Š”์ง€ ๊ฒ€์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ

 

pre-push

- push์ „ ์ปค๋ฐ‹์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ.

 

 

 

e.g.

commitํ•  ๋•Œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์••์ถ•ํ•ด์ฃผ๋Š” ํ›…

 

pre-commit ํŒŒ์ผ์— ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•ด์คŒ

 

์ถœ์ฒ˜: ์šฐ์•„ํ•œ ๋ธ”๋กœ๊ทธ

 

 

์ถœ์ฒ˜: ์šฐ์•„ํ•œ ๋ธ”๋กœ๊ทธ ํ›… ๊ด€๋ จ๊ธ€ - https://techblog.woowahan.com/2530/

 

ํ›…์œผ๋กœ Git์— ํ›… ๋“ค์–ด๊ฐ€๊ธฐ | ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

{{item.name}} ๋“ค์–ด๊ฐ€๋ฉฐ… ์•ˆ๋…•ํ•˜์„ธ์š”. ์šฐ์•„ํ•œํ˜•์ œ๋“ค CTO์‹ค ์ฃผ๋ฌธ์‹œ์Šคํ…œ๊ฐœ๋ฐœํŒ€์˜ ๋ผํƒœ์›…์ž…๋‹ˆ๋‹ค. ์š”์ƒˆ Git์€ ์–ด๋Š ์กฐ์ง์ด๊ฑด ๊ฐœ์ธ์ด๊ฑด ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ ๋ฐ์š”, ๊ต‰์žฅํžˆ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์ฃ . ์ด์ค‘ ๋ชฐ๋ผ๋„

techblog.woowahan.com

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€