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
- 创建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
- 上传代码到远程仓库
新建脚本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 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