긴 대답 :
당신은 분기 이름을 지정할 수 없습니다 (또는 SHA, 또는 다른 무엇이든) repo
에, 그것은 작동하지 않습니다. 그 이유는 다음과 같습니다.
repo
은 저장소 프로젝트 (실제로 독립적 인 git 임)의 모음을 처리하는 스크립트입니다. 프로젝트 목록은 .repo
git에 있으며 매니페스트 파일을 포함합니다. 기본적으로 모든 저장소 git의 목록이며 분기됩니다. -b
은 repo init
동안 repo
자식에 대해서만 관련이 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="git://address.com/" name="origin"
review="review.address.com"/>
<default remote="origin" revision="ics-something" sync-j="4"/>
<manifest-server url="http://manifests.address.com:8000"/>
<!-- sniff -->
<project name="platform/external/libxml2" path="external/libxml2"
revision="ics-common"/>
<project name="platform/external/zlib" path="external/zlib"
revision="ics-common"/>
<project name="platform/frameworks/base" path="frameworks/base"
revision="ics-something"/>
<project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
revision="ics-common"/>
<!-- sniff -->
</manifest>
따라서, 특정 빌드 저장소의 소스를 얻는 올바른 방법이 매니페스트의 얻을 수 있습니다 : 여기
는 .repo/manifests/default.xml
의 예입니다.
즉, 브랜치 이름 대신에 SHA (또는 실제로 존재하는 경우 태그)를 포함하는 매니페스트.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="git://address.com/" name="origin"
review="review.address.com"/>
<default remote="origin" revision="ics-something" sync-j="4"/>
<manifest-server url="http://manifests.address.com:8000"/>
<!-- sniff -->
<project name="platform/external/libxml2" path="external/libxml2"
revision="refs/tags/android-4.0.4_r1.1"/>
<project name="platform/external/zlib" path="external/zlib"
revision="refs/tags/android-4.0.4_r1.1"/>
<project name="platform/frameworks/base" path="frameworks/base"
revision="ecb41a77411358d385e3fde5b4e98a5f3d9cfdd5"/>
<project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
revision="621bae79f1a250e443eb83d1f473c533bea493dc"/>
<!-- sniff -->
</manifest>
보시다시피가,이 두 매니페스트 사이의 유일한 차이는 저장소 자식의 개정 값입니다 : 빌드가 실행될 때 저장소 내의 모든 자식 프로젝트는 일부 커밋으로 가리 킵니다 이런 식으로, 즉 가장 최신이었다 .
짧은 답변 :
당신은 특정 빌드 manifest_static.xml
를 얻을 필요가있다.
또는, 당신은 단지 몇 가지 프로젝트 자식의가, 다음, .repo
자식에 local_manifest.xml
파일을 생성 자식의 존재 및 저장소의 루트에서 다음 repo sync
누락 추가 할 수없는 경우. local_manifest.xml
에 대한 자세한 내용은 here입니다.
왜 그들은 .repo 대신에'git submodule'을 사용하지 않는 걸까요? 이것으로 만들어진 것 같습니다 ... –
'repo'는 단순한 동기화 이상입니다. gerrit에 업로드를 자동화하고, 분기를 만들고, 목표 git를 모른 채로 변경 사항을 다운로드하는 등의 작업을 수행합니다. 물론 래퍼 스크립트 일뿐입니다. 문자 그대로 모든 것이 베어 키트로 수행 될 수 있습니다. 그러나 구글이'repo'를 만들었으므로, 모든 사람들이 저에게 충실합니다. :) –