Repo는 여러 저장소에 걸친 작업을 단순화하여 Git를 보완합니다. Repo 및 Git 간 관계에 관한 설명은 소스 제어 도구를 참고하세요. Repo에 관한 자세한 내용은 Repo 리드미를 참고하세요.
Repo는 다음 형식을 취합니다.
repo command options
선택적 요소는 대괄호 [] 안에 표시됩니다. 예를 들어, 많은 명령어가 project-list를 인수로 취합니다. 다음과 같이 project-list를 프로젝트의 이름 목록 또는 로컬 소스 디렉터리 경로 목록으로 지정할 수 있습니다.
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
도움말
repo help
repo
명령어에 관한 도움말을 제공합니다. 명령어를 옵션으로 지정하는 특정 Repo 명령어에 관한 자세한 정보를 확인할 수 있습니다.
repo help command
예를 들어 다음 명령어는 init
명령어의 옵션에 관한 설명과 목록을 생성합니다.
repo help init
또는 명령어의 사용 가능한 옵션 목록만 보려면 다음을 실행하세요.
repo command --help
예:
repo init --help
init
repo init -u url [options]
현재 디렉터리에 Repo를 설치합니다. 이 명령어는 Repo 소스 코드 및 표준 Android 매니페스트 파일의 Git 저장소가 포함된 .repo/
디렉터리를 생성합니다.
옵션:
-u
: 매니페스트 저장소를 가져올 URL을 지정합니다. 공통 매니페스트는https://android.googlesource.com/platform/manifest
에서 찾을 수 있습니다.-m
: 저장소에서 매니페스트 파일을 선택합니다. 매니페스트 이름을 선택하지 않으면 기본값은default.xml
입니다.-b
: 버전, 즉 특정 manifest-branch를 지정합니다.
sync
repo sync [project-list]
새로운 변경사항을 다운로드하고 로컬 환경의 작업 파일을 업데이트하여 본질적으로 전체 Git 저장소에 걸쳐 git fetch
를 실행합니다. 인수 없이 repo sync
를 실행하면 모든 프로젝트의 파일을 동기화합니다.
repo sync
를 실행하면 다음과 같은 결과가 발생합니다.
프로젝트가 동기화된 적이 없다면
repo sync
는git clone
과 같습니다. 원격 저장소의 모든 브랜치가 로컬 프로젝트 디렉터리에 복사됩니다.이전에 프로젝트가 동기화된 적이 있다면
repo sync
는 다음과 같습니다.git remote update git rebase origin/branch
여기서 branch는 로컬 프로젝트 디렉터리에서 현재 확인된 브랜치입니다. 로컬 브랜치에서 원격 저장소의 브랜치를 추적하지 않고 있다면 프로젝트의 동기화는 발생하지 않습니다.
repo sync
를 성공적으로 실행한 후에는 지정된 프로젝트의 코드가 최신 버전이며 원격 저장소에 있는 코드와 동기화됩니다.
키 옵션:
-c
: 서버에서 현재 매니페스트 브랜치만 가져옵니다.-d
: 지정된 프로젝트를 매니페스트 버전으로 다시 전환합니다. 이 옵션은 프로젝트가 주제 브랜치에 있지만 매니페스트 버전은 일시적으로 필요한 경우 유용합니다.-f
: 프로젝트가 동기화에 실패한 경우에도 다른 프로젝트의 동기화를 진행합니다.threadcount
: 동기화를 여러 스레드로 분할하여 완료 시간을 단축합니다. 시스템에 부담이 되지 않도록 다른 작업을 위한 어느 정도의 CPU를 남겨 놓으세요. 사용 가능한 CPU 수를 보려면 먼저nproc --all
을 실행합니다.-q
: 상태 메시지를 표시하지 않고 조용히 실행됩니다.-s
: 현재 매니페스트의manifest-server
요소에 지정된 대로 양호하다고 알려진 빌드로 동기화합니다.
더 많은 옵션을 보려면 repo help sync
를 실행하세요.
upload
repo upload [project-list]
검토 서버에 변경사항을 업로드합니다. 지정된 프로젝트의 경우 Repo는 로컬 브랜치를 최근의 Repo 동기화 도중에 업데이트된 원격 브랜치와 비교합니다. Repo는 검토를 위해 업로드되지 않은 하나 이상의 브랜치를 선택하도록 요청합니다.
그러면 선택한 브랜치의 모든 커밋이 HTTPS 연결을 통해 Gerrit로 전송됩니다. HTTPS 비밀번호를 구성하여 업로드 승인을 사용 설정해야 합니다. HTTPS를 통해 사용할 새로운 사용자 이름/비밀번호 쌍을 생성하려면 비밀번호 생성기로 이동하세요.
Gerrit는 자체 서버를 통해 객체 데이터를 수신한 후 검토자가 특정 커밋에 관한 의견을 제시할 수 있도록 각 커밋에 변경사항을 적용합니다.
여러 개의 체크포인트 커밋을 하나의 커밋으로 결합하려면 업로드를 실행하기 전에 git rebase -i
를 사용합니다.
인수 없이 repo upload
를 실행하면 모든 프로젝트에서 업로드할 변경사항을 검색합니다.
업로드된 변경사항을 수정하려면 git rebase -i
또는 git commit --amend
와 같은 도구를 사용하여 로컬 커밋을 업데이트합니다. 수정이 완료된 후에는 다음을 실행합니다.
- 업데이트된 브랜치가 현재 확인된 브랜치인지 확인합니다.
repo upload --replace PROJECT
를 사용하여 변경사항 일치 편집기를 엽니다.시리즈의 각 커밋에 대해 괄호 안에 Gerrit 변경 ID를 입력합니다.
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacements # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
업로드가 완료되면 변경사항에 추가 경로 집합이 생깁니다.
현재 확인된 Git 브랜치만 업로드하려면 --current-branch
플래그(또는 단축형으로 --cbr
)를 사용합니다.
diff
repo diff [project-list]
git diff
를 사용하여 커밋과 작업 트리 간의 적용되지 않은 변경사항을 표시합니다.
download
repo download target change
검토 시스템에서 지정된 변경사항을 다운로드하여 프로젝트의 로컬 작업 디렉터리에서 사용할 수 있게 합니다.
예를 들어 platform/build
디렉터리에 변경사항 23823을 다운로드하려면 다음을 실행합니다.
repo download platform/build 23823
repo sync
를 실행하면 repo download
로 가져온 모든 커밋이 삭제됩니다. 또는 git checkout m/main
을 사용하여 원격 브랜치를 확인할 수 있습니다.
forall
repo forall [project-list] -c command
각 프로젝트에서 주어진 셸 명령어를 실행합니다. repo forall
에서 사용할 수 있는 추가 환경 변수는 다음과 같습니다.
REPO_PROJECT
는 프로젝트의 고유 이름으로 설정됩니다.REPO_PATH
는 클라이언트 루트의 상대 경로입니다.REPO_REMOTE
는 매니페스트의 원격 시스템 이름입니다.REPO_LREV
는 매니페스트의 버전 이름이며, 로컬 추적 브랜치로 해석됩니다. 이 변수는 매니페스트 버전을 로컬에서 실행되는 Git 명령어로 전달해야 할 때에 사용합니다.REPO_RREV
는 매니페스트의 버전 이름이며, 매니페스트에 작성된 형식과 동일합니다.
옵션:
-c
: 실행할 명령어 및 인수입니다. 명령어는/bin/sh
를 통해 평가되며 이후의 모든 인수는 셸 위치 매개변수를 통해 전달됩니다.-p
: 지정된 명령어의 출력 앞에 프로젝트 헤더를 표시합니다. 이는 명령어의 stdin, stdout, sterr 스트림에 파이프를 결합하고 단일 페이지 세션에 표시된 연속 스트림으로 모든 출력을 파이핑하여 실행됩니다.-v
: 명령어가 stderr에 기록한 메시지를 표시합니다.
prune
repo prune [project-list]
이미 병합된 주제를 프루닝(삭제)합니다.
start
repo start branch-name [project-list]
매니페스트에 지정된 버전에서 시작되는 새로운 개발 브랜치를 시작합니다.
BRANCH_NAME
인수는 프로젝트에 적용하려는 변경사항에 관한 간단한 설명을 제공합니다. 잘 모른다면 default
라는 이름을 사용해보세요.
project-list
인수는 이 주제 브랜치에 참여하는 프로젝트를 지정합니다.
status
repo status [project-list]
작업 트리를 준비 영역(색인), 그리고 지정된 각 프로젝트의 이 브랜치(HEAD)에 관한 가장 최근의 커밋과 비교합니다. 이러한 세 개의 상태 간에 차이점이 있는 각 파일의 요약 줄을 표시합니다.
현재 브랜치의 상태만 보려면 repo status .
를 실행하세요. 상태 정보가 프로젝트별로 나열됩니다. 프로젝트의 각 파일에 두 자리 코드가 사용됩니다.
첫 번째 열의 대문자는 준비 영역이 마지막으로 커밋된 상태와 어떻게 다른지 나타냅니다.
글자 | 의미 | 설명 |
---|---|---|
- | 변경사항 없음 | HEAD 및 색인에서 동일 |
A | 추가됨 | HEAD에 없음, 색인에 있음 |
M | 수정됨 | HEAD에 있음, 색인에서 수정됨 |
D | 삭제됨 | HEAD에 있음, 색인에 없음 |
R | 이름이 변경됨 | HEAD에 없음, 색인에서 경로가 변경됨 |
C | 복사됨 | HEAD에 없음, 색인의 다른 항목에서 복사됨 |
T | 모드 변경됨 | HEAD 및 색인의 동일한 콘텐츠, 모드 변경됨 |
U | 병합 취소됨 | HEAD 및 색인 간 충돌, 해결 필요 |
두 번째 열의 소문자는 작업 디렉터리가 색인과 어떻게 다른지 나타냅니다.
글자 | 의미 | 설명 |
---|---|---|
- | 신규/알 수 없음 | 색인에 없음, 작업 트리에 있음 |
m | 수정됨 | 색인에 있음, 작업 트리에 있음, 수정됨 |
d | 삭제됨 | 색인에 있음, 작업 트리에 없음 |
저장소 오류 처리
git commit -a # Commit local changes first so they aren't lost. repo start branch-name # Start the branch git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start repo upload .
세션 시작 시점에 명령어 repo start
가 실행되지 않은 경우 repo: error: no branches ready for upload
오류가 표시됩니다. 복구하려면 커밋 ID를 확인하고 새 브랜치를 시작한 다음 병합하면 됩니다.