2015년 10월 12일 월요일

안드로이드 repo 특정 날짜로 돌려서 빌드하기

급하게 아래 안드로이드 project를 build 해야 할 일이 생겼다.

https://github.com/voodik/android/tree/cm-12.1_5422

오래전에 받아 놓은 소스를 repo sync 후 빌드 하니 역시나 컴파일 에러가 난다.

git log를 보면 계속 작업을 진행하였지만 release한 버전에 tag가 없다. 그래서 원하는 버전으로 돌리기가 어렵다.

아래 포럼에 보면 마지막 7월 7일이 마지막 버전이다.
http://forum.odroid.com/viewtopic.php?f=94&t=9316

googling 하여 보니 git rev-list를 통해 특정 날짜로 돌릴 수 있다. 그래서 아래와 같이 모든 프로젝트를 7월 7일로 돌렸다.

우선 manifest를 7월 7일로 돌린다.
$ cd .repo/manifsets/
$ git rev-list -n 1 --before="2015-07-07 24:00:00" default | xargs -i git reset --hard {}

돌린 default.xml을 복사하여 둔다/
$ cp default.xml ../default_0707.xml

다시 마지막으로 원복시킨다.
$ git reset --hard origin/cm-12.1_5422

그리고 7월 7일 내용을 하나의 commit으로 올린다.
$ mv ../default_0707.xml default.xml
$ git add default.xml
$ git commit
$ repo sync

위와 같이 하지 않으면 repo sync시 다시 최신 소스로 돌아가 버린다.

마지막으로 모든 프로젝트도 동일하게 7월 7일로 reset 한다.

$ repo forall -c 'git rev-list -n 1 --before="2015-07-07 24:00:00" cm-12.1_5422 | xargs -i git reset --hard {}'

빌드를 진행한다.

댓글 1개:

sonhc :

안녕하세요. blog tip 보고 굼금한게 있어서 문의 드립니다.

제가 aosp master 브랜치를 2019-01-05 날짜로 repo sync를 하고 싶습니다.
그러면 아래와 같은 순서로 진행하면 master를 2019-01-05로 만들수 있을까요?
안드로이드 개발 경험이 없어서 원하는 날짜의 원본 소스를 확보하지 못하고 있어서...
조언 부탁드립니다.

< step 1 > 최신 master 브랜치 소스 확보
$ repo init -u https://android.googlesource.com/platform/manifest -b master
$ repo sync -j4

< step 2 >
$ cd .repo/manifsets/
$ git rev-list -n 1 --before="2019-01-05 24:00:00" default | xargs -i git reset --hard {}

< step 3 >
$ cp default.xml ../default_20190105.xml

< step 4 >
질문1. master인 경우 origin/cm-12.1_5422를 어떻게 입력해야 하나요? 그냥 비워 놓으면 될까요?
$ git reset --hard ???

< step 5 >
$ mv ../default_20190105.xml default.xml
$ git add default.xml
$ git commit
$ repo sync

< step 6 >
질문2. 현재 cd .repo/manifsets/ 디렉토리에서 실행하는 건가요? 아니면 소스 root 인 cd ../.. 한 후에 repo forcall 해줘야 하나요?
질문3. master인 경우 cm-12.1_5422를 어떻게 입력해야 하나요? 그냥 비워 놓으면 될까요?
$ repo forall -c 'git rev-list -n 1 --before="2019-01-05 24:00:00" ??? | xargs -i git reset --hard {}'

어렵지 않으시면 3가지 질문과 master 소스인 경우 ??? 를 어떻게 해야할지 조언 부탁드립니다.