Google repo 직접 구축하기 + git 기본 개념

|

안쓰던거 쓰려니 머리에 쥐가 날 것 같다.


repo라는걸 안드로이스 풀소스 다운받을때나 썼지 뭔지도 모르던 상태에서 구축하려니 아주 구글링을 샅샅이.....




일단,

repo라는건 구글에서 python으로 작성된 git wrapper 이다.


여러개의 git 프로젝트를 하나로 묶어 관리할 수 있도록 한 녀석이다.



그러면, git은 svn과 뭐가 다를까

svn은 로컬 작업본을 commit 하면 바로 서버의 저장소로 저장된다.


하지만 git은 저장소가 두개가 있다.

로컬 저장소와 서버(리모트) 저장소.


작업본을 add(추가) 하고 commit 까지 해도 서버에는- 즉, 다른 사람은 아직 받아보지 못한다.

로컬 저장소에 commit 한 내용은 리모트에 push를 해야 다른 사람들이 받아볼 수 있게 된다.


svn을 사용할때에는 보통 매일매일 커밋하면 그것이 모두 서버로 반영이 된다.

git의 경우에는 로컬에 매일매일 커밋을 하더라도 push해야 서버로 반영이 되는 것이다.


물론 다른사람이 서버에 반영한 내용은 pull 명령으로 로컬에 땡겨올 수 있다.



새로운 기능을 위해 로컬에서 branch를 따고, 작업을 하다 아니다 싶으면 그냥 로컬 브랜치만 날리면 다른사람은 모른채 작업이 가능하다는것.




그렇담 본론으로 들어가서,

repo를 구축하는 과정이다.


repo는 git 프로젝트를 묶어주는 역할이므로 git 저장소는 미리 만들어져 있어야 한다.


repo 실행 바이너리는 안드로이드 소스 설치 페이지에 설명되어 있다. 링크

현재 주소는 http://commondatastorage.googleapis.com/git-repo-downloads/repo


curl 등으로 다운받아 파일로 저장해서 실행권한을 주고 적당한 path에 위치시키며 끝.



repo 정보를 담고있는 manifest 파일을 만들 차례.


repo init 시 이 manifest 정보를 기초로 프로젝트 목록을 받아오게 된다.

manifest는 http(s), ssh, git 등으로 지정이 가능한데, 이번의 경우엔 git 으로 설정.


# mkdir manifest
# cd manifest
# git init
# touch default.xml
# git add .
# git commit -a --allow-empty -m "Initial commit"


default.xml은 manifest라는 root node를 가지고, 그 아래 remote, default, project 노드를 갖는다.

remote는 원격 저장소를 지정하는데, 이 경우 현재 컴퓨터가 저장소이므로 fetch 속성이 .. 이 된다.

default는 기본 브랜치와 저장소를 설정한다.

실제 git 정보는 project 노드가 갖게 되는데, 동일한 레벨에서 여러개의 노드를 갖을 수 있다.

project의 속성은 path와 name이 있는데, path는 git으로부터 받아온 파일들이 위치할 로컬 루트,

name은 git 저장소의 이름이 된다.


한가지 알아둘 점은 name에 지정하는 주소에는 .git 이 안붙어있지만

실제로 파일을 내려받는 작업시 repo에서 자동적으로 .git 을 붙여 접속하기 때문에

실제 git 저장소는 .git 이름을 갖고 있어야 한다는 것.


자세한 설명은 https://git-repo.googlecode.com/git-history/v1.6.8.2/docs/manifest-format.txt 에서 볼 수 있고,

안드로이드 풀소스를 받아본 후 .repo/manifest.xml 파일을 들여다보면 이해가 빠를듯 하다.




repo나 git 사용시 주소에 git://~ 으로 시작하는 주소를 사용하려면 git daemon 을 시작해 주어야 한다.


명령줄에서의 실행은


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


으로 하면 된다.

verbose는 현재 콘솔에 로그 출력

export-all 은 전체 프로젝트에 대해 git:// 프로토콜 지원. 이 옵션을 넣지 않으면 git 프로젝트 루트에 git-daemon-export-ok 파일이 있는 프로젝트만 git:// 으로 접근 가능.

base-path는 말 그대로 git:// 의 루트 path이고,

enable=receive-pack 은 git:// 주소를 통해 git push 명령을 지원한다는 옵션이다. 이 옵션이 없으면 git:// 주소를 통해 git push 명령을 내리면 permission denied 가 발생한다.



git daemon이 기본적으로 시작되는 데몬이 아니므로, 우분투에서 git daemon을 자동시작하는 방법은

http://www.codeography.com/2010/03/15/running-git-daemon-on-ubuntu.html 를 참고





참고

http://pinocc.tistory.com/137

http://crazia.tistory.com/992


And