Repo代码仓库搭建

使用rockchip sdk二次开发,代码十几个G,都放在一个git仓库的话,每次git status要等好久,决定拆分一下,官方是用repo做代码管理的,我打算也搭建个类似开发环境。

1.首先在git服务器上创建一个manifest仓库,按照官方manifest规范配置自己用到的项目仓库。这里我创建了3个配置,一个是常用来编译发布镜像的;一个是编译调试内核和uboot的;还有一个是下载完整SDK的,这个基本上用不上,只是给SDK做了个备份。

Repo代码仓库搭建_第1张图片

Repo代码仓库搭建_第2张图片

2.把SDK每个子目录建成一个单独仓库上传到git服务器。有些仓库我做了分支,比如prebuilts里面的工具链我只用到了aarch64版本,没有必要全部同步到本地。有些仓库只是子目录的一部分,比如buildroot/support。我的项目用的是自己做好的ubuntu20,不需要buildroot全部代码,但是编译镜像的时候依赖他们。

3.使用repo命令同步自己仓库。编译的时候发现还是有问题,recovery.img、oem.img和userdat.img生成还是需要编译buildroot。自己动手改了一下device/rockchip/common/script目录下的编译脚本,删除这部分依赖。

4.repo命令每次init的时候总是去google下载最新版本,没有代理容易卡死报错,我自己封装了一层附上脚本代码:

#!/bin/bash

ROOT_DIR=`pwd`
MENIFEST_FILE="default.xml"
REPO_FILE=$HOME/.repo/repo

function usage()
{
    echo " "
    echo "usage: repo fpad [menifest.xml] [fpad_dir]"
    echo " "
    echo "******************* or *******************"
    echo " "
    which repo > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        repo --help
    fi
}

function download_repo()
{
    
    if [ -e $REPO_FILE ]; then
        rm $REPO_FILE
    fi
    
    if [ ! -e $HOME/.repo ]; then
        mkdir $HOME/.repo
    fi

    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o $REPO_FILE
    sed -i "s/\#\!\/usr\/bin\/env python$/\#\!\/usr\/bin\/env python3/g" $REPO_FILE
    chmod +x $REPO_FILE
}

function replace_repo()
{
    local NEW_REPO=$1
    
    if [ -e $REPO_FILE ]; then
        rm $REPO_FILE
    fi
    
    echo "release repo from $NEW_REPO"
    cp $NEW_REPO $REPO_FILE
    sed -i "s/\#\!\/usr\/bin\/env python$/\#\!\/usr\/bin\/env python3/g" $REPO_FILE
    chmod +x $REPO_FILE
}

function download_project()
{
    local DOWNLOAD_DIR=$1
    if [ -e $DOWNLOAD_DIR -a $ROOT_DIR != $DOWNLOAD_DIR ]; then
        echo "remove old project repo: $DOWNLOAD_DIR"
        rm -rf $DOWNLOAD_DIR
    fi
    
    if [ ! -e $DOWNLOAD_DIR ]; then
        mkdir -p $DOWNLOAD_DIR
        cd $DOWNLOAD_DIR
    fi
    
    echo "start to sync repo to $DOWNLOAD_DIR ... ..."
    repo init -u ssh://[email protected]/rk3588/manifest.git -m $MENIFEST_FILE
    replace_repo $DOWNLOAD_DIR/.repo/repo/repo
    repo sync -c
    repo start main --all 
}

if [ $# -lt 1 ]; then
    echo "too few args."
    usage
    exit 1;
fi

if [ ! -e $REPO_FILE ]; then
    echo "downlaod repo command file."
    download_repo
fi

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
export PATH=$HOME/.repo/:$PATH

if [ $1 == "project" ]; then
    case $# in
    1)
        download_project $ROOT_DIR
    ;;
    2)
        MENIFEST_FILE="$2.xml"
        echo "manifest file: $MENIFEST_FILE"
        download_project $ROOT_DIR
    ;;
    3)
        MENIFEST_FILE="$2.xml"
        download_project $3
    ;;
    *)
        echo "too many args."
        usage
        exit 1;
    ;;
    esac
else
    repo $@
    if [ $1 == "init" -a -e .repo/repo/repo ];then
        replace_repo .repo/repo/repo
    fi
fi

你可能感兴趣的:(python,git)