๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Git

[Git] Git ํŠน์ • ํด๋” ํด๋ก ํ•˜๊ธฐ - Git 2.25 ์ด์ƒ: git sparse-checkout set์ด์šฉ (๊ณต์‹ ์ตœ์‹  ๋ฐฉ์‹)

by clolee 2025. 4. 10.

๐Ÿ“‹ Git 2.25 ์ด์ƒ: git sparse-checkout set์œผ๋กœ ํŠน์ • ํด๋”๋งŒ ํด๋ก ํ•˜๊ธฐ (๊ณต์‹ ์ตœ์‹  ๋ฐฉ์‹)

โœ… Git 2.25๋ถ€ํ„ฐ ๋„์ž…๋œ sparse-checkout set ๋ช…๋ น์–ด๋Š” ๋” ์ด์ƒ .git/info/sparse-checkout์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ ,
๊ฐ„ํŽธํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ํŠน์ • ํด๋”๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ cone ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ ‰ํ† ๋ฆฌ ๋‹จ์œ„๋กœ ๋งค์šฐ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ชฉ์ 

  • ์ „์ฒด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ 
  • ํ•„์š”ํ•œ ํด๋”๋งŒ ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œ

๐Ÿ›  ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ๋‹จ๊ณ„ (2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํƒ1)

โœ… ๋ฐฉ๋ฒ• 1: git clone ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ํŒŒ์ผ ์ œ์™ธํ•˜๊ณ  ๊ตฌ์กฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

git clone --filter=blob:none --no-checkout <์›๊ฒฉ_์ €์žฅ์†Œ_URL>
cd <ํด๋ก ํ•œ_ํด๋”>

์˜ˆ์‹œ

git clone --filter=blob:none --no-checkout https://github.com/username/repository.git
cd repository
  • --filter=blob:none: ์‹ค์ œ ํŒŒ์ผ(blob)์€ ๋ฐ›์ง€ ์•Š๊ณ  ๊ตฌ์กฐ๋งŒ ๊ฐ€์ ธ์˜ด
  • --no-checkout: ์ฒดํฌ์•„์›ƒ์„ ์ƒ๋žตํ•˜์—ฌ sparse-checkout ์„ค์ • ์ „์— ํŒŒ์ผ ์ƒ์„ฑ ๋ง‰์Œ

โœ… ๋ฐฉ๋ฒ• 2: git init + remote add ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

mkdir repository && cd repository
git init
git remote add origin https://github.com/username/repository.git
git fetch origin
  • ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ ์ดˆ๊ธฐํ™” ํ›„ ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ
  • fetch๋กœ ๋ธŒ๋žœ์น˜/์ปค๋ฐ‹ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ด
  • ์‹ค์ œ ํŒŒ์ผ์€ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์Œ

๐Ÿ›  ์ดํ›„ ๋‹จ๊ณ„ (๊ณตํ†ต)

๐Ÿ”น 1๋‹จ๊ณ„: sparse-checkout ํ™œ์„ฑํ™”

git sparse-checkout init --cone

--cone:

  • ํด๋” ๊ธฐ๋ฐ˜ ๋””๋ ‰ํ† ๋ฆฌ ๋ชจ๋“œ ํ™œ์„ฑํ™”
  • Git 2.25 ์ดํ›„ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ ๋‹จ์œ„ sparse-checkout ๋ชจ๋“œ
  • glob ํŒจํ„ด๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ณ  ์ง๊ด€์ 

๐Ÿ”น 2๋‹จ๊ณ„: ๊ฐ€์ ธ์˜ฌ ํด๋” ์ง€์ •

git sparse-checkout set ํด๋”๊ฒฝ๋กœ1 ํด๋”๊ฒฝ๋กœ2 ...
git sparse-checkout set src/main/java docs
  • ๋ณต์ˆ˜ ํด๋”๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ง€์ •

๐Ÿ”น 3๋‹จ๊ณ„: ์›ํ•˜๋Š” ๋ธŒ๋žœ์น˜ checkout

git checkout main
  • ๋กœ์ปฌ์— ์ง€์ •๋œ ํด๋”๋งŒ selectiveํ•˜๊ฒŒ ๋‹ค์šด๋กœ๋“œ

๐Ÿ“‚ ์˜ˆ์‹œ ํŠธ๋ฆฌ ๊ตฌ์กฐ

repository/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ main/
โ”‚       โ””โ”€โ”€ java/
โ”œโ”€โ”€ docs/

โœ… ์ง€์ •ํ•œ ํด๋”๋งŒ ๋กœ์ปฌ์— ์กด์žฌํ•˜๋ฉฐ, ์ „์ฒด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์œ ์ง€๋จ


๐Ÿง  ์™œ git checkout๋งŒ ํ•ด๋„ ํŒŒ์ผ์ด ๋ฐ›์•„์ง€๋‚˜์š”?

  • git fetch๋กœ ๋ธŒ๋žœ์น˜ ์ •๋ณด(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)๋งŒ ๊ฐ€์ ธ์™”๊ณ ,
  • git sparse-checkout set ์œผ๋กœ "์–ด๋–ค ํด๋”๋ฅผ ๋ฐ›์„์ง€" ๋ช…์‹œํ•ด๋’€๊ธฐ ๋•Œ๋ฌธ์—
  • git checkout main ํ•  ๋•Œ sparse-checkout ์„ค์ •์„ ๋ฐ˜์˜ํ•˜์—ฌ Git์ด ํ•„์š”ํ•œ ํด๋”์˜ blob(์‹ค์ œ ํŒŒ์ผ)๋งŒ selective ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

โœ… ๊ทธ๋ž˜์„œ pull ์—†์ด checkout๋งŒ ํ•ด๋„ ํ•„์š”ํ•œ ํด๋”๋งŒ ๋‚ด๋ ค์˜ต๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ช…๋ น์–ด ์š”์•ฝ

๋ช…๋ น์–ด ์„ค๋ช…
git sparse-checkout init --cone sparse-checkout ๋ชจ๋“œ ํ™œ์„ฑํ™”
git sparse-checkout set ๊ฐ€์ ธ์˜ฌ ํด๋” ์ง€์ •
git checkout ๋ธŒ๋žœ์น˜๋ช… ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ (sparse ๊ทœ์น™ ๋ฐ˜์˜)
git sparse-checkout list ํ˜„์žฌ sparse ์„ค์ •๋œ ํด๋” ๋ชฉ๋ก ํ™•์ธ
git sparse-checkout disable sparse ๋ชจ๋“œ ํ•ด์ œ, ์ „์ฒด ํŒŒ์ผ ๋ณต๊ตฌ(๋‹ค์‹œ ์ฒดํฌ์•„์›ƒ)

โœ… ํ•œ ์ค„ ์š”์•ฝ

Git 2.25 ์ด์ƒ์—์„œ๋Š” sparse-checkout set์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํด๋”๋งŒ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!


โœจ ์ •๋ฆฌ ํ๋ฆ„ ์‹œ๊ฐํ™”

1. (์ดˆ๊ธฐ ์—ฐ๊ฒฐ)
   - clone --filter=blob:none --no-checkout
   - ๋˜๋Š”
   - init → remote add → fetch

2. sparse-checkout init --cone

3. sparse-checkout set <ํด๋”1> <ํด๋”2>

4. checkout main

๐Ÿง  ์ด ๊ตฌ์กฐ๋กœ ํ•˜๋ฉด ์ข‹์€ ์ 

ํ•ญ๋ชฉ ์žฅ์ 
์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์œ ์—ฐ์„ฑ clone ๋ฐฉ์‹/remote ๋ฐฉ์‹ ๋ชจ๋‘ ์ง€์›
๊ด€๋ฆฌ ๊ฐ„ํŽธ์„ฑ set ๋ช…๋ น์–ด๋กœ ํด๋” ๋ชฉ๋ก ์ˆ˜์ • ๊ฐ€๋Šฅ
์ตœ์‹  Git ํ‘œ์ค€ .git/info/sparse-checkout ํŒŒ์ผ ์ง์ ‘ ์ˆ˜์ • ๋ถˆํ•„์š”

์ด๋ฏธ sparse-checkout ์„ค์ •์„ ์™„๋ฃŒํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ

โœ… ํ˜„์žฌ sparse-checkout ์ƒํƒœ ํ™•์ธ

git sparse-checkout list
  • ํ˜„์žฌ ์„ค์ •๋œ ํด๋” ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

โœ… 1. ํด๋” ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

git sparse-checkout set --append <์ƒˆํด๋”๊ฒฝ๋กœ>

์˜ˆ์‹œ:

git sparse-checkout set --append java-workspace/example
  • ๊ธฐ์กด ์„ค์ •๋œ ํด๋”๋Š” ์œ ์ง€ํ•œ ์ฑ„, ์ƒˆ ํด๋”๋งŒ ์ถ”๊ฐ€๋จ

โœ… 2. ํด๋” ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ (๋ฎ์–ด์“ฐ๊ธฐ)

git sparse-checkout set <์ƒˆํด๋”1> <์ƒˆํด๋”2>

์˜ˆ์‹œ:

git sparse-checkout set java-workspace/assignment
  • ์ด์ „์— ์„ค์ •๋œ ํด๋”๋Š” ์‚ฌ๋ผ์ง€๊ณ , ์ง€์ •ํ•œ ํด๋”๋งŒ sparse ์ฒดํฌ์•„์›ƒ๋จ

โœ… 3. sparse-checkout ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ „์ฒด ๋‹ค ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ

git sparse-checkout disable
  • sparse ์„ค์ •์„ ํ•ด์ œํ•˜๊ณ , ์ „์ฒด ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

โœ… ์ถ”๊ฐ€: .git/info/sparse-checkout ์ง์ ‘ ํŽธ์ง‘๋„ ๊ฐ€๋Šฅ

vi .git/info/sparse-checkout
  • Git 2.25 ์ด์ƒ์—์„œ๋Š” ์ด ํŒŒ์ผ ์ˆ˜๋™ ์ˆ˜์ •์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์ง€๋งŒ,
    ์ˆ˜์ • ํ›„ git checkout main ๋“ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ˜์˜์€ ๋ฉ๋‹ˆ๋‹ค.

โœ… ์‹ค๋ฌด ํŒ

๋ชฉ์  ๋ช…๋ น์–ด
ํด๋” ์ถ”๊ฐ€ git sparse-checkout set --append ํด๋”๊ฒฝ๋กœ
ํด๋” ๋ณ€๊ฒฝ git sparse-checkout set ํด๋”๊ฒฝ๋กœ๋“ค
์„ค์ • ํ™•์ธ git sparse-checkout list
ํ•ด์ œ git sparse-checkout disable

๋Œ“๊ธ€