repo+manifests+git方式管理安卓代碼


repo+manifests+git方式管理安卓代碼

1.repo的獲取

repo只是google用Python腳本寫的調用git的一個腳本,主要是用來下載、管理Android項目的軟件倉庫。(也就是說,他是用來管理git所管理的一個個倉庫),可以簡化android開發中git的使用。

先從谷歌那里獲取源,下面腳本是一個樣例腳本,將獲取的repo和谷歌mirror源下的

源代碼

#!/bin/bash
BIN=/root/bin
REPO=$BIN/repo ANDROID_HOME=/home/androidmirror   if [ ! -d $BIN ]; then     mkdir -p $BIN     if [ -f $REPO ]; then   curl https://storage.googleapis.com/git-repo-downloads/repo > $REPO chmod 775 $REPO     fi fi   if [ ! -d $ANDROID_HOME ]; then     mkdir -p $ANDROID_HOME;cd $ANDROID_HOME     $REPO init -u https://android.googlesource.com/mirror/manifest --mirror     $REPO sync else    cd $ANDROID_HOME;$REPO sync fi if  [ -d $ANDROID_HOME ]; then     cp $ANDROID_HOME/.repo/repo/repo $ANDROID_HOME     sed -i -e "s/https:\/\/gerrit.googlesource.com/git:\/\/mirror.core.archermind.com\/android\/aosp/" $ANDROID_HOME/repo Fi   cd $ANDROID_HOME rm -rf git-repo git clone https://gerrit.googlesource.com/git-repo.git cd git-repo git checkout -b stable

 

 

調用的時候注意獲取repo的路徑,並加執行權限,repo里面的git-repo的URL要填寫正確。

git-repo的分支,一定要和repo里填寫的repo_rev是一致的。

 

http共享repo和git-repo

 

在/etc/httpd/httpd.conf最下面增加

 

<VirtualHost *:80>
 
    ServerAdmin webmaster@dummy-host.example.com       DocumentRoot /work/mirror   #    ServerName dummy-host.example.com       ErrorLog logs/dummy-host.example.com-error_log       CustomLog logs/dummy-host.example.com-access_log common   </VirtualHost>

 

修改/etc/httpd/conf.d下welcom.conf

注釋掉所有內容,重啟httpd服務即可

 

2.如何創建manifests.git文件

     在布置好repo以后,就要建立manifests.git,這個倉庫是用來管理其他git倉庫的,里面填寫有Android代碼的路徑,方便我們批量下載git庫。

   以android源碼Asus為例,首先我們需要客戶提供project.list,根據project.list創建對應的manifests.xml。

 

 檢查project.list是否含有空的路徑,腳本如下

 

#/bin/sh

source_path=$1 branch_name=LA.BF.1.1.2_rb1.21 function create_git() {     git_path=$1     if [ ! -d "$source_path/$git_path" ]; then         mkdir -p $source_path/$git_path         echo "README" > $source_path/$git_path/README         echo "---------: $source_path/$git_path : no this file" >> $source_path/gitstatus.log     fi     number=`ls $source_path/$git_path | wc -l`     if [ $number == 0 ]; then         echo "---------: $source_path/$git_path : no child file" >> $source_path/gitstatus.log         echo "README" > $source_path/$git_path/README     fi     cd $source_path/$git_path         git init .         git add * -f         git commit -m "Add the all files"     git status | awk -F "\t" '{print $2}' | xargs git add -f     git commit -m "Add the ignore files"     git checkout -b $branch_name     echo $git_path >> $source_path/gitstatus.log     git status >> $source_path/gitstatus.log } echo "-------Begin------------------------------ " rm -rf $source_path/gitstatus.log GIT_PROJECTS=`cat $source_path/project.list | xargs` for git_project in ${GIT_PROJECTS} do     echo ${git_project}     create_git ${git_project} done echo "-------End------------------------------ " ~

 



#/bin/sh
 
source_path=/work/gerrit/review_site/git/asus   function create_git() {         git_path=$1         number=`ls $source_path/$git_path | wc -l`         if [ $number -eq "0" ]         then                   echo $git_path >> new.list                fi }   echo "------------------------------------- " # echo ">>>>>>>>>>>>>>>>>> make the mirror dir ----" # mkdir -p ${mirror_source} # echo ">>>>>>>>>>>>>>>>>> cp the project.list to mirror dir ----" # cp ${src_source}/.repo/project.list ${mirror_source}/   GIT_PROJECTS=`cat project.list | xargs`   for git_project in ${GIT_PROJECTS} do         echo ${git_project}         create_git ${git_project} done   echo "-------------------------------------

"

 

 



 manifests.xml的制作腳本樣例如下:

REMOTE_FETCH="ssh://192.168.100.198:29418/"
REMOTE_REVIEW="http://192.168.100.198" PROJECT_NAME="asus/project" BRANCH="LA.BF.1.1.2_rb1.21"   echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > manifest.xml echo "<manifest>" >> manifest.xml echo "  <remote fetch=\"${REMOTE_FETCH}\" name=\"origin\" review=\"${REMOTE_REVIEW}\"/>" >> manifest.xml echo "  <default remote=\"origin\" revision=\"${BRANCH}\"/>" >> manifest.xml echo "" >> manifest.xml   GIT_PROJECTS=`cat project.list | xargs`   function create_project () { git_path=$1 if [ ${git_path} == "build" ] then echo "  <project name=\"${PROJECT_NAME}/${git_path}\" path=\"${git_path}\" >" >> manifest.xml         echo "      <copyfile dest=\"Makefile\" src=\"core/root.mk\"/>" >> manifest.xml         echo "  </project>" >> manifest.xml elif [ ${git_path} == "vendor/intel/support" ] then echo "  <project name=\"${PROJECT_NAME}/${git_path}\" path=\"${git_path}\" >" >> manifest.xml         echo "      <copyfile dest=\"device/intel/Android.mk\" src=\"x86_only_Android.mk\"/>" >> manifest.xml echo "      <copyfile dest=\"platform/vendor/intel/Android.mk\" src=\"x86_only_Android.mk\"/>" >> manifest.xml echo "  </project>" >> manifest.xml else echo "  <project name=\"${PROJECT_NAME}/${git_path}\" path=\"${git_path}\" />" >> manifest.xml fi }   for git_project in ${GIT_PROJECTS} do     create_project ${git_project} done   echo "" >> manifest.xml echo "</manifest>" >> manifest.xml   # cat manifest.xml | awk -F path=\" '{print $2}' | awk -F \"\ remote= '{print $1}' | awk -F \"\ revision= '{print $1}' > project.list

 

 

創建好manifests.xml文件后

mkdir manifests
mv manifests.xml manifests
cd manifests
mv manifests default.xml
git init 
git add default.xml
git commit -m “test” default.xml cd .. git clone manifests/.git --mirror

 

就可以看到manifests.git文件了   

3.如何批量創建鏡像

樣例腳本如下:

#/bin/sh
 
src_source=$1 mirror_source=$2 dev_branch="LA.BF.1.1.2_rb1.21"   function create_git() { git_path=$1 if [ -d "$src_source/$git_path" ] then cd $src_source/$git_path/         git init          git add *         git commit -m “test” * git checkout -b ${dev_branch} base_path=`basename $git_path` echo $base_path    cd ../ git clone $base_path/.git --mirror mkdir -p $mirror_source/$git_path     mv $base_path.git $mirror_source/$git_path/../ rm -r $mirror_source/$git_path fi }   echo ">>>>>>>>>>>>>>>>>> prepare --------------------------------------- " # echo ">>>>>>>>>>>>>>>>>> make the mirror dir ----" # mkdir -p ${mirror_source} # echo ">>>>>>>>>>>>>>>>>> cp the project.list to mirror dir ----" # cp ${src_source}/.repo/project.list ${mirror_source}/   cd ${mirror_source} GIT_PROJECTS=`cat ${mirror_source}/project.list | xargs` echo ${GIT_PROJECTS}   for git_project in ${GIT_PROJECTS} do echo ${git_project} create_git ${git_project} done   echo ">>>>>>>>>>>>>>>>>> Over! Please check and restart the gerrit-server ------------"

 

 

4.gerrit網頁上的權限文件如何修改

先創建新的組,加入項目組對應的成員,read_XXX,push_XXX,review_XXX

添加對應成員

wKiom1boslfweFExAAA-8FmuNw0256.png 

 

 

開始加項目組對應分支的權限,

方式一:

在projects->All-projects中添加,

這是直接往主線合入,讀取,審核等權限

wKioL1bosvvAkUkVAAAWTxPlgB4054.png 

 

方式二:

通過繼承的方式,

Asus項目下git庫比較多,如果一個個單獨設置權限比較麻煩,這里可以先創建一個新的工程作為一個father project,

wKioL1bosxrQDzMfAAA1lw-QXjA203.png 

 

Father樣例工程如下,refs/for/*即是分支的權限,refs/heads/*是主線的權限

wKiom1bosqCjs5RkAAAxp0qOgFY158.png 

 

Asus下的其他項目如果要設置權限,直接采用繼承的形式即可

wKioL1bosz-SlotZAAAacfSBrpI968.png 

5.如何從gerrit服務器上拉取代碼

登錄其他服務器后,首先我們要將ssh的密鑰傳到網站上去。

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub,

拷貝密鑰,到網站下

 wKioL1boul7ggChYAADJfP48FGE975.png

 

 

推薦:Repo和Git 版本管理常用命令

From: http://zyueqi.iteye.com/blog/1461466 Git命令快速參考 Git Command Quick Reference 本附錄為Git常見命令快速參考。每節介紹一種操作類型。 這里會列出

 

拷貝完以后增加config文件,vi ~/.ssh/config

增加

Host 192.168.100.198

user n006253

 

下載git服務,我的git版本是git 1.7.9.6

rpm -ivh git-1.7.9.6-1.el6.rfx.x86_64.rpm perl-Git-1.7.9.6-1.el6.rfx.x86_64.rpm

rpm -ivh git-daemon-1.7.9.6-1.el6.rfx.x86_64.rpm

 

 

 

將以下內容,傳到/etc/xinetd.d/git

# default: off

# description: The git daemon allows git repositories to be exported using #       the git:// protocol.

        #server_args     = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose

        #type            = UNLISTED

 

service git

{

        disable         = no 

 

        # git is in /etc/services only on RHEL5+

        type            = UNLISTED

        port            = 9418

 

        socket_type     = stream

        wait            = no

        user            = nobody

        server          = /usr/libexec/git-core/git-daemon

        server_args     = --base-path=/work/mirror --export-all --user-path=/work/mirror/android --syslog --inetd --verbose

        log_on_failure  += USERID

        # xinetd does not enable IPv6 by default

        # flags           = IPv6

}

 

/etc/init.d/xinetd restart

 

下載repo

cd /work/tool

 

curl http://mirror.core.archermind.com/android/aosp/repo >repo

 

chmod +x repo

 

repo init -u ssh://n006253@192.168.100.198:29418/kraft2-m/8939/manifests -b trunk_LA2.15_8939

 

下下來以后 /work/tool/repo sync -j8

 

6.修改上傳代碼

以修改庫配置文件manifests.git為例

vi default.xml

修改好以后

git add *

git commit -m “test” default.xml

git push origin HEAD:refs/for/trunk****

Push的時候如果出現missing change ID,按照報錯的提示傳輸第一下ID即可

上傳好以后到網頁上submit提交的內容,在ALL->OPEN下

wKiom1boueTxlgxRAABBFxRelCY112.png 

如果想要直接合入主線則是git push origin HEAD:refs/heads/trunk****

如果出現user或者郵箱名字不對的情況,輸入

git config --global user.name "Your Name"

git config --global user.email you@example.com 

git commit --amend --author 'fengxinfeng <Xinfeng.Feng@tieto.com>'

本文出自 “7582964” 博客,謝絕轉載!

 

推薦:安卓版本管理工具 Repo Git

To work with the Android code, you will need to use both Git and Repo. In most situations, you can use Git instead of Repo, or mix Repo and Git comman

repo+manifests+git方式管理安卓代碼 1.repo的獲取 repo只是google用Python腳本寫的調用git的一個腳本,主要是用來下載、管理Android項目的軟件倉庫。(也就是說,他是用來管理git所管理的一個個
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM