贡献流程

About 7 min

贡献流程

环境准备

代码下载

从云上Fork代码分支

  1. 找到并打开对应Repository的首页。
  2. 点击右上角的 Fork 按钮,按照指引,建立一个属于个人的云上Fork分支。

把Fork仓下载到本地

请按照以下的过程将Repository内的代码下载到您的在计算机上:

  1. 创建本地工作目录

    您需要创建本地工作目录,以便于本地代码的查找和管理

    mkdir ${your_working_dir}
    
    1
  2. 复制远程仓库到本地

    1. 切换到本地路径*

      mkdir -p ${your_working_dir}
      cd ${your_working_dir}
      
      1
      2
    2. 复制远程仓库到本地

      • 您可以在仓库页面内复制远程仓库的拷贝地址,得到$remote_link:

        图 1 复制远程仓库

      • 在本地电脑执行拷贝命令:

        git clone $remote_link
        
        1

使用repo工具批量下载代码仓

  1. 下载码云repo工具(可以参考码云帮助中心:https://gitee.com/help/articles/4316):

    curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
    chmod a+x /usr/local/bin/repo
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
    
    1
    2
    3
  2. 下载(注意没有repo branch参数):

    repo init -u https://gitee.com/openharmony/manifest.git -b master
    repo sync -c
    
    1
    2

代码提交

单仓提交(git clone场景)

  1. 拉分支

    更新您的本地分支

    git remote add origin $remote_link
    git fetch origin
    git checkout master  
    git pull --rebase 
    
    1
    2
    3
    4

    基于远端master分支拉取本地调试分支

    git branch myfeature origin/master
    git checkout myfeature  
    
    1
    2

    然后在myfeature分支上编辑和修改代码。

  2. 在本地工作目录提交变更

    git add .
    git commit -sm  "xxxxxx"  // 提交信息包含signoff邮箱
    
    1
    2

    您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用commit --amend继续添加提交。

  3. 将变更推送到您的远端目录

    准备进行审查(或只是建立工作的异地备份)时,将分支推到您的fork仓库:

    git push -f origin myfeature
    
    1

多仓提交(repo init/sync场景)

  1. 配置全局环境token码:
repo config --global repo.token {TOKEN}
1

token码在码云个人设置→安全设置→私人令牌中生成,例如

repo config --global repo.token 211XXXXXXXXXXXXXXXXXXXXXXXX
1
  1. 在码云上任意一个此次要修改的仓下创建issue(类似于gerrit的changeID功能,用来关联多个耦合仓修改),并记录下issue编号(如下图中的issue编号是#I1TVV4)(如果不涉及多个仓耦合修改,则此步骤不需要):

  1. 在本地代码工作区新建分支,修改代码,并提交:
repo start branchname --all
1

修改代码后在此次修改的多个仓里执行:

git add .
git commit -sm "xxxxxx"
1
2

或者通过repo工具批量add/commit,在代码工程根目录下执行:

repo forall -c 'git add .'
repo forall -c 'git commit -sm "xxxxxx"'
1
2
  1. PUSH代码(注意:不支持repo upload):

配置push代码时是否直接生成PR,选择False是不直接生成,需要手动去fork仓里生成PR,选择True是push到fork仓的同时生成PR:

repo config repo.pullrequest {True/False}
1

例如选择push代码的时候同时生成PR,则执行:

repo config repo.pullrequest True
1

push代码:

repo push --br={BRANCH} --d={DEST_BRANCH} --content={PR_CONTENT}
1

BRANCH为本地分支,DEST_BRANCH为目的分支(即主干分支),一般是master,PR_CONTENT为填写的PR描述,假设涉及多仓耦合提交,这里必须填写Issue编号,例如:

repo push --br="20200903" --d="master" --content="#I1TVV4"
1

在弹出的编辑页面将需要提交仓、分支、commit的注释符打开:

保存退出,repo会自动将本地分支推送到远端fork仓(如果没有fork仓,系统会自动创建fork仓)里,并自动生成PR:

同时自动将PR和Issue关联:

创建Pull Request(如已通过repo工具自动创建PR,则此步忽略)

访问您在码云上的fork仓页面,点击创建Pull Request按钮选择myfeature分支生成PR。

详细操作请参考码云帮助中心的开发协作指导:https://gitee.com/help/articles/4128

须知: 多个代码仓存在编译依赖时如何同时发起构建: OS(操作系统)开发时,经常会遇到多个代码仓的修改具有编译依赖关系,需要同时构建、同时合入。为此码云平台将Issue作为具有编译依赖的多个代码仓提交PR的关联标识。具体操作如下:

  1. 在此次提交的任意一个代码仓上创建Issue。
  2. 将多个需要同时构建、同时合入的PR关联上述Issue,具体操作请参考码云帮助中心:https://gitee.com/help/articles/4142
  3. 触发构建(详见触发构建的操作帮助)后,构建中心会识别关联了同一Issue的PR,同时下载构建,并在代码审核通过后,同时进行合并入代码库。

门禁构建

创建Issue

  1. 找到并打开对应Repository的首页
  2. 选择左上角的Issues页签,点击右侧新建Issue按钮,按照指引建立一个专属的任务,用于相关联的代码(开发特性/修改bug)执行CI门禁。

将Issue与PR关联

创建PR或编辑已有的PR时,描述框输入#+I+五位Issue ID,即可将Issue与PR关联。

约束:

  • 一个PR只允许关联一个Issue,关联多个Issue时无法触发CI。
  • 相关特性开发或bug修复涉及多个代码仓联合修改时,多个PR可关联同一个Issue。
  • Issue关联的PR中,不允许存在已被合入或关闭的PR,否则无法触发CI。
  • 若Issue已被合入或关闭的PR关联,则该Issue无法被重复使用,需重新创建Issue并进行OPEN的PR关联。

触发代码门禁

在PR中评论“start build“即可触发CI门禁。

多个PR关联同一个Issue时,在任一PR中评论“start build”均可触发该Issue的CI门禁。

门禁执行完成,会在该Issue关联的所有PR中自动评论门禁执行结果。

如果门禁通过,该Issue关联的所有PR均会自动标记“测试通过”。

CI门户

OpenHarmony通过持续集成(CI,Continuous Integration)及时发现代码问题,确保代码质量可靠和功能稳定,包括:

  • 代码门禁:开发者向OpenHarmony提交代码合入申请后,会触发门禁检查,例如静态检查、代码编译、功能测试等,门禁通过后才能合入代码。
  • 每日构建:OpenHarmony的持续集成流水线每日自动执行,以便提前发现代码静态检查、编译、功能等方面的问题,及时修复问题,确保代码质量。

CI门户是为了便于开发者及时查看、分析每日构建和代码门禁的执行结果的一个可持续集成的门户。

示例:CI门户入口

CI门户

代码审查

请参考码云帮助中心:https://gitee.com/help/articles/4304

相关主题:FAQ