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/androidmirrorif [ ! -d $BIN ]; thenmkdir -p $BINif [ -f $REPO ]; then curl https://storage.googleapis.com/git-repo-downloads/repo > $REPO
chmod 775 $REPOfi
fiif [ ! -d $ANDROID_HOME ]; thenmkdir -p $ANDROID_HOME;cd $ANDROID_HOME$REPO init -u https://android.googlesource.com/mirror/manifest --mirror$REPO sync
elsecd $ANDROID_HOME;$REPO sync
fi
if  [ -d $ANDROID_HOME ]; thencp $ANDROID_HOME/.repo/repo/repo $ANDROID_HOMEsed -i -e "s/https:\/\/gerrit.googlesource.com/git:\/\/mirror.core.archermind.com\/android\/aosp/" $ANDROID_HOME/repo
Ficd $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.comDocumentRoot /work/mirror#    ServerName dummy-host.example.comErrorLog logs/dummy-host.example.com-error_logCustomLog 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/shsource_path=$1
branch_name=LA.BF.1.1.2_rb1.21function create_git() {git_path=$1if [ ! -d "$source_path/$git_path" ]; thenmkdir -p $source_path/$git_pathecho "README" > $source_path/$git_path/READMEecho "---------: $source_path/$git_path : no this file" >> $source_path/gitstatus.logfinumber=`ls $source_path/$git_path | wc -l`if [ $number == 0 ]; thenecho "---------: $source_path/$git_path : no child file" >> $source_path/gitstatus.logecho "README" > $source_path/$git_path/READMEficd $source_path/$git_pathgit init .git add * -fgit commit -m "Add the all files"git status | awk -F "\t" '{print $2}' | xargs git add -fgit commit -m "Add the ignore files"git checkout -b $branch_nameecho $git_path >> $source_path/gitstatus.loggit status >> $source_path/gitstatus.log
}echo "-------Begin------------------------------ "rm -rf $source_path/gitstatus.logGIT_PROJECTS=`cat $source_path/project.list | xargs`for git_project in ${GIT_PROJECTS}
doecho ${git_project}create_git ${git_project}
doneecho "-------End------------------------------ "
~
#/bin/shsource_path=/work/gerrit/review_site/git/asusfunction create_git() {git_path=$1number=`ls $source_path/$git_path | wc -l`if [ $number -eq "0" ]thenecho $git_path >> new.listfi
}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}
doecho ${git_project}create_git ${git_project}
doneecho "-------------------------------------

"

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.xmlGIT_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.xmlecho "      <copyfile dest=\"Makefile\" src=\"core/root.mk\"/>" >> manifest.xmlecho "  </project>" >> manifest.xml
elif [ ${git_path} == "vendor/intel/support" ]
then
echo "  <project name=\"${PROJECT_NAME}/${git_path}\" path=\"${git_path}\" >" >> manifest.xmlecho "      <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}
docreate_project ${git_project}
doneecho "" >> 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/shsrc_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_pathcd ../
git clone $base_path/.git --mirror
mkdir -p $mirror_source/$git_pathmv $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}
doneecho ">>>>>>>>>>>>>>>>>> Over! Please check and restart the gerrit-server ------------"

4.gerrit网页上的权限文件如何修改

先创建新的组,加入项目组对应的成员,read_XXX,push_XXX,review_XXX

添加对应成员

开始加项目组对应分支的权限,

方式一:

在projects->All-projects中添加,

这是直接往主线合入,读取,审核等权限

方式二:

通过继承的方式,

Asus项目下git库比较多,如果一个个单独设置权限比较麻烦,这里可以先创建一个新的工程作为一个father project,

Father样例工程如下,refs/for/*即是分支的权限,refs/heads/*是主线的权限

Asus下的其他项目如果要设置权限,直接采用继承的形式即可

5.如何从gerrit服务器上拉取代码

登录其他服务器后,首先我们要将ssh的密钥传到网站上去。

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub,

拷贝密钥,到网站下

拷贝完以后增加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下

如果想要直接合入主线则是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>'

转载于:https://blog.51cto.com/jiyude/1751623

repo+manifests+git方式管理安卓代码相关推荐

  1. 解决”error: info is different in .repo/manifests/.git vs .repo/manifests.git报错

    经常碰到这样的情况:".repo/manifests/"仓库有更新,我们在手动git pull到最新后,再执行sync或者init会报"error: info is di ...

  2. git-svn:通过git来管理svn代码

    简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...

  3. 【收藏】git-svn:通过git来管理svn代码

    [转载]:https://www.cnblogs.com/h2zZhou/p/6136948.html?tdsourcetag=s_pctim_aiomsg 简介 svn和git都是常用的版本管理软件 ...

  4. 使用Git来管理svn代码

    背景简介 项目基于svn进行版本控制,trunk对应下一个即将上线版本A,A上线后切为分支branchA,手头要开发的几个功能对应下下个版本B,暂不能提到trunk上 此时有两种办法 在svn上建立一 ...

  5. 【git】error: .repo/manifests/: contains uncommitted changes解决思路

    1.问题 同步代码时运行repo sync,出现问题: error: .repo/manifests/: contains uncommitted changes 2.解决 # 1.进入这个目录,将修 ...

  6. error: .repo/manifests/: contains uncommitted changes

    已经下载了Android源码,但是现在需要想更新,便可以直接使用repo sync同步到本地. 可能会出现如下错误: $ repo sync remote: Counting objects: 10, ...

  7. git(5)---Git 与Repo 管理Android代码

    Git 与Repo 管理代码 要处理 Android 代码,您需要同时使用 Git 和 Repo.在大多数情况下,您可以仅使用 Git(不必使用 Repo),或结合使用 Repo 和 Git 命令以组 ...

  8. 好代码是管出来的——使用Git来管理源代码

    软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码 ...

  9. Git 代码管理(代码提交和代码回退)

    Git 代码管理(代码提交和代码回退) Git的主要功能是代码管理,版本管理,分支管理. 在远程代码管理平台上,项目的代码被管理在一个远程代码仓库中,在本地,代码保存在一个本地代码仓库中.通过Git, ...

最新文章

  1. qt 连接mysql
  2. jquery.ui.datepicker默认日期
  3. 零基础学Java需要先具备的三项技能
  4. 【Python生成器与迭代器的区别】
  5. 【Makefile由浅入深完全学习记录2】初识 makefile 的结构
  6. java属于哪种语言_Java属于以下哪种语言( )_学小易找答案
  7. 飞行棋 c语言,骑士飞行棋【纯c】
  8. if else if else语句格式_计算机各语言之间if...else区别
  9. 【大数据部落】R语言电信公司churn数据客户流失 k近邻(knn)模型预测分析
  10. 盘点国内外私募基金业绩报酬计提方式
  11. 计算机数据结构图知识点,2011考研计算机数据结构复习重点解析:图的应用
  12. 后台管理系统--毕业设计02
  13. C/C++程序员桌面壁纸---简尚黑
  14. mac通过u盘启动linux系统,在mac下制作linux启动U盘
  15. (一) C语言的字符
  16. linux下安装飞信机器人教程
  17. 软件测试小黑指北-知识点复习
  18. 50款拥有超赞用户体验的精美移动UI设计
  19. 51单片机课设代做_微波炉控制系统设计
  20. VMware安装虚拟机

热门文章

  1. 已购买阿里云CDN流量包仍旧扣费的原因及解决方法
  2. 如何成为一名程序员?
  3. 联创机房管理系统重连服务器失败,联创机房管理系统在CAD实验室应用探析.doc...
  4. 关闭oracle job定时任务,oracle job 定时任务,定时执行
  5. 视频剪辑-OpenShot
  6. docker基础操作
  7. 用bootstrap写一个简洁的网页
  8. HTMl--基础样式的使用
  9. 靠贴牌飞利浦冲击上市,德尔玛的自有品牌又该如何“起跳”?
  10. npm ERR! nested aliases not supported 报错原因