우연히 SNS에서 부분적으로 다운로드 하는 기능이 있었는데, github token을 요구하다보니 꼭 저렇게 해야하나 싶기도 하고,
찾아보니 부분적으로 가져올 수 있을 것 같아 공유드립니다.
Introduction - GitZip
Light Download just for those few dirs/files you need instead of whole project. Multiple Choose more than one dirs/files. Intuitive Just check items and click download button.
gitzip.org
여기서는 예시로 요즘 핫한 a2a 예시 코드가 있는 https://github.com/google/A2A 에서 가져오는 걸로 하겠습니다.
해당 저장소에는 다양한 샘플 코드가 존재하지만, 전체 저장소를 클론하지 않고 특정 폴더만 부분적으로 다운로드하고 싶은 경우가 많죠.
예를 들어, samples/python/, samples/js/ 폴더만 받고 싶을 때 어떻게 할까요?
기술 git sparse-checkout
설명
Git의 sparse-checkout 기능을 활용하면, 필요한 폴더만 체크아웃할 수 있습니다.
sparse-checkout은 Git의 기능 중 하나로,
"저장소의 특정 디렉토리나 파일만 로컬로 체크아웃"
할 수 있게 해주는 방식입니다.
즉, 전체 저장소를 클론하지 않고도, 필요한 부분만 가져와서 디스크 용량을 절약하고, 클론 속도도 개선할 수 있습니다.
언제 쓰면 유용할까?
상황 | sparse-checkout이 유용한 이유 |
저장소 용량이 수 GB 이상인 경우 | 전체를 받지 않고 필요한 부분만 받아 작업 가능 |
폴더별로 기능이 나뉜 모노레포(Monorepo) 구조 | 예: packages/app1/, packages/app2/ |
특정 샘플 코드 또는 언어별 구현만 실습하고 싶은 경우 | 예: Google A2A 저장소에서 samples/python/만 받고 싶은 경우 |
흐름 요약
GitHub 저장소 (전체 파일들)
↓
sparse-checkout 설정
↓
.git/info/sparse-checkout → 선택 경로만 명시
↓
git pull or checkout
↓
로컬에 필요한 폴더만 생성됨
GitHub에서 원하는 폴더만 다운로드하기 (A2A 예제 기반 실습)
시작 전에: 입력값 설명 (INPUT 값 정의)
아래의 스크립트는 Git 저장소에서 원하는 폴더만 선택적으로 다운로드할 수 있도록 도와줍니다. 사용자가 설정해야 할 입력값은 다음과 같습니다:
변수명 | 설명 |
REPO_URL | 클론하고 싶은 GitHub 저장소 주소입니다. 예: https://github.com/google/A2A.git |
BRANCH | 가져올 브랜치 이름입니다. 대부분은 main 또는 master |
DEST_DIR | 다운로드된 파일을 저장할 로컬 디렉토리 이름입니다 |
FOLDERS | 받아오고 싶은 폴더 경로 목록입니다. 여러 개 지정할 수 있으며, 공백 또는 배열로 구분 |
✅ 위 값만 바꾸면 어떤 저장소든 원하는 폴더만 똑똑하게 다운로드할 수 있습니다.
Windows
코드 (sparse_download.bat)
@echo off
chcp 65001 >nul
SETLOCAL ENABLEDELAYEDEXPANSION
:: ===== 사용자 설정 =====
SET "REPO_URL=https://github.com/google/A2A.git"
SET "BRANCH=main"
SET "DEST_DIR=Python"
SET "FOLDERS=samples/python/ samples/js/"
:: ========================
IF EXIST "%DEST_DIR%" (
echo [Info] 기존 "%DEST_DIR%" 폴더를 삭제합니다...
rmdir /s /q "%DEST_DIR%"
)
mkdir "%DEST_DIR%"
cd "%DEST_DIR%"
git init
git remote add origin %REPO_URL%
git config core.sparseCheckout true
(for %%F in (%FOLDERS%) do (
echo %%F
)) > .git\info\sparse-checkout
git pull origin %BRANCH%
echo.
echo ✅ 다운로드 완료: %FOLDERS%
ENDLOCAL
pause
실행 방법
sparse_download.bat
Linux/macOS
코드
#!/bin/bash
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
# ===== 사용자 설정 =====
REPO_URL="https://github.com/google/A2A.git"
BRANCH="main"
DEST_DIR="Python"
FOLDERS=("samples/python/" "samples/js/")
# ========================
if [ -d "$DEST_DIR" ]; then
echo "[Info] 기존 $DEST_DIR 폴더를 삭제합니다..."
rm -rf "$DEST_DIR"
fi
mkdir -p "$DEST_DIR"
cd "$DEST_DIR" || { echo "[Error] 디렉토리 이동 실패"; exit 1; }
git init
git remote add origin "$REPO_URL"
git config core.sparseCheckout true
> .git/info/sparse-checkout
for folder in "${FOLDERS[@]}"; do
echo "$folder" >> .git/info/sparse-checkout
done
git pull origin "$BRANCH" || { echo "[Error] git pull 실패"; exit 1; }
echo
echo "✅ 다운로드 완료: ${FOLDERS[*]}"
실행 방법
chmod +x sparse_download.sh
./sparse_download.sh
링크
'꿀팁 분석 환경 설정 > Linux' 카테고리의 다른 글
Linux,Mac) Python Script 돌릴 때 core 수 제한하는 방법 (0) | 2023.03.31 |
---|---|
Python) SQLite 는 여러 명의 사용자가 사용할 수 있는 지? (0) | 2022.11.06 |
Linux) GLIBCXX_3.4.26 not found 에러 해결하기(100%는 아님) (4) | 2022.03.19 |
git 에러) remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. ... The requested URL returned error (0) | 2021.12.02 |
Ubuntu) GPU 확인 방법 (0) | 2021.07.31 |