Repo는 안드로이드 오픈소스 프로젝트(Android Open Source Project, AOSP)에서 주로 사용하는 도구로, 여러 개의 Git 리포지토리를 관리하기 위해 설계되었다. Git은 강력한 버전 관리 시스템이지만, 대규모 프로젝트에서 여러 개의 리포지토리를 다루는 데는 불편함이 있을 수 있다. Repo는 이를 해결하기 위해 만들어졌으며, 여러 Git 리포지토리를 한꺼번에 클론하고 업데이트하며 동기화하는 기능을 제공한다.
Repo의 주요 기능
1. 여러 Git 리포지토리 관리: 여러 리포지토리를 쉽게 클론하고 업데이트할 수 있다.
2. 명령어 자동화: 여러 리포지토리에 걸친 변경 사항을 동기화하거나 상태를 확인할 수 있는 명령어를 제공한다.
3. 메타데이터 관리: 각 리포지토리의 의존성, 버전 정보 등 프로젝트의 전반적인 메타데이터를 쉽게 관리할 수 있다.
4. 다중 브랜치 관리: 브랜치 간 이동, 병합 등을 쉽게 처리할 수 있다.
Repo는 주로 AOSP와 같이 수백 개의 리포지토리를 사용하는 대규모 프로젝트에서 유용하며, 빌드 시스템과의 통합도 원활하게 지원된다. 안드로이드 뿐만이 아니라 여러개의 메타 레이어를 관리하는데도 repo를 사용하기도 한다.
Repo를 사용하는 데 있어 manifest 파일은 매우 중요한 역할을 한다. 이 파일은 Repo가 여러 Git 리포지토리를 관리할 수 있도록 프로젝트 구조, 의존성, 브랜치 정보 등을 정의한 XML 형식의 파일이다. Manifest 파일은 프로젝트의 모든 리포지토리가 어디에 위치하는지, 각각 어떤 브랜치를 사용할지 등을 설명하며, Repo는 이 파일을 기반으로 리포지토리를 적절하게 클론하고 동기화한다.
manifest 파일 예시
<manifest> <remote name="origin" fetch="https://example.com/git/" /> <default remote="origin" revision="main" /> <project name="project1" path="src/project1" /> <project name="project2" path="src/project2" revision="develop" /> <project name="project3" path="src/project3"> <annotation name="module" value="core" /> </project> </manifest> |
이 예시는:
- project1과 project2를 각각 다른 경로와 브랜치로 클론하고,
- project3에는 추가적인 설명을 달아 관리하는 방식이다.
Manifest 파일을 통해 Repo는 여러 리포지토리를 일관되게 설정하고 관리할 수 있게 되어, 복잡한 프로젝트도 체계적으로 동기화하고 업데이트할 수 있다.
repo manifest 명령어
Repo에서 manifest 명령어는 Repo가 사용하는 manifest 파일에 관련된 작업을 처리하는 명령어이다. 이 명령어는 로컬 manifest 파일을 검사하거나 수정할 때 유용하며, Repo의 동작 방식을 사용자 정의하는 데 중요한 역할을 한다.
1. repo manifest -r
- 설명: 현재 작업 중인 manifest 파일의 상태를 보여준다. 기본적으로는 원본 manifest 파일을 기준으로 로컬에서 수정된 부분이 있는지를 확인할 수 있다.
- 용도: 현재 프로젝트가 사용하는 manifest 파일이 원본과 비교해 어떻게 수정되었는지 확인할 때 유용하다.
2. repo manifest -o [파일명]
- 설명: 현재 프로젝트에서 사용 중인 manifest 파일을 지정한 경로로 출력한다.
- 용도: manifest 파일의 백업을 만들거나 수정된 상태를 다른 경로에 저장하고자 할 때 사용한다.
더 많은 옵션들이 있는데 여기서 이야기하고 싶은 옵션은 -r 과 -o 옵션을 조합해 현재 모든 저장소의 git hash 값을 가지고 와서 manfest xml을 만드는 것이다. 즉 다음과 같은 명령를 사용한다.
$ repo manifest -r -o test-manifest.xml |
default.xml 파일에 revision을 branch이름으로 적을 때가 많은데, 이 명령어 조합으로 실제 릴리스할 때 코드의 hash 값을 revision에 넣음으로써 reproducible 하도록 manifest xml 파일을 만들어 낼 수 있다.
'Development' 카테고리의 다른 글
리더십 (leadership) 교육 (0) | 2024.09.12 |
---|---|
Cloud 비용을 줄이기 위한 Hackathon 아이디어 (0) | 2024.08.02 |
QNX 유용한 명령어 (Command) (0) | 2024.07.27 |
빌드 성능 개선 (최적화) (0) | 2024.07.25 |
SEA:ME Symposium 2024 이벤트 후기 (0) | 2024.06.19 |