将android 代码上传服务器并用repo 管理

1. 配置default.xml

default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default.xml)进行修改。
新建仓库all/manifest.git

ssh -p 29418 jeffrey@172.21.16.236 gerrit create-project --empty-commit RK3128/manifest

clone到本地
git clone ssh://jeffrey@172.21.16.236:29418/RK3128/manifest.git
配置default.xml
PS: 将.repo 下项目所使用的manifest.xml copy 出来。用del_remote_version.py 脚本去除remote version 等信息。生成default.xml
del_remote_version.py 如下

#!/usr/bin/python3

import os
import sys

if len(sys.argv) == 1:
    print('错误!请传入 xml 文件')
elif len(sys.argv) > 2:
    print('错误!传入参数太多')
else:
    print('传入的文件是 %s' % sys.argv[1])

newfilestr = ''
    
with open(sys.argv[1], 'r') as fin:
    while True:
        linestr = fin.readline()
        if linestr == '':       #表示文件结束
            break
        #print(linestr)
        linestr = linestr[:len(linestr)-1]      # 去除行尾
        #下面开始对本行内容分析
        if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)):   #本行内容含有name信息,进行处理
            #print(linestr)
            newstr = linestr
            #下面开始分析本行内容,删除remote和revision等内容
            if ' remote=' in newstr:    # 包含remote信息,删除掉
                str1 = ' remote="'
                str2 = '"'
                newstr = newstr[0:newstr.index(str1)] + newstr[newstr.index(str1) + len(str1) + newstr[newstr.index(str1)+len(str1):].index(str2)+1:]
            if ' revision=' in newstr:   # 包含revision信息,删除掉
                str1 = ' revision="'
                str2 = '"'
                newstr = newstr[0:newstr.index(str1)] + newstr[newstr.index(str1) + len(str1) + newstr[newstr.index(str1)+len(str1):].index(str2)+1:]
            if ' upstream=' in newstr:   # 包含revision信息,删除掉
                str1 = ' upstream="'
                str2 = '"'
                newstr = newstr[0:newstr.index(str1)] + newstr[newstr.index(str1) + len(str1) + newstr[newstr.index(str1)+len(str1):].index(str2)+1:]
            #print(newstr)
            newfilestr = newfilestr + newstr + '\n'
        else:           # 本行没有name信息,不关心,原样输出
            newfilestr = newfilestr + linestr + '\n'

print(newfilestr)
with open(sys.argv[1], 'w') as fout:
    fout.write(newfilestr)


上传到远程仓库

1	git add .
2	git commit -m "add default.xml"
3	git push origin master

  1. 创建git仓库
    进入Android代码目录,新建脚本文件,
    1 cd src
    vi gerrit_create.sh
LOCAL_PATH=`pwd`
MANIFEST_XML_FILE=$LOCAL_PATH/../manifest/default.xml
USER_NAME="jeffrey.liao"
SERVER_IP="172.21.16.199"
SERVER_PORT="29418"
OUTPUT_PROJECT_LIST_FILE_NAME=$LOCAL_PATH/project_list_name
OUTPUT_PROJECT_LIST_FILE_PATH=$LOCAL_PATH/project_list_path
function getNameAndPath()
{
echo > $OUTPUT_PROJECT_LIST_FILE_NAME
echo > $OUTPUT_PROJECT_LIST_FILE_PATH
while read LINE
do
command_line=`echo $LINE | grep "<project"`
if [ "$command_line" ]
then
#echo $LINE
reposity_name_sec=${LINE#*name=\"}
reposity_path_sec=${LINE#*path=\"}
if [ "$reposity_name_sec" ] && [ "$reposity_path_sec" ]
then
reposity_name=${reposity_name_sec%%\"*}
reposity_path=${reposity_path_sec%%\"*}
echo "$reposity_name">> $OUTPUT_PROJECT_LIST_FILE_NAME
echo "$reposity_path">> $OUTPUT_PROJECT_LIST_FILE_PATH
fi
fi
done < $MANIFEST_XML_FILE
}
function creatEmptyGerritProject()
{
for i in `cat $OUTPUT_PROJECT_LIST_FILE_NAME`;
do
echo $i
echo "ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project --empty-commit $i"
ssh -p $SERVER_PORT $USER_NAME@$SERVER_IP gerrit create-project --empty-commit $i
done
}

function removeFiles()
{
rm -rf $LOCAL_PATH/project_list_name
rm -rf $LOCAL_PATH/project_list_path
}

getNameAndPath
creatEmptyGerritProject
removeFiles

运行脚本,创建git仓库,

1	. gerrit_create.sh

  1. 上传代码到远程仓库
    新建脚本gerrit_push.sh
1	vi gerrit_push.sh

内容如下,

LOCAL_PATH=`pwd`
MANIFEST_XML_FILE=$LOCAL_PATH/../manifest/default.xml

USER_NAME="jeffrey.liao"
SERVER_IP="172.21.16.199"
SERVER_PORT="29418"

function pushLocalToRemote()
{

while read LINE
do
cd $LOCAL_PATH
command_line=`echo $LINE | grep "<project"`
if [ "$command_line" ]
then
#echo $LINE
reposity_name_sec=${LINE#*name=\"}
reposity_path_sec=${LINE#*path=\"}

if [ "$reposity_name_sec" ] && [ "$reposity_path_sec" ]
then
reposity_name=${reposity_name_sec%%\"*}
reposity_path=${reposity_path_sec%%\"*}

src_path=$LOCAL_PATH/$reposity_path

if [ -d "$src_path" ]; then
cd $src_path
echo `pwd`

rm -rf .git
#rm -rf .gitignore
git init
git remote add origin ssh://$USER_NAME@$SERVER_IP:$SERVER_PORT/$reposity_name.git
git pull origin master
git add -A . -f
git commit -am"init commit"
git push origin master
cd -
fi
fi
fi

done < $MANIFEST_XML_FILE
}

pushLocalToRemote

运行脚本,push代码,

. gerrit_push.sh
  1. 下载代码
1	mkdir -p ../des
2	cd ../des
3	repo init -u ssh://admin@172.21.16.236:29418/RK3128/manifest.git
4	repo sync -f -j8
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值