모노레포란?

- 둘 이상의 논리적 프로젝트(예: iOS 클라이언트와 웹 애플리케이션)가 포함된 리포지토리.
- 이러한 프로젝트는 관련이 없거나, 느슨하게 연결되어 있거나, 다른 수단으로(예: 종속성 관리 도구를 통해) 연결할 수 있음.
- 리포지토리는 여러 면에서 큽니다.
- 커밋의 수
- 브랜치 및/또는 태그의 수
- 추적된 파일의 수
- 추적되는 콘텐츠의 크기(리포지토리의 .git 디렉터리를 보고 측정)
Git sparse checkout
모노레포로 구성된 git 레포지토리 전체를 clone 하면 너무 비효율적입니다.
git에서는 일부만 가져와서 사용할 수 있게 기능을 제공합니다. 매우 효율적으로 로드할 수 있습니다.
단 git 버전 2.25이상만 가능합니다.
clone
파일 없이 클론 합니다. 파일 없이 깃 히스토리만 가져옵니다.
git clone --filter=blob:none --no-checkout <GITHUB_URL>
spare init
sparse checkout 기능을 활성화합니다.
git sparse-checkout init
sparse set
어떤 디렉터리를 가져올 지 정합니다.
server/scheduler는 server디렉터리 내부의 scheduler디렉터리를 가져옵니다.
client/android도 마찬가지입니다.
git sparse-checkout set server/scheduler client/android
그럼 아래와 같이 구성됩니다.
.
├── .git/ <-- (Hidden folder where the actual Git data is stored)
└── client/
| └── android/
| ├── (Android project files and folders...)
| └── ...
└── server/
└── scheduler/
├── (Scheduler-related files and folders...)
└── ...
set 은 불러오는게 아니라 어떤 것을 불러올 지 정합니다. 실제로 불러오는 동작은 checkout에서 하게됩니다.
checkout
실제로 위에서 지정한 디렉터리를 다운로드하고 세팅합니다.
git checkout master



