출처 : http://egloos.zum.com/embedded21/v/1861857


특정 부분만 다운받기


Android 소스 코드는 여러 git을 하나의 repo로 가져온다.

그런데, 이 git 들중 특정 git만 선별해서 repo sync 하고 싶은 경우가 있다. 
이 때 다음과 같이 수행한다. 



1. selective git acquisition

1) repo init 
repo init -u https://android.googlesource.com/a/platform/manifest

2) frameworks/av git만 가져오기
repo sync platform/frameworks/av -c -j4


2. selective git push

repo upload 대신 git push를 사용하는 방법

> vi .git/config

 [remote "origin"]

        fetch = +refs/heads/*:refs/remotes/origin/*

        url = ssh://localhost:12345/android/vendor/com/apps/AlarmClock.git

        push = HEAD:refs/for/repository_master   <== 추가



------------------------------------------------------------------------------------------------------------------------------------

출처 : http://pinocc.tistory.com/137



새로운 브랜치를 만들 경우에는 다음과 같이 한다.

repo start hoplayer --all


리모트 브랜치(remotes/aosp/lollipop-5.1.1_r6)의 를 checkout 할때는 이렇게 한다.

repo forall -c 'git checkout -b lollipop-5.1.1_r6 remotes/aosp/lollipop-5.1.1_r6'


그리고 그 리모트 브랜치와 diff 를 보고 싶으면 

repo forall -c 'git checkout master' (master 브랜치에서 작업이라면) 이렇게 master로 바꾼다음


repo forall -c 'echo $REPO_PROJECT; git diff lollipop-5.1.1_r6' > git_diff.txt

이렇게  해주면 현재 master 와 diff 뜬것을 저장할 수 있다.


아까 만든 lollipop-5.1.1_r6 브랜치를 삭제할라면 

repo forall -c 'git branch -d lollipop-5.1.1_r6'

이렇게 지운다.



안드로이드는 수많은 git 프로젝트를 묶어서 하나의 프로젝트로 관리하고 있다. 이를 위해서 구글에서 python 기반의 새로운 관리 툴을 하나 선보였는데, 이것이 repo 이다.

repo 를 받고 설치하는 법등은 인터넷을 잘 찾아보면 내용이 있으니, 여기서 다루지는 않겠다. 여기서는 간단하게 여러개의 프로젝트를 하나의 repo 로 관리하는 법을 알아보려고 한다.

참고로 python 을 모르기 때문에 repo 가 어떻게 동작하는지를 분석하지는 않는다. 다만 단순하게 사용하는 입장에서 기술할 것이다.


1. git 프로젝트 등록

git 프로젝트를 등록하는 방법도 인터넷을 검색하면 설명이 잘 된 사이트를 찾을 수 있을 것이다. 간단하게 절차를 기록해보면 다음과 같다.

# mkdir <my_project>

# cd <my_project>

# git init

< add files into my_project >

# git add .

# git commit -a --allow-empty -m "Initial Code Commit"

이 상태로 생성된 git proejct 를 --bare 형태로 복사하고 공개 git 이라는 것을 알려준다.

# cd ..

# git clone --bare <my_project> <my_project>.git

# touch <my_project>.git/git-daemon-export-ok

다음의 명령은 git 을 http 프로토콜을 사용해서 clone 이 가능하도록 제공해주는 것이다.

# cd <my_project>.git

# git --bare update-server-info

# mv hooks/post-update.sample hooks/post-update

# chmod 755 hooks/post-update

==> git clone http://yourserver.com/~you/proj.git 으로 가능함

(물론 이때 웹서버가 사용자별 웹페이지에 접근 할 수 있도록 설정되어 있어야 한다. 그렇지 않다면, 기본 웹서버 위치에 git 프로젝트를 cloning 시켜야 한다)

아래 사이트를 참고하도록 한다.

참고 : 

http://khmirage.tistory.com/309

http://wiki.kldp.org/Translations/html/Git-User-Manual/


2. manifest git 만들기

우선 repo 프로젝트를 만들기 위해서 manifest.xml 이라는 파일을 만들어야 한다. repo 는 manifest.xml 파일을 갖는 git 프로젝트가 있는지를 확인하기 때문이다. 우선 default.xml 파일을 가지는 manifest 라는 프로젝트를 만들도록 한다.

# mkdir manifest

# cd manifest

# git init

# touch default.xml

# git add .

# git commit -a --allow-empty -m "Initial Code Commit"

default.xml 파일 내용은 다음과 같은 형식으로 구성한다. 추가하고 싶은 프로젝트를 <project> 태그 사이에 아래와 같은 형식으로 추가한다. 

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="origin"  : 원격 저장소 이름
           fetch=".."
           review="git://yourserver.com/" /> : 저장소 주소 --> repo upload 에 의해서 review 시스템에 upload 할 gerrit 의 호스트네임 입니다.

  <default revision="master"  : 브랜치명
           remote="origin" />
  <project path="your/path" name="your/path" />

  : path : 로컬에 저장될 path, name: git 저장소 이름
  <project path="your/path2" name="your/path2" />
...

...

</manifest>


3. repo 를 사용하기 전에 git daemon 을 설정해준다. 간단하게 git daemon 명령을 실행해도 되고, 데몬 실행 스크립트에 추가하여 자동으로 실행하게 하도록 해도 된다.

# git daemon --verbose --export-all --base-path=/your/base_path --enable=receive-pack &

--export-all : 이 옵션이 없는 경우 git-daemon-export-ok 파일이 있는 git 프로젝트에 한해서 git 프로토콜을 지원해준다.

--enable=receive-pack : 이 옵션이 없는 경우, 외부에서 push 가 불가능하다.


4. repo init 

위와 같이 manifest git 프로젝트가 만들어지면, repo 를 사용해서 초기화 할 수 있다.

# repo init -u git://yourserver.com/your_manifest_path/manifest

# repo sync

이제 부터 repo 를 사용하 프로젝트 관리가 가능해졌다. 필요한 프로젝트를 manifest 에 추가하면 repo 에서 관리가 가능해진다.

Posted by Real_G