#配置default.xml
創建*** all/manifest.gitt ***倉庫:
ssh -p 29418 [email protected] gerrit create-project --empty-commit all/manifest
clone 到本地:
git clone ssh://[email protected]:29418/all/manifest.git
配置default.xml:
cd manifest
vi default.xml
default內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin"
fetch=".." />
<default revision="master"
remote="origin"
sync-j="8" />
<project path="build" name="platform/build" groups="pdk" >
<copyfile src="core/root.mk" dest="Makefile" />
</project>
... ...
</manifest>
project標籤中的:
- name: 唯一的名字標識project,同時也用於生成git倉庫的URL。格式如下:
{project_name}.git - path: 指定git clone出來的代碼存放在本地的子目錄。如果沒有指定,則以name作爲子目錄名。
上傳到遠程倉庫:
git add .
git comm -am "add default.xml"
git push origin master
#創建GIT倉庫
進入Android源碼根目錄,新建腳本文件:
cd src<br>
vi gerrit_create.sh
gerrit_create.sh腳本如下:
LOCAL_PATH=`pwd`
MANIFEST_XML_FILE=$LOCAL_PATH/../manifest/default.xml
USER_NAME="admin"
SERVER_IP="192.168.130.10"
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倉庫:
. gerrit_create.sh
#上傳代碼到遠程倉庫
新建腳本gerrit_push.sh
vi gerrit_push.sh
內容如下:
LOCAL_PATH=`pwd`
MANIFEST_XML_FILE=$LOCAL_PATH/../manifest/default.xml
USER_NAME="admin"
SERVER_IP="192.168.130.10"
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 .
git commit -am "init commit"
git push origin master
cd -
fi
fi
fi
done < $MANIFEST_XML_FILE
}
pushLocalToRemote
運行腳本,push代碼
. gerrit_push.sh
#下載代碼導本地
mkdir -p ../des
cd ../des
repo init -u ssh://[email protected]:29418/all/manifest.git
repo sync -f -j8
#提交代碼到遠程倉庫
增加 ‘commit-msg’ hook:
curl -Lo .git/hooks/commit-msg http://review.example.com/tools/hooks/commit-msg
將 review.example.com 換成自己的IP。
推送一個change:
git add ...
git commit 。。。。
git push ssh://sshusername@hostname:29418/projectname(origin) HEAD:refs/for/branchname
推送一個patch set :
git add ...
git commit --amend
git push ssh://sshusername@hostname:29418/projectname(origin) HEAD:refs/for/branchname