gitattributes

.gitattributes

Git์€ ๋‹จ์ˆœํžˆ ํŒŒ์ผ ๋ฒ„์ „ ๊ด€๋ฆฌ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ํŒŒ์ผ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ .gitattributes ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํŠน์ • ํŒŒ์ผ์ด๋‚˜ ํŒŒ์ผ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด diff, merge, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ, ์ค„๋ฐ”๊ฟˆ ๋ณ€ํ™˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ํ˜‘์—… ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


๋ฌธ๋ฒ•

.gitattributes ํŒŒ์ผ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฃจํŠธ๋‚˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•˜๋ฉฐ, ๊ฐ ์ค„๋งˆ๋‹ค ํŒจํ„ด๊ณผ ์†์„ฑ(attribute)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํŒจํ„ด: ์ ์šฉํ•  ํŒŒ์ผ ์ด๋ฆ„์ด๋‚˜ ๊ฒฝ๋กœ, ์™€์ผ๋“œ์นด๋“œ(*, ?)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์†์„ฑ ์„ค์ •: ํŒจํ„ด ๋’ค์— ์†์„ฑ์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์„ ์ฒ˜๋ฆฌ: # ๊ธฐํ˜ธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ค„์€ ์ฃผ์„์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋ชจ๋“  .sh ํŒŒ์ผ์„ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ธ์‹ํ•˜๊ณ , LF(Line Feed) ์ค„๋ฐ”๊ฟˆ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

# ๋ชจ๋“  ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  LF๋กœ ์ค„๋ฐ”๊ฟˆ ์„ค์ •
*.sh text eol=lf

์ด์ฒ˜๋Ÿผ text ์†์„ฑ์€ Git์ด ํŒŒ์ผ์„ ํ…์ŠคํŠธ๋กœ ๋‹ค๋ฃจ๋„๋ก ํ•˜๋ฉฐ, eol ์˜ต์…˜์€ ์ค„๋ฐ”๊ฟˆ ํ˜•์‹์„ ๊ฐ•์ œํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์˜ˆ์‹œ

  1. ์ค„๋ฐ”๊ฟˆ ์ œ์–ด (eol)

    • ์˜ˆ์‹œ: Windows์™€ Unix ๊ฐ„ ์ค„๋ฐ”๊ฟˆ ํ˜•์‹ ์ฐจ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์€ ํ•ญ์ƒ LF๋กœ ์ €์žฅํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      # C/C++ ์†Œ์Šค์ฝ”๋“œ๋Š” LF ์ค„๋ฐ”๊ฟˆ ์ ์šฉ
      *.c text eol=lf
      *.h text eol=lf
  2. ์ด์ง„ ํŒŒ์ผ ์ฒ˜๋ฆฌ (binary)

    • ์ด์ง„ ํŒŒ์ผ์€ diff๋‚˜ ์ž๋™ ๋ณ‘ํ•ฉ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด binary ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

      # ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ์ด์ง„ ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ
      *.png binary
      *.jpg binary
  3. ์ปค์Šคํ…€ merge ์ „๋žต

    • ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ํ•„์š” ์—†๋Š” ํŒŒ์ผ(์˜ˆ: ์ž ๊ธˆ ํŒŒ์ผ ๋“ฑ)์€ ๋ณ‘ํ•ฉ ์‹œ ํ•ญ์ƒ ํ˜„์žฌ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      # .lock ํŒŒ์ผ์€ ํ•ญ์ƒ ours ์ „๋žต ์‚ฌ์šฉ
      *.lock merge=ours
  4. ์‚ฌ์šฉ์ž ์ •์˜ diff ๋“œ๋ผ์ด๋ฒ„

    • ํŠน์ • ํŒŒ์ผ ํ˜•์‹์— ๋Œ€ํ•ด Git์ด ๋‚ด์žฅ๋œ diff ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋Œ€์‹  ์ปค์Šคํ…€ ๋น„๊ต ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      # Markdown ํŒŒ์ผ์— ์ปค์Šคํ…€ diff ์‚ฌ์šฉ (์ถ”๊ฐ€ ์„ค์ •์€ .git/config์—์„œ)
      *.md diff=markdown
  5. Git LFS ์—ฐ๋™

    • ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์€ Git LFS๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, ๊ด€๋ จ ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ์ž๋™ ํ•„ํ„ฐ๋ง ๋ฐ ๋ณ‘ํ•ฉ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      # PSD ํŒŒ์ผ์€ Git LFS๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , diff/merge๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
      *.psd filter=lfs diff=lfs merge=lfs -text

ํŒ

  • ์—ฌ๋Ÿฌ ํŒจํ„ด ํ•œ ์ค„์— ์ง€์ •ํ•˜๊ธฐ: ์—ฌ๋Ÿฌ ํ™•์žฅ์ž๋ฅผ ํ•œ ๋ฒˆ์— ์ง€์ •ํ•˜๋ ค๋ฉด ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    # JPG, PNG, GIF ํŒŒ์ผ์€ ๋ชจ๋‘ ์ด์ง„ ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ
    *.{jpg,png,gif} binary
  • ์ด๋ฏธ ์ถ”์  ์ค‘์ธ ํŒŒ์ผ: .gitattributes๋กœ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•ด๋„ ์ด๋ฏธ Git์ด ์ถ”์  ์ค‘์ธ ํŒŒ์ผ์—๋Š” ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ํŒŒ์ผ์„ ์žฌ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ์บ์‹œ๋ฅผ ํด๋ฆฌ์–ด(git rm --cached <ํŒŒ์ผ>)ํ•œ ํ›„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

Last updated