๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ์˜ git ์˜์—ญ

  • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ
    • ์‹ค์ œ ํŒŒ์ผ์ด ์ด๋ฃจ์–ด์ง„ ๊ณณ
  • Staging area
    • ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Staging area์— ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ๋“ค์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋ก
    • git add ๋ฅผ ํ†ตํ•ด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ๋“ค์„ staging area์— ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ์Œ
      • ์ด ๋•Œ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ.
      • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด๋„ Staging area์˜ ํŒŒ์ผ์—๋Š” ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ
  • Head(Git Directory)
    • Staging Area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๊ฐ€์ง€๊ณ  ์ตœ์ข… ํ™•์ •๋ณธ(commit)์„ ๋งŒ๋“ค์–ด ์ปค๋ฐ‹์„ ์™„๋ฃŒ

ํŒŒ์ผ ์ƒํƒœ ์šฉ์–ด

  • staged
    • staging area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค
    • staging area์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ปค๋ฐ‹ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ์ €์žฅ๋œ ํ›„ ํŒŒ์ผ์˜ ์ƒํƒœ๋Š” unmodified๋กœ ๋‚ด๋ ค์˜ค๊ฒŒ ๋จ
    • staging area์—์„œ staged๋œ ์ƒํƒœ์˜ ํŒŒ์ผ
  • tracking
    • ํŒŒ์ผ์„ ์ถ”์ ํ•˜์—ฌ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์คŒ
  • untracked
    • ์ถ”์ ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ
  • modified
    • unmodified ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋ณ€ํ•˜๋Š” ์ƒํƒœ
    • ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง

SHA(Secure Hash Algorithm)

  • ์•ˆ์ „ํ•œ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ‘œ์ค€
  • โ€˜SHA-256โ€™์€ Secure Hash Algorithm 256-bit์˜ ์ค„์ž„๋ง๋กœ, ์•”ํ˜ธํ•™์  ํ•ด์‹œย ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜
  • ํ•ด์‹œ ํ•จ์ˆ˜ โ†’ ์ž„์˜์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • SHA-256์€ 256๋น„ํŠธ(32๋ฐ”์ดํŠธ) ๊ธธ์ด์˜ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋ฉฐ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ, ๋ฉ”์‹œ๋”” ์ธ์ฆ ์ฝ”๋“œ(MAC) ์ƒ์„ฑ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ๊ด€๋ จ ์ž‘์—…์— ์‚ฌ์šฉ๋œ๋‹ค.SHA-256์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ž‘์€ ๋ณ€ํ™”์—๋„ ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.
  • SHA-256์€ย ์ผ๋ฐฉํ–ฅ ํ•ด์‹œ ํ•จ์ˆ˜์ด๋ฏ€๋กœ, ํ•ด์‹œ ๊ฐ’์„ ํ†ตํ•ดย **์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜๋Š” ์—†์Œ.**๋”ฐ๋ผ์„œ ์ฃผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์•ˆ์ „ํ•œ ์ €์žฅ๊ณผ ๋น„๊ต, ํŒŒ์ผ์˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ๋“ฑ์— ํ™œ์šฉ๋œ๋‹ค.

Git ๋œฏ์–ด๋ณด๊ธฐ

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

๊นƒ์˜ ๋‚ด๋ถ€๊ตฌ์กฐ

๊นƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งจ๋‚  initํ•˜๊ณ  addํ•˜๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ํ•˜๋Š”๋ฐ ์ •์ž‘ ์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ๋ญ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ํ•œ๋ฒˆ ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด์ž.

Init์„ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

UNIX ์šด์˜์ฒด์ œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋” ์ด๋ฆ„์ด๋‚˜ ํŒŒ์ผ ์ด๋ฆ„ ์•ž์— .์„ ๋ถ™์ด๋ฉด ์ˆจ๊น€์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ init์„ ํ†ตํ•ด ๋ญ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”์ง€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ์•˜์„ ๊ฒƒ์ด๋‹ค.(๋‚˜๋„ ๊ทธ๋žฌ๋‹ค) ์ฐธ๊ณ ๋กœ ๋งฅ์€ Shift + cmd + . ์„ ๋ˆ„๋ฅด๋ฉด ์ˆจ๊น€ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. git init์„ ํ•˜๋ฉด .git์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋‚ด๊ฐ€ init์„ ์‹คํ–‰ํ•œ ๊ฒฝ๋กœ์—์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋ญ๊ฐ€ ๋˜๊ฒŒ ๋งŽ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์€ ๋”ฐ๋กœ ์žˆ๋‹ค.

/Objects

.git/objects .git/objects/info .git/objects/pack ์ด๋Ÿฌํ•œ Objects ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ๋“ค์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.

์ฒ˜์Œ์— ์ด ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ addํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ 2๊ฐ€์ง€ ๊ธ€์ž๋กœ ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•„๋ž˜๋กœ 38๊ธ€์ž์˜ ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง€๋Š” ํŒŒ์ผ์ด ๊ฐ๊ฐ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

์ด Objects์˜ ๊ตฌ์„ฑ์€ ์‹ค์ œ ํŒŒ์ผ์— ๋‹ด๊ธด ๊ฐ’๋“ค์„ zlib์œผ๋กœ ์••์ถ•ํ•œ ๋’ค, SHA1 ํ•ด์‹œํ•œ ๊ฐ’์„ 2/38๊ธ€์ž๋กœ ์ž๋ฅธ ๊ฒƒ์ด๋‹ค. ํ•ด์‹œ๊ฐ’์€ ๋‚ด์šฉ์ด ๋˜‘๊ฐ™์ง€ ์•Š์€ ์ด์ƒ ์กฐ๊ธˆ์ด๋ผ๋„ ๋ณ€๋™์ด ์ƒ๊ธฐ๋ฉด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ํŒŒ์ผ ์‹๋ณ„์ด ์ข‹์•„์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์กŒ์„ ๊ฒฝ์šฐ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜„์žฌ์˜ ๋ฒ„์ „ ๋‘ ๊ฐ€์ง€๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” git revert์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด์ „ ์ปค๋ฐ‹ ๊ธฐ๋ก ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ด Objects ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐœ์ฒด๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค.

  • Blob
  • Tree
  • Commit
  • tag(dlc)

Blob

Blob์€ ๋Œ€ํ˜• ์ด์ง„ ๊ฐ์ฒด(Binary Large Object)๋ผ๋Š” ์ด๋ฆ„์˜ ์•ฝ์ž์ด๋‹ค. ๋‹‰๊ฐ’ ํ•œ ๋“ฏ์ด ์ด๋ฏธ์ง€, ์‚ฌ์šด๋“œ, ๋น„๋””์˜ค์™€ ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๊ฐ์ฒด์ด๋ฉฐ JSON๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ํฐ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ๋ฐ์—์„œ๋„ Blob ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ArrayBuffer, ArrayBufferView, File, DOMString ๊ฐ์ฒด์™€ ๊ฐ™์€ ํ•œ์ •์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

const blob = new Blob([new ArrayBuffer(data),{
	type: "application/json"
})

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ์ด๋Ÿฌํ•œ ์‹์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฐ์ฒด๋Š” ํ•ด๋‹น ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ ํฌ๊ธฐ size์™€ MIME ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” type Property๋ฅผ ๊ฐ€์ง„๋‹ค.

Tree

ํŠธ๋ฆฌ๋Š” ์ปค๋ฐ‹๋‹น ํ•˜๋‚˜ ์ด์ƒ์˜ ํŠธ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด์ด๋‹ค. Tree์˜ ํŠน์ด์ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์œ ๋‹‰์Šค ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๋Š” ๋ฆฌ๋ˆ…์Šค๋‚˜ ๋งฅ์—์„œ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. (ํ•˜๊ธด ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์ฆˆ๊ฐ€ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ) ํŠธ๋ฆฌ๋Š” ์„œ๋ธŒ ํŠธ๋ฆฌ ๋˜๋Š” BLOB๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Ÿฌํ•œ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

$ git cat-file -p master^{tree} //<-- master๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” Tree ๊ฐœ์ฒด
100644 blob a906cb2a4a904a152e80877d4088654daad0c859      README
100644 blob 8f94139338f9404f26296befa88755fc2598c289      Rakefile
040000 tree 99f1a6d12cb4b6f19c8655fca46c3ecf317074e0      lib <-- ๋‹ค๋ฅธ Tree ๊ฐœ์ฒด

ํ•ด๋‹น ๊นƒ์˜ Tree๊ฐ์ฒด๋ฅผ ๋ณด๋ฉด ํŒŒ์ผ ์‹๋ณ„์ž / ๊ฐœ์ฒด / ํ•ด์‹œ๊ฐ’ / ํŒŒ์ผ๋ช…์œผ๋กœ ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŒŒ์ผ ์‹๋ณ„์ž๋Š”

  • 100644(์ฝ๊ธฐํŒŒ์ผ(blob))
  • 100755(์‹คํ–‰ํŒŒ์ผ(blob))
  • 040000 ๋””๋ ‰ํ„ฐ๋ฆฌ(Tree) ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋’ค์˜ ์ˆซ์ž๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ๋ชจ๋“œ(๊ถŒํ•œ)์„ ์˜๋ฏธํ•˜๋‚Ÿ.

Commit

์ปค๋ฐ‹์€ ๋ถ€๋ชจ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

์ด ์ปค๋ฐ‹์€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ๋ถ€๋ชจ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด์„œ commit tree๋ฅผ ๋งŒ๋“ค์–ด ์ปค๋ฐ‹ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ Tree ๊ฐœ์ฒด์˜ SHA-1๊ฐ’์„ ๋„˜๊ธด๋‹ค.

์ด ๋•Œ ์ด Tree๊ฐ์ฒด๋Š” ์ตœ์ƒ๋‹จ Tree๋ฅผ ํ•˜๋‚˜ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ. username๊ณผ user.email ์„ค์ •์—์„œ ๊ฐ€์ ธ์˜จ ์ •๋ณด, ์‹œ๊ฐ„์ •๋„, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊ฐ€ ๋“ค์–ด๊ฐ

๊นƒ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๋ถˆ๋ณ€ ๊ฐ์ฒด์ธ ๋งŒํผ, commit ๊ฐ์ฒด ๋˜ํ•œ ๋ถˆ๋ณ€์„ฑ(immutable)์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ณง ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๊ธฐ๋„ ํ•˜๋‹ค.

์ด๋Ÿฌํ•œ commit ๊ฐ์ฒด์—๋Š”

  • ์ž‘์„ฑ์ž
  • ์ปค๋ฐ‹ ์‹คํ–‰์ž
  • ์ปค๋ฐ‹ ๋‚ ์งœ
  • ๋กœ๊ทธ ๋ฉ”์‹œ์ง€
  • tree ๊ฐ์ฒด ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ง€๋‹Œ๋‹ค.

tag

ํƒœ๊ทธ๋Š” ๊ผฌ๋ฆฌํ‘œ์™€ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Ÿฌํ•œ tag๋Š” ์šฐ๋ฆฌ๊ฐ€ git tagํ•  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, commit ๊ฐ์ฒด๋ช…, tag ์ด๋ฆ„, tagger, ๋ฉ”์‹œ์ง€ ๋“ฑ์ด ๊ธฐ๋ก๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์“ฐ์ง€๋Š” ์•Š์ง€๋งŒ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ฒ„์ „ ๋ช… ๋“ฑ์„ ๋‹ฌ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์€ ์–ด๋А ์‹œ์ ์—์„œ ์ƒ๊ธฐ๊ณ , ์–ด๋–ค ์‹œ์ ์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๊ฐ€๋Š” ๋“ฑ์˜ ํ๋ฆ„์„ ์•Œ์•„๋ณด์ž.

๊นƒ์ด commit ๋˜๊ธฐ๊นŒ์ง€

๊ธฐ๋ณธ์ ์œผ๋กœ ๊นƒ์—์„œ ๋‹ด๊ฒจ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์—์„œ์˜ ์Šค๋ƒ…์ƒท์ด๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ์ €์žฅํ•˜๋Š” ์ปค๋งจ๋“œ(์ปค๋ฐ‹)ํ•˜์—ฌ ์ ์šฉํ•  ๋•Œ์˜ ์ˆœ๊ฐ„์„ ์ค‘์š”์‹œํ•œ๋‹ค.

๊นƒ ํ”„๋กœ์ ํŠธ๋Š”

  • Working Directory : ์ž‘์—…ํ•  ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ untracked/tracked ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค๋กœ ๋‚˜๋‰˜์–ด์ง
  • Staging Area: ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•  ํŒŒ์ผ๋“ค์ด ์˜ฌ๋ผ์™€์žˆ๋Š” ์˜์—ญ
  • repository : ์ปค๋ฐ‹๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ์˜์—ญ ๋“ฑ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ•ด๋‹น ์‚ฌ์ง„์€ Pro Git์— ๋‚˜์˜ค๋Š” ํŒŒ์ผ์˜ ์ƒํƒœ ๋ณ€ํ™”๋„์ด๋‹ค. ํ•ด๋‹น ์ƒํƒœ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ณด์ž.

์šฐ๋ฆฌ๊ฐ€ ๋งจ ์ฒ˜์Œ์— git init์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ํŒŒ์ผ์„ git add ํ•˜๊ฒŒ ๋˜๋ฉด ์ปค๋ฐ‹ํ•  ํŒŒ์ผ๋“ค์€ Staging area์— ์ถ”๊ฐ€๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํŒŒ์ผ๋“ค์€ ๋ฐ”๋กœ repository๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•ด๋‹น staging Area์— ์˜ฌ๋ผ์™€ ์žˆ๋‹ค๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ git commit์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋น„๋กœ์†Œ repository๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋˜ ์ด commit์„ ํ•ด์„œ repository๋กœ ๊ฐ€๊ธฐ ์ „๊นŒ์ง€์˜ ๊ณผ์ •์—์„œ ๋งจ ์ฒ˜์Œ์—๋Š” unmodified ์ƒํƒœ๋กœ, ์‹ ๊ทœ๋กœ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ•ด๋‹น ์‚ฌ์ง„์—์„œ๋Š” ๋ฐ”๋กœ staged ์ƒํƒœ๋กœ ์งํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜์™€์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด statged ์ƒํƒœ๊ฐ€ Staging Area์— ๋ฐ˜์˜๋œ ์ƒํƒœ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

git add ๋ฅผ ํ•œ ๋’ค๋กœ unmodified ์ƒํƒœ์˜€๋˜ ํŒŒ์ผ๋“ค์€ ๋งŒ์•ฝ์— ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉด Modified ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ add๋ฅผ ํ†ตํ•ด์„œ Staging Area๋กœ ๋‹ค์‹œ๊ธˆ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ Staging Area๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ ๋‹จ์œ„๋กœ๋„ Staging Area์— ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€๋ถ„๋งŒ ์ปค๋ฐ‹ํ•  ๋•Œ๋‚˜ ์ผ๋ถ€์—์„œ ์ผ์–ด๋‚œ ์ถฉ๋Œ์„ ํ•ด์ œํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์ด๋ ‡๊ฒŒ Staging Area์— ์˜ฌ๋ฆฐ ๊ฒƒ๋“ค์€ git commit์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ์ปค๋ฐ‹์— ๋Œ€ํ•ด์„œ Tree Object๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋Ÿฌํ•œ Tree Object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Commit Object๋ฅผ ๋งŒ๋“ค๋ฉฐ, ์ด๋Ÿฌํ•œ ์ปค๋ฐ‹๋“ค์„ index๋ผ๋Š” ํŒŒ์ผ์„ ํ†ตํ•ด ์ปค๋ฐ‹๋“ค์˜ ํ•ด์‹œ๊ฐ’์„ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ€๋Š” ๊ณผ์ •์—์„œ

  • ๊ฐœ์ฒด์˜ ํƒ€์ž…์„ blob์œผ๋กœ ๋งŒ๋“ค๋ฉด์„œ ํ—ค๋”๋ฅผ ๋จผ์ € ๋งŒ๋“ฆ
  • ๊ณต๋ฐฑ ๋ฌธ์ž ํ•˜๋‚˜, ๋‚ด์šฉ์˜ ํฌ๊ธฐ, ๋งˆ์ง€๋ง‰์— ๋„ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€
  • ํ—ค๋”์™€ ์›๋ž˜ ๋‚ด์šฉ์„ ํ•ฉ์ณ์„œ SHA-1 ์ฒดํฌ์„ฌ ๊ณ„์‚ฐ
  • zlib์„ ํ†ตํ•ด ๋‚ด์šฉ ์••์ถ•(zlib-deflate.delfate())
  • ์••์ถ•ํ•œ ๋‚ด์šฉ์„ ๊ฐœ์ฒด๋กœ ์ €์žฅ
    • SHA-1๊ฐ’ ์ค‘์—์„œ ๋งจ ์•ž์— ์žˆ๋Š” ๋‘ ์ž๋ฅผ ๊ฐ€์ ธ๋‹ค ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ
    • ๋‚˜๋จธ์ง€ 38์ž๋ฅผ ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ
    • fileUtils.mkdir๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฐ ๋‹ค์Œ์— ์••์ถ•ํ•œ ๋‚ด์šฉ์„ ์ €์žฅ ์™€ ๊ฐ™์€ ํŒŒ์ผ๋“ค์˜ ์ €์žฅ์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.