2012-05-30 3 views
4

Nexus S 휴대 전화 (Samsung Crespo) 용 Cyanogenmod 9 (Android ICS) 시스템을 구축하고 있습니다.특정 커밋을 다시 시작합니다.

repo init -u git://github.com/CyanogenMod/android.git -b ics 

를 최신 매니페스트 내가 할 몇 가지 장치/삼성/프로젝트 (특히 https://github.com/CyanogenMod/android_device_samsung_crespo)를 포함하지 않는, ICS의 커밋에 REPO가 inits : 문제는 내가 할 경우이다.

어떻게 특정 커밋으로 초기화합니까? 내 경우에는 google android-4.0.3_r1 분기를 사용하여 마지막 커밋을 원합니다. 이 하나입니다 :

내가 할 경우

의 repo 초기화 -u 자식 : //github.com/CyanogenMod/android.git -b 커밋 해시

작동하지 않습니다. repo init -b는 분기의 HEAD 만 지원합니다.

미리 감사드립니다.

답변

5

긴 대답 :

당신은 분기 이름을 지정할 수 없습니다 (또는 SHA, 또는 다른 무엇이든) repo에, 그것은 작동하지 않습니다. 그 이유는 다음과 같습니다.

repo은 저장소 프로젝트 (실제로 독립적 인 git 임)의 모음을 처리하는 스크립트입니다. 프로젝트 목록은 .repo git에 있으며 매니페스트 파일을 포함합니다. 기본적으로 모든 저장소 git의 목록이며 분기됩니다. -brepo 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입니다.

+0

왜 그들은 .repo 대신에'git submodule'을 사용하지 않는 걸까요? 이것으로 만들어진 것 같습니다 ... –

+1

'repo'는 단순한 동기화 이상입니다. gerrit에 업로드를 자동화하고, 분기를 만들고, 목표 git를 모른 채로 변경 사항을 다운로드하는 등의 작업을 수행합니다. 물론 래퍼 스크립트 일뿐입니다. 문자 그대로 모든 것이 베어 키트로 수행 될 수 있습니다. 그러나 구글이'repo'를 만들었으므로, 모든 사람들이 저에게 충실합니다. :) –

3

알아 냈습니다. 매니페스트 파일 (예 : version.xml)에 태그가있는 경우 내가 의견을 제출 할 수있는 충분한 권한이없는

repo init -u <addres> -b refs/tags/<tagname> -m version.xml 
1

,하지만 난 그냥 안드레이 Cainikovs의 답변을 명확히하고 싶었 다음과 같은 명령을 사용하여 특정 태그에 초기화를 REPO 수 있습니다.

Repo 은 -b 옵션의 인수로 분기 참조 외에 커밋 ID SHA을 허용합니다.

대답에서 알 수 있듯이이 인수는 매니페스트가 언급하는 프로젝트의 개정판이 아니라 repo에서 사용해야하는 매니페스트의 개정판을 지정합니다.

관련 문제