=========================================================
11.10.02 수정 사항 - git 관련 정리 파일 수정하여 파일 첨부
=========================================================
Android Source 를 받을 때 repo 를 알게 되었고,
Android Source 를 받을 때만 repo 를 써 봤다.
다른 Source 관리에도 repo 를 쓰면 좋을 것 같은데 어떻게 해야 할까?
아직은 잘 모르겠지만 만약 myrepo_remote 라는 directory 에
repo 형식의 repo server 가 설정되어 있을 것이다.
$ mkdir myrepo_remote
$ cd myrepo_remote
그리고 myrepo_local 이라는 directory 를 만든다.
$ mkdir myrepo_local
위 repo server 에서 source 를 download 하려면
우선 repo 설정을 아래와 같이 할 것이다.
아라? 그런데 뭔가 android server 에서 download 한다.
myrepo_local$ repo init -u ../myrepo_remote/
Getting repo ...
from git://android.git.kernel.org/tools/repo.git
remote: Counting objects: 1309, done.
remote: Compressing objects: 100% (570/570), done.
remote: Total 1309 (delta 843), reused 1148 (delta 716)
Receiving objects: 100% (1309/1309), 357.92 KiB | 141 KiB/s, done.
Resolving deltas: 100% (843/843), done.
From git://android.git.kernel.org/tools/repo
* [new branch] maint -> origin/maint
* [new branch] master -> origin/master
* [new branch] stable -> origin/stable
* [new tag] v1.7.5 -> v1.7.5
From git://android.git.kernel.org/tools/repo
* [new tag] v1.0 -> v1.0
* [new tag] v1.0.1 -> v1.0.1
(생략)
* [new tag] v1.7.4.3 -> v1.7.4.3
Getting manifest ...
from ../myrepo_remote/
fatal: '../myrepo_remote' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
fatal: cannot obtain manifest ../myrepo_remote/
마지막에 myrepo_remote directory 에 repo 설정이 안 되어 있어서 error 가 발생하지만,
.repo directory 가 생성되고, .repo/repo 에도 뭔가 잔뜩 만들어졌다.
myrepo_local$ ls -l .repo/
total 4
drwxr-xr-x 7 jaewon jaewon 4096 2011-08-15 10:51 repo
파일 확장자를 보니 파이썬 스크립트이고,
repo 관련 명령어를 처리해 주는 기능을 하는 것 같다.
그런데 .git directory 가 있는 것을 보니 Git 로 관리하는 것 같다.
myrepo_local$ ls -al .repo/repo/
total 380
drwxr-xr-x 7 jaewon jaewon 4096 2011-08-15 10:51 .
drwxr-xr-x 3 jaewon jaewon 4096 2011-08-15 10:51 ..
-rw-r--r-- 1 jaewon jaewon 3602 2011-08-15 10:51 color.py
-rw-r--r-- 1 jaewon jaewon 5239 2011-08-15 10:51 color.pyc
-rw-r--r-- 1 jaewon jaewon 3426 2011-08-15 10:51 command.py
-rw-r--r-- 1 jaewon jaewon 4625 2011-08-15 10:51 command.pyc
(생략)
drwxr-xr-x 8 jaewon jaewon 4096 2011-08-15 10:51 .git
(생략)
Git 안을 좀 들여다 보자.
local 에 remote/origin/stable 을 upstream 으로 하는 default branch 가 있다.
myrepo_local$ cd .repo/repo/
myrepo_local/.repo/repo$ git branch -avv
* default 30d4529 [origin/stable] Add a --depth option to repo init.
remotes/origin/maint 08c880d Smart tag support
remotes/origin/master e7a3bcb Merge branch 'stable'
remotes/origin/stable 30d4529 Add a --depth option to repo init.
myrepo_local/.repo/repo$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git://android.git.kernel.org/tools/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "default"]
remote = origin
merge = refs/heads/stable
그럼 이런 Git 로 관리하는 repo 관련 파일들을
/usr/bin/repo 실행 한 번으로 모두 받은 것이다.
이쯤에서 궁금해진다.
repo 안에 Git 관련 설정은 어떻게 되어 있을까?
결론부터 얘기해서,
repo script 를 분석해서 Git 관련 부분만 모아보면 아래와 같았다.
참고적으로 mimic_repo_init.sh 라는 파일로 만들어서 테스트할 수 있다.
mkdir -p .repo_test/repo
cd .repo_test/repo
echo 'Getting repo ...'
echo ' from git://android.git.kernel.org/tools/repo.git'
git init --quiet
git config remote.origin.url git://android.git.kernel.org/tools/repo.git
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch origin
git fetch --tags origin
cur=`git describe origin/stable`
#git tag -v $cur
rev="$cur^0"
# current rev is v1.7.5^0
git update-ref refs/heads/default $rev
git config branch.default.remote origin
git config branch.default.merge refs/heads/stable
git symbolic-ref HEAD refs/heads/default
git read-tree --reset -u HEAD
위 과정을 진행하고,
repo init 한 것과 비교해 봤는데
repo init 에서 파이썬 스크립트가 더 있기는 했지만
Git 관련 파일은 거의 같다고 할 수 있었다.
myrepo_local$ repo init -u ../myrepo_remote
myrepo_local$ ./mimic_repo_init.sh
myrepo_local$ diff -qr .repo .repo_testOnly in .repo/repo: color.pyc
Only in .repo/repo: command.pyc
Only in .repo/repo: editor.pyc
Only in .repo/repo: error.pyc
Files .repo/repo/.git/index and .repo_test/repo/.git/index differ
Files .repo/repo/.git/logs/refs/heads/default and .repo_test/repo/.git/logs/refs/heads/default differ
Files .repo/repo/.git/logs/refs/remotes/origin/maint and .repo_test/repo/.git/logs/refs/remotes/origin/maint differ
Files .repo/repo/.git/logs/refs/remotes/origin/master and .repo_test/repo/.git/logs/refs/remotes/origin/master differ
Files .repo/repo/.git/logs/refs/remotes/origin/stable and .repo_test/repo/.git/logs/refs/remotes/origin/stable differ
Only in .repo/repo: git_command.pyc
Only in .repo/repo: git_config.pyc
Only in .repo/repo: git_refs.pyc
(생략)
끝으로 repo 를 다 분석하지는 못 했는데,
위 Git command 를 알아내는데 확인했던 부분 코드를 분석 없이 덧붙인다.
11.10.02 수정 사항 - git 관련 정리 파일 수정하여 파일 첨부
=========================================================
Android Source 를 받을 때 repo 를 알게 되었고,
Android Source 를 받을 때만 repo 를 써 봤다.
다른 Source 관리에도 repo 를 쓰면 좋을 것 같은데 어떻게 해야 할까?
아직은 잘 모르겠지만 만약 myrepo_remote 라는 directory 에
repo 형식의 repo server 가 설정되어 있을 것이다.
$ mkdir myrepo_remote
$ cd myrepo_remote
그리고 myrepo_local 이라는 directory 를 만든다.
$ mkdir myrepo_local
위 repo server 에서 source 를 download 하려면
우선 repo 설정을 아래와 같이 할 것이다.
아라? 그런데 뭔가 android server 에서 download 한다.
myrepo_local$ repo init -u ../myrepo_remote/
Getting repo ...
from git://android.git.kernel.org/tools/repo.git
remote: Counting objects: 1309, done.
remote: Compressing objects: 100% (570/570), done.
remote: Total 1309 (delta 843), reused 1148 (delta 716)
Receiving objects: 100% (1309/1309), 357.92 KiB | 141 KiB/s, done.
Resolving deltas: 100% (843/843), done.
From git://android.git.kernel.org/tools/repo
* [new branch] maint -> origin/maint
* [new branch] master -> origin/master
* [new branch] stable -> origin/stable
* [new tag] v1.7.5 -> v1.7.5
From git://android.git.kernel.org/tools/repo
* [new tag] v1.0 -> v1.0
* [new tag] v1.0.1 -> v1.0.1
(생략)
* [new tag] v1.7.4.3 -> v1.7.4.3
Getting manifest ...
from ../myrepo_remote/
fatal: '../myrepo_remote' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
fatal: cannot obtain manifest ../myrepo_remote/
마지막에 myrepo_remote directory 에 repo 설정이 안 되어 있어서 error 가 발생하지만,
.repo directory 가 생성되고, .repo/repo 에도 뭔가 잔뜩 만들어졌다.
myrepo_local$ ls -l .repo/
total 4
drwxr-xr-x 7 jaewon jaewon 4096 2011-08-15 10:51 repo
파일 확장자를 보니 파이썬 스크립트이고,
repo 관련 명령어를 처리해 주는 기능을 하는 것 같다.
그런데 .git directory 가 있는 것을 보니 Git 로 관리하는 것 같다.
myrepo_local$ ls -al .repo/repo/
total 380
drwxr-xr-x 7 jaewon jaewon 4096 2011-08-15 10:51 .
drwxr-xr-x 3 jaewon jaewon 4096 2011-08-15 10:51 ..
-rw-r--r-- 1 jaewon jaewon 3602 2011-08-15 10:51 color.py
-rw-r--r-- 1 jaewon jaewon 5239 2011-08-15 10:51 color.pyc
-rw-r--r-- 1 jaewon jaewon 3426 2011-08-15 10:51 command.py
-rw-r--r-- 1 jaewon jaewon 4625 2011-08-15 10:51 command.pyc
(생략)
drwxr-xr-x 8 jaewon jaewon 4096 2011-08-15 10:51 .git
(생략)
Git 안을 좀 들여다 보자.
local 에 remote/origin/stable 을 upstream 으로 하는 default branch 가 있다.
myrepo_local$ cd .repo/repo/
myrepo_local/.repo/repo$ git branch -avv
* default 30d4529 [origin/stable] Add a --depth option to repo init.
remotes/origin/maint 08c880d Smart tag support
remotes/origin/master e7a3bcb Merge branch 'stable'
remotes/origin/stable 30d4529 Add a --depth option to repo init.
myrepo_local/.repo/repo$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git://android.git.kernel.org/tools/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "default"]
remote = origin
merge = refs/heads/stable
그럼 이런 Git 로 관리하는 repo 관련 파일들을
/usr/bin/repo 실행 한 번으로 모두 받은 것이다.
이쯤에서 궁금해진다.
repo 안에 Git 관련 설정은 어떻게 되어 있을까?
결론부터 얘기해서,
repo script 를 분석해서 Git 관련 부분만 모아보면 아래와 같았다.
참고적으로 mimic_repo_init.sh 라는 파일로 만들어서 테스트할 수 있다.
mkdir -p .repo_test/repo
cd .repo_test/repo
echo 'Getting repo ...'
echo ' from git://android.git.kernel.org/tools/repo.git'
git init --quiet
git config remote.origin.url git://android.git.kernel.org/tools/repo.git
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch origin
git fetch --tags origin
cur=`git describe origin/stable`
#git tag -v $cur
rev="$cur^0"
# current rev is v1.7.5^0
git update-ref refs/heads/default $rev
git config branch.default.remote origin
git config branch.default.merge refs/heads/stable
git symbolic-ref HEAD refs/heads/default
git read-tree --reset -u HEAD
위 과정을 진행하고,
repo init 한 것과 비교해 봤는데
repo init 에서 파이썬 스크립트가 더 있기는 했지만
Git 관련 파일은 거의 같다고 할 수 있었다.
myrepo_local$ repo init -u ../myrepo_remote
myrepo_local$ ./mimic_repo_init.sh
myrepo_local$ diff -qr .repo .repo_testOnly in .repo/repo: color.pyc
Only in .repo/repo: command.pyc
Only in .repo/repo: editor.pyc
Only in .repo/repo: error.pyc
Files .repo/repo/.git/index and .repo_test/repo/.git/index differ
Files .repo/repo/.git/logs/refs/heads/default and .repo_test/repo/.git/logs/refs/heads/default differ
Files .repo/repo/.git/logs/refs/remotes/origin/maint and .repo_test/repo/.git/logs/refs/remotes/origin/maint differ
Files .repo/repo/.git/logs/refs/remotes/origin/master and .repo_test/repo/.git/logs/refs/remotes/origin/master differ
Files .repo/repo/.git/logs/refs/remotes/origin/stable and .repo_test/repo/.git/logs/refs/remotes/origin/stable differ
Only in .repo/repo: git_command.pyc
Only in .repo/repo: git_config.pyc
Only in .repo/repo: git_refs.pyc
(생략)
끝으로 repo 를 다 분석하지는 못 했는데,
위 Git command 를 알아내는데 확인했던 부분 코드를 분석 없이 덧붙인다.
'Android' 카테고리의 다른 글
android/platform/system/core: libion: ion.c (0) | 2017.07.09 |
---|---|
how to setup my android repo based source tree (0) | 2011.10.11 |
android repo init 문제 - 임시 repo (0) | 2011.09.24 |
Repo Internal - manifest.git 구조 (0) | 2011.08.14 |
android framework source download (0) | 2011.03.01 |