프로젝트의 크기가 너무 크거나, 다른 사람들과 git을 사용해 스터디를 할 때 특정 폴더만 pull, push하고 싶을 때가 있습니다.
그러려면 일단 저장소의 폴더 구조를 알아야합니다. 폴더 구조가 아래와 같을 때 내 폴더, 또는 내 폴더 안의 특정 폴더만 pull하는 방법을 설명하겠습니다.
project 폴더
|-- 팀원1 폴더
|-- 팀원2 폴더
|-- 팀원3 폴더
|-- 내폴더
|-- web폴더
|-- algorithm폴더
빈 저장소 생성
새 폴더나 기존 폴더에 git init
으로 git 저장소를 만듭니다.
sparseCheckout 활성화
git config core.sparseCheckout true
해당 폴더에 sparseCheckout 옵션을 활성화 합니다.
Sparse checkout은 저장소의 특정 폴더나 파일만 보이도록 하는 기능입니다.
저장소 연결
git remote add -f origin <remote url>
현재 폴더에 가져올 저장소를 연결합니다. remote url
에 저장소 주소를 입력합니다.
checkout하고 싶은 파일이나 폴더를 선택
내폴더의 web폴더만 가져오고 싶다면 다음과 같이 입력합니다.echo "내폴더/web폴더" >> .git/info/sparse-checkout
내폴더 전체를 가져오고 싶다면 아래와 같이 입력합니다.echo "내폴더" >> .git/info/sparse-checkout
pull하기
git pull origin master
이제 pull을하면 checkout한 폴더 및 파일만 가져올 수 있습니다.
push 하기
작업을 한 뒤 commit과 push를 하면 원격저장소에 반영됩니다.git add "-~~-~~-"
git commit -m "~~~~"
git push origin master
pull이 안될 때
Already up to date라고 뜨며 아무것도 가져오지 않는 경우가 있습니다.
그럴 때는 다음과 같이 해결합니다.git fetch --all
로 원격저장소를 전부 fetch합니다.git reset --hard origin/master
해당 브랜치로 --hard옵션을 주어 강제로 reset합니다.
이렇게 하면 master에서 origin/master로 강제 리셋할 수 있습니다.
단, 이 방법을 사용할 때 로컬에만 있는 코드는 날아갈 수 있으니 주의해야 합니다.