๐ 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 |
๋๊ธ