long, long time ago ...

필자가 안드로이드 플랫폼과 토발즈 형님의 Git에 한참 빠져있을 때 알게된 repo라는 희한한(?) 도구 !!


안드로이드 플랫폼이 여러개의 repo로 구성되어 공개되다보니,

한 번에 내려받기에 불편함이 많았고, 그래서 google 님께서 만들어 배포한 repo라는 도구.



여러 개의 repository로 구성된 프로젝트를 위해서 git 에서는 submodule이라는 기능을 지원해주고 있다.

최근에 많이 좋아졌다고는 하는데... 개인적으로 안좋아한다. 너무 어렵고 햇갈려서..... ㅠㅠ


그렇다고 해서 repo가 사용하기에 엄청 쉬운 것은 아니지만

그래도 개인적으로는 다수의 repository를 관리하는 용도로는 괜찮은 도구라고 생각된다.


아래 참고자료를 바탕으로 한 번 정리해보겠다.


▷ 소스코드 URL : https://gerrit.googlesource.com/git-repo/

▷ 가 이 드  URL : https://source.android.com/setup/develop/repo

▷ 설치방법 URL : https://source.android.com/setup/build/downloading#installing-repo


매뉴얼과는 조금 진행 방식에서 차이가 날 수는 있다.

필자 회사 사정상.... curl 등을 통한 외부와의 연결(?)이 수월하지 않기에...

별도의 온라인(?) 없이 편하게 사용할 수 있는 방향으로.... ^^



이하 내용은 Ubuntu 14.04 64bit 환경에서 테스트 되었습니다.



1. Precondition


    ① git

        - 당연하게도 git은 미리 설치가 되어있어야 한다.


$ sudo apt-get install git



    ② bundle

        - repo에서는 git 기능 中 bundle이라는 것을 사용한다. 일단, 이런게 있다라는 것만 알아두면 된다

        - 참고 : https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Bundle



    ③ proxy

        - proxy를 사용하는 network 상황이라고 하면, 다음과 같이 설정이 되어 있어야 한다


export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>

export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>



2. Install


    ▷ repo를 설치하는 경로는 각자 알아서 하면 되지만, 필자의 경우 개인적인 취향으로 "/srv/install/repo/" 경로로 잡았다.

    ▷ 아래 두가지 방법 中 개인적인 취향에 따라 선택하면 된다.


    (방법1) curl

        - 일반적으로 알려진 방법으로써 대부분 이렇게 가이드 되고 있다.

        - curl을 이용해서 다운로드 받은 후, 실행권한 주고, 경로에 추가해서 어디서나 실행할 수 있도록 하는 방법이다.


$ cd /srv/install/repo/

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ./repo

$ chmod a+x ./repo

$ export PATH=/srv/install/repo:$PATH


    (방법2) git clone

        - 그냥 repo 프로젝트를 그대로 다운로드 받아서 사용하는 방법이다.

        - repo 업그레이드 같은 것을 할 때 유리할지도... ?!


$ cd /srv/install/

$ git clone https://gerrit.googlesource.com/git-repo

$ cd ./git-repo

$ git checkout -b stable origin/stable

$ export PATH=/srv/install/git-repo:$PATH



3. manifest


    ▷ 여러 repository들에 대한 정보를 관리하기 위한 파일이 바로 manifest 파일이다.

    ▷ 필요한 정보를 저장하는 방법을 알아보자.


    □ sample

        - repo의 가장 표본이 되는 android 에서 사용되는 manifest 파일의 일부를 아래와 같이 뽑아보았다.


<?xml version="1.0" encoding="UTF-8"?>

<manifest>

    <remote  name="aosp"  fetch=".."   review="https://android-review.googlesource.com/" />

    <default revision="master"   remote="aosp"   sync-j="4" />

    <project path="build/make" name="platform/build" groups="pdk" >

      <copyfile src="core/root.mk" dest="Makefile" />

      <linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />

    </project>

    <project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" />

</manifest>


    ① <remote />

        - 가장 중요한 기본적인 프로젝트 정보를 적는 곳이다.

            . name : remote 별칭

            . fetch : repository들을 받아올 server 정보

            . review : review를 요청할 server 정보


    ② <default />

        - 뒤에 나올 project에서 사용될 기본 설정값을 적는 곳이다.

            . revision : default branch name

            . remote : default remote name

            . sync-j : repository 정보를 내려받을 때, 동시에 몇 개씩 할 것인지...


    ③ <project />

        - 개별 repository에 관련된 정보를 적는 곳이다.

            . name : server 에서 repository 경로

            . path : local에 실제 저장될 경로

            . group : repository들을 묶음으로 관리하기 위한 별칭

            . revision : sync 한 뒤에 HEAD가 될 commit id


    ④ <copyfile />

        - 파일 복사가 필요한 경우에 사용할 수 있다.

            . src : 복사할 원본 파일 경로

            . dest : 복사될 타켓 파일 경로


    ⑤ <linkfile />

        - 링크 파일 생성이 필요한 경우에 사용할 수 있다.

            . src : 링크될 원본 파일 경로

            . dest : 타겟 링크 파일 경로



4. how to #1


    ▷ 모든 명령어(옵션?)를 공부한다는 것은 말도 안되는 것이고... 몇 가지 시나리오를 가지고 따라해봐야 할텐데 ... 일단 한 번 


    □ precondition

        - git을 사용하기 위한 사용자 정보 입력과 작업 공간(directory)를 만들고 시작하자 (기본 경로는 필자 개인 취향이다)


$ cd /srv/workspace

$ mkdir ./whatwant

$ cd ./whatwant


$ git config --global user.name "whatwant"

$ git config --global user.email "whatwant@gmail.com"


    ① init

        - 작업 공간(directory)을 작업하기 위한 상태로 만드는 과정이다


$ repo init -u https://github.com/whatwant-school/manifest --no-clone-bundle


        - 뒤의 "--no-clone-bundle" 옵션을 빼도 실행에는 지장이 없지만, 에러 메시지 보기 싫어서 넣었다.

        - 'repo init'을 실행하게 되면, git-repo repository를 clone 받게 되는데...

          회사에서는 이 부분을 좀 수정해야할 수도 있을 것 같다. 나중에 하게 되면 그 때 다시 포스팅을~^^


    ② sync

        - 실제 사용할 repository를 가져오는 과정이다


$ repo sync --no-clone-bundle


        - 자꾸 "--no-clone-bundle" 옵션을 넣는 것도 귀찮으니... 회사에서는 이 부분도 기본값을 수정하면 편할 것 같다는 느낌이...




이번 포스팅은 여기까지만 ... 뒷 부분 이야기는 필요에 따라서 ... ^^


반응형

+ Recent posts