repo sync 및 repo init 명령어 option 설명 (repo manifest 포함)
repo init 이나 sync 명령어 모두 help 를 보면 자세한 사용 방법을 알 수 있습니다.
하지만 영어로 되어 있어 잘 안보게 되죠? ^^
repo 명령어 중 실제 개발에서 사용되는 옵션은 세개 정도 입니다.
init, sync, manifest
먼저 repo init 명령어 사용법 및 option
repo init -g default,-flo,-device -u ssh://manifest.server.name/manifest -b manifestBranchName -m ManifestFile.name
g : group 의 sync 여부 - 를 붙이면 sync 하지 않음
u : manifest file 이 저장 되어 있는 server 및 protocol
b : manifest file 을 받아올 branch
m : manifest file name
repo sync 사용법 및 option
repo sync -c -j4
c : 현재 manifest에 설정된 branch 의 소스만을 sync함
j : job number (너도나도 빨리 소스를 받겠다고 j 옵션의 숫자를 너무 크게하면 서버에 무리가 갑니다.)
repo manifest 사용법 및 option
repo manifest -o outfilename.xml -r
과 같은 명령으로 만들 수 있습니다.
-r : 현재 HEAD를 revision 으로 저장
-o : 저장될 file name
--suppress-upstream-revision
: upstream 이 저장되지 않도록 설정
repo 명령어를 download 받는 방법은
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
로 다운받고 실행 속성을 설정하면 됩니다.
sync 를 하다보면 어떤 방법으로 sync 가 되는지 궁금하게 됩니다. 그 비밀은 manifest file 에 있습니다.
보통 manifest file 은 아래와 같은 형식으로 구성 되어 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="ssh://server.name.com" name="umg" review="server.name.com:8080"/>
<default remote="umg" revision="platform/android/main"/>
<project groups="aosp,device,flo" name="a/aosp/device/asus/deb" path="device/asus/deb" revision="bbe44d...e3"/>
<project groups="aosp,device,flo" name="a/aosp/device/asus/flo" path="device/asus/flo" revision="42adc...03e16"/>
<project groups="aosp,device,flo" name="a/aosp/device/asus/flo-kernel" path="device/asus/flo-kernel" revision="97f...296dce"/>
<project groups="aosp,device,grouper" name="a/aosp/device/asus/grouper" path="device/asus/grouper" revision="0bec...a53b6a"/>
<project groups="aosp,device,grouper" name="a/aosp/device/asus/tilapia" path="device/asus/tilapia" revision="2553c...cdc"/>
<project groups="aosp,pdk" name="a/aosp/platform/build" path="build" revision="f678...2db1">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
....
</manifest>
여기서 중요한 것은 fetch remote revision groups name path 입니다. 다 중요하네요. ^^
<remote fetch="ssh://server.name.com" name="umg" review="server.name.com:8080"/>
fetch : source를 받아올 server 및 protocol(ssh, git등)
name : repository name
review : gerrit review site
<default remote="umg" revision="platform/android/main"/> : 아래에서 사용될 각 project 의 기본 설정값
remote : default repository name
revision : default branch name. 아래 project 에서 revision 이 없다면 해당 branch 의 최신 commit 이 HEAD가 됨
<project groups="aosp,device,flo" name="a/aosp/device/asus/deb" path="device/asus/deb" revision="bbe44d3c88ca8484befb8446d090f7d069f9e7e3"/>
groups : repo init 명령에서 -g 옵션으로 해당 project 의 sync 여부를 결정 할 수 있음
name : git repository 의 저장 위치
path : 실제 source에서 저장될 위치
revision : sync 후 HEAD가 될 commit id
copyfile : sync 후 file copy
dest : copy될 위치 및 file name
src : copy할 file name 및 위치
이상 repo sync 및 repo init 명령어 option 설명 (repo manifest 포함) 에 대한 글 이였습니다.
gerrit 에서 REST 를 사용할 경우 인증 문제 해결 방법 (0) | 2014.07.26 |
---|---|
git merge 시 conflict 최대한 줄이는 방법 git merge -s recursive -X theirs mergeTarget (0) | 2014.02.27 |
repo sync 시 platform/external/bluetooth/bluedroid update-ref: fatal: cdeccf6fdd8c2d494ea2867cb37a025bf8879baf^0: not a valid SHA1 error 처리 방법 (0) | 2013.02.06 |
git rebase 와 git merge 의 차이점과 각각 사용하는 경우 (1) | 2013.01.13 |
git reset 명령어와 옵션 (0) | 2013.01.12 |