git checkout
은 보통 브랜치의 모든 구조를 가져온다. checkout 은 다음 링크 설명을 보고 이해해 보자,
Sparse checkout 은 checkout 전체 대상중 일부 만을 checkout 할 수 있다.
git sparse checkout
기능은 Git 2.25.0 이상부터 사용이 가능하다.
Sparse checkout 이해
git 블로그 글 Bring your monorepo down to size with sparse-checkout 의 그림 설명을 빌려오자.
다음 원격 레포지토리가 있다고 가정하자
전체 디렉토리 중에서 client/android 부분만 checkout 을 하고 싶다.
다음 같이 클론을 하고 sparse-checkout 을 초기화 한 후에 대상인 client/android 디렉토리를 sparse-checkout 하면 해당 디렉토리만 다운로드한다.
1 2 3 4
| git clone https://github.com/tensorflow/examples.git cd examples git sparse-checkout init --cone git sparse-checkout set client/android
|
sparse-checkout 을 수행하면 해당 디렉토리 컨텐츠만 남게 된다.
사용 방법
사용시 몇가지 사례가 있다.
방법1
첫번째 방법으로 git 레포지토리를 pull로 clone 한 후에 sparse-checkout 대상 파일/폴더를 지정하고 sparse-checkout 을 수행한다.
1
| git clone https://github.com/tensorflow/examples.git
|
spase-checkout 을 수행하기 위해서 초기화 하고 대상이 되는 파일/폴더를 지정한다.
1 2 3 4
| cd examples git config core.sparseCheckout true git sparse-checkout set lite/examples/object_detection/android_play_services git pull origin master
|
희소 체크아웃을 사용하도록 git 인스턴스를 구성하면 지정한 파일/폴더만 남게 된다.
저장소에서 config core.sparseCheckout true
대신 git sparse-checkout init --cone
를 이용해도 된다.
방법2
레포지토리를 클론하지 않고 클라이언트에서 초기화 후 sparse-checkout 으로 대상 디렉토리를 지정한 후에 pull 을 수행한다.
원격 레포지토리를 지정한다.
1 2 3 4
| mkdir <repo> cd <repo> git init git remote add -f origin <url>
|
spase-checkout 을 수행하기 위해서 초기화 하고 대상이 되는 파일/폴더를 set 으로 지정한다. 여러 파일/디렉토리를 추가할 수 있다.
1 2
| git config core.sparseCheckout true git sparse-checkout set lite/examples/object_detection/android
|
pull 을 수행한다.
1 2 3 4
| git pull origin master From https://github.com/tensorflow/examples * branch master -> FETCH_HEAD Updating files: 100% (61/61), done.
|
저장소에서 config core.sparseCheckout true
대신 git sparse-checkout init --cone
를 이용해도 된다.
방법3
방법2와 동일하지만 설정 파일을 통해서 수행하는 점만 다르다.
1 2 3 4
| mkdir <repo> cd <repo> git init git remote add -f origin <url>
|
원격 레포지토리를 지정하고 git 설정에 추가한다.
1
| git config core.sparseCheckout true
|
checkout 하려는 파일과 폴더를 sparse-checkout 파일에 추가한다. 여러 파일/디렉토리를 추가할 수 있다.
1 2
| echo "lite/examples/object_detection/android" >> .git/info/sparse-checkout echo "lite/examples/bert_qa/android" >> .git/info/sparse-checkout
|
pull 을 수행한다.
함께 보면 유용한 git 명령
간단하게 빌드/테스트 를 하기위해 저장소의 특정 폴더만 clone 할 때 Swallow Clone
을 함께 이용해도 좋을 것 이다.
[git] Swallow clone
- 참고