1. Create / update local mirror :
#!/bin/bash
MIRROR_DIR=/android-mirror
SVR=https://source.android.com
cd $MIRROR_DIR
for p in `ssh $SVR gerrit ls-projects`
do
if [ -d "$p.git" ]; then
echo Update ... "$p.git"
# update existing git db
git --git-dir "$p.git" remote prune origin
git --git-dir "$p.git" fetch
else
mkdir -p `dirname "$p"`
echo Mirror ... ${p}.git
# fist time init
git clone --mirror "ssh://$SVR/$p.git" "$p.git"
fi
done
2. Repo from local mirror :
repo init -u /android-mirror/mainfest -b xxx-branch -m xxx-mainfest --reference /android-mirror
repo sync
Pro :
1. Sync data locally, so faster.
2. Local mirror can offline move to other place, able to work from home.
3. Share .git data with local mirror, save space.
Con :
1. Not sure if git push working or not.
Showing posts with label repo. Show all posts
Showing posts with label repo. Show all posts
Sunday, May 25, 2014
Tuesday, February 07, 2012
在一個對網路不友善的環境中
在一個對網路不友善的環境中....(略)
repo 預設會啟動4個 sync thread, 對於我小小的3G連外頻寬是個吃重的負荷, 可以用 -j 指定要用幾個 thread 抓 :
repo sync -j 1
repo 預設會啟動4個 sync thread, 對於我小小的3G連外頻寬是個吃重的負荷, 可以用 -j 指定要用幾個 thread 抓 :
repo sync -j 1
Wednesday, December 07, 2011
repo -b
repo 是 google 在 Android Open Source Project 導入的原始碼管理工具, 用來同步許多 git repository 的動作, 同時也協助 source code review server 溝通。
用 repo 來開始抓遠端的 source code 時, 必須先指定 URL 及想抓取的分支, 如以下的指令就是抓出 AOSP 上 tag 為 android-4.0.1_r1 的版本 :
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
在下 repo sync 之前, 可以先看看抓下來的 manifest.xml 檔案 :
$ cat .repo/manifest.xml | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>
<remote name="aosp" <="" p="">
fetch=".." />
<default <="" p="" revision="refs/tags/android-4.0.1_r1">
remote="aosp"
sync-j="4" />
很明顯, 剛剛所下的分支版號就紀錄於此, 此時我們再下一次 init, 改抓另個分支 :
$ repo init -b android-2.3.7_r1
.repo/manifests/: manifest switched android-4.0.1_r1...android-2.3.7_r1
.repo/manifests/: discarding 10 commits removed from upstream
再看一次 manifest.xml :
$ cat .repo/manifest.xml | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>
<remote name="aosp" <="" p="">
fetch=".." />
<default <="" p="" revision="refs/tags/android-2.3.7_r1">
remote="aosp"
sync-j="4" />
的確紀錄的版本改變了, manifest.xml 上面所紀錄的分支名稱, 會用來當執行 repo sync 時, 把各個 git repository 照這分支抓下來。
$ repo sync bionic
Downloading bionic: 100% (3MB/3MB), done.
...
Unpacking objects: 100% (61/61), done.
From https://android.googlesource.com/platform/bionic
...
Fetching projects: 100% (1/1), done.
$ cd bionic/
$ git branch -a
* (no branch)
...
remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1
此時抓下來的分支, 就是後面改設的 android-2.3.7_r1, 這時試著改切回 4.0.1_r1 的分支
$ repo init -b android-4.0.1_r1
.repo/manifests/: manifest switched android-2.3.7_r1...android-4.0.1_r1
.repo/manifests/: discarding 1 commits removed from upstream
$ repo sync bionic
Fetching projects: 100% (1/1), done.
$ cd bionic/
$ git branch -a
* (no branch)
...
remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1
remotes/m/android-4.0.1_r1 -> refs/tags/android-4.0.1_r1
可以看到有兩個跟遠端的依從關係, 理論上這裡紀錄了 local repository 跟 remote repository 分支版本的關係, 這裡的資訊會來 commit 檔案到遠端的時候, 選擇正確的 branch, 不過這裡我尚無法實驗釐清。
當我們單獨 git clone 一個 project 時, -b 亦會產生相同的效果
用 repo 來開始抓遠端的 source code 時, 必須先指定 URL 及想抓取的分支, 如以下的指令就是抓出 AOSP 上 tag 為 android-4.0.1_r1 的版本 :
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
在下 repo sync 之前, 可以先看看抓下來的 manifest.xml 檔案 :
$ cat .repo/manifest.xml | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>
<remote name="aosp" <="" p="">
fetch=".." />
<default <="" p="" revision="refs/tags/android-4.0.1_r1">
remote="aosp"
sync-j="4" />
很明顯, 剛剛所下的分支版號就紀錄於此, 此時我們再下一次 init, 改抓另個分支 :
$ repo init -b android-2.3.7_r1
.repo/manifests/: manifest switched android-4.0.1_r1...android-2.3.7_r1
.repo/manifests/: discarding 10 commits removed from upstream
再看一次 manifest.xml :
$ cat .repo/manifest.xml | head -9
<!--?xml version="1.0" encoding="UTF-8"?-->
<manifest>
<remote name="aosp" <="" p="">
fetch=".." />
<default <="" p="" revision="refs/tags/android-2.3.7_r1">
remote="aosp"
sync-j="4" />
的確紀錄的版本改變了, manifest.xml 上面所紀錄的分支名稱, 會用來當執行 repo sync 時, 把各個 git repository 照這分支抓下來。
$ repo sync bionic
Downloading bionic: 100% (3MB/3MB), done.
...
Unpacking objects: 100% (61/61), done.
From https://android.googlesource.com/platform/bionic
...
Fetching projects: 100% (1/1), done.
$ cd bionic/
$ git branch -a
* (no branch)
...
remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1
此時抓下來的分支, 就是後面改設的 android-2.3.7_r1, 這時試著改切回 4.0.1_r1 的分支
$ repo init -b android-4.0.1_r1
.repo/manifests/: manifest switched android-2.3.7_r1...android-4.0.1_r1
.repo/manifests/: discarding 1 commits removed from upstream
$ repo sync bionic
Fetching projects: 100% (1/1), done.
$ cd bionic/
$ git branch -a
* (no branch)
...
remotes/m/android-2.3.7_r1 -> refs/tags/android-2.3.7_r1
remotes/m/android-4.0.1_r1 -> refs/tags/android-4.0.1_r1
可以看到有兩個跟遠端的依從關係, 理論上這裡紀錄了 local repository 跟 remote repository 分支版本的關係, 這裡的資訊會來 commit 檔案到遠端的時候, 選擇正確的 branch, 不過這裡我尚無法實驗釐清。
當我們單獨 git clone 一個 project 時, -b 亦會產生相同的效果
Subscribe to:
Posts (Atom)