• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 贡献流程<a name="ZH-CN_TOPIC_0000001052970939"></a>
2
3## 环境准备<a name="section124971410183614"></a>
4
5-   针对Git的安装、环境配置及使用方法,请参考码云帮助中心的Git知识大全:[https://gitee.com/help/categories/43](https://gitee.com/help/categories/43)
6-   注册SSH公钥,请参考码云帮助中心的公钥管理:[https://gitee.com/help/articles/4191](https://gitee.com/help/articles/4191)
7-   在开展Gitee的工作流之前,您需要先在OpenHarmony的代码托管平台上找到您感兴趣的Repository。
8
9## 代码下载<a name="section6125202333611"></a>
10
11### 从云上Fork代码分支<a name="section8365811818"></a>
12
131.  找到并打开对应Repository的首页。
142.  点击右上角的 Fork 按钮,按照指引,建立一个属于**个人**的云上Fork分支。
15
16###  把Fork仓下载到本地<a name="section49051646201819"></a>
17
18请按照以下的过程将Repository内的代码下载到您的在计算机上:
19
201.  **创建本地工作目录**:
21
22    您需要创建本地工作目录,以便于本地代码的查找和管理
23
24    ```
25    mkdir ${your_working_dir}
26    ```
27
282.  **复制远程仓库到本地**
29    1.  **切换到本地路径**\*
30
31        ```
32        mkdir -p ${your_working_dir}
33        cd ${your_working_dir}
34        ```
35
36    2.  **复制远程仓库到本地**
37        -   您可以在仓库页面内复制远程仓库的拷贝地址,得到$remote\_link:
38
39            **图 1**  复制远程仓库<a name="fig1772512534014"></a>
40            ![](figures/复制远程仓库.png "复制远程仓库")
41
42        -   在本地电脑执行拷贝命令:
43
44            ```
45            git clone $remote_link
46            ```
47
48
49
50
51### 使用repo工具批量下载代码仓<a name="section15763252468"></a>
52
531.  下载码云repo工具\(可以参考码云帮助中心:[https://gitee.com/help/articles/4316](https://gitee.com/help/articles/4316)\):
54
55    ```
56    curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
57    chmod a+x /usr/local/bin/repo
58    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
59    ```
60
612.  下载\(注意没有repo branch参数\):
62
63    ```
64    repo init -u https://gitee.com/openharmony/manifest.git -b master
65    repo sync -c
66    ```
67
68
69## 代码提交<a name="section338918220422"></a>
70
71### 单仓提交\(git clone场景\)<a name="section669715742719"></a>
72
731.  **拉分支**
74
75    更新您的本地分支
76
77    ```
78    git remote add origin $remote_link
79    git fetch origin
80    git checkout master
81    git pull --rebase
82    ```
83
84    基于远端master分支拉取本地调试分支
85
86    ```
87    git branch myfeature origin/master
88    git checkout myfeature
89    ```
90
91    然后在myfeature分支上编辑和修改代码。
92
932. **在本地工作目录提交变更**
94
95   ```
96   git add .
97   git commit -sm  "xxxxxx"  // 提交信息包含signoff邮箱
98   ```
99
100   您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用commit --amend继续添加提交。
101
1023.  **将变更推送到您的远端目录**
103
104    准备进行审查(或只是建立工作的异地备份)时,将分支推到您的fork仓库:
105
106    ```
107    git push -f origin myfeature
108    ```
109
110
111### 多仓提交\(repo init/sync场景\)<a name="section6560046192910"></a>
112
1131. 配置全局环境token码:
114
115```
116repo config --global repo.token {TOKEN}
117```
118
119token码在码云[个人设置→安全设置→私人令牌](https://gitee.com/profile/personal_access_tokens)中生成,例如
120
121```
122repo config --global repo.token 211XXXXXXXXXXXXXXXXXXXXXXXX
123```
124
1252. 在码云上任意一个此次要修改的仓下创建issue\(类似于gerrit的changeID功能,用来关联多个耦合仓修改\),并记录下issue编号\(如下图中的issue编号是\#I1TVV4\)\(如果不涉及多个仓耦合修改,则此步骤不需要\):
126
127![](figures/无标题1.png)
128
1293. 在本地代码工作区新建分支,修改代码,并提交:
130
131```
132repo start branchname --all
133```
134
135修改代码后在此次修改的多个仓里执行:
136
137```
138git add .
139git commit -sm "xxxxxx"
140```
141
142或者通过repo工具批量add/commit,在代码工程根目录下执行:
143
144```
145repo forall -c 'git add .'
146repo forall -c 'git commit -sm "xxxxxx"'
147```
148
1494. PUSH代码\(注意:不支持repo upload\):
150
151配置push代码时是否直接生成PR,选择False是不直接生成,需要手动去fork仓里生成PR,选择True是push到fork仓的同时生成PR:
152
153```
154repo config repo.pullrequest {True/False}
155```
156
157例如选择push代码的时候同时生成PR,则执行:
158
159```
160repo config repo.pullrequest True
161```
162
163push代码:
164
165```
166repo push --br={BRANCH} --d={DEST_BRANCH} --content={PR_CONTENT}
167```
168
169BRANCH为本地分支,DEST\_BRANCH为目的分支\(即主干分支\),一般是master,PR\_CONTENT为填写的PR描述,假设涉及多仓耦合提交,这里必须填写Issue编号,例如:
170
171```
172repo push --br="20200903" --d="master" --content="#I1TVV4"
173```
174
175在弹出的编辑页面将需要提交仓、分支、commit的注释符打开:
176
177![](figures/无标题2.png)
178
179保存退出,repo会自动将本地分支推送到远端fork仓\(如果没有fork仓,系统会自动创建fork仓\)里,并自动生成PR:
180
181![](figures/无标题3.png)
182
183同时自动将PR和Issue关联:
184
185![](figures/无标题4.png)
186
187## 创建Pull Request(如已通过repo工具自动创建PR,则此步忽略)<a name="section28261522124316"></a>
188
189访问您在码云上的fork仓页面,点击创建Pull Request按钮选择myfeature分支生成PR。
190
191详细操作请参考码云帮助中心的开发协作指导:[https://gitee.com/help/articles/4128](https://gitee.com/help/articles/4128)
192
193>![](public_sys-resources/icon-notice.gif) **须知:**
194>**多个代码仓存在编译依赖时如何同时发起构建:**
195>OS\(操作系统\)开发时,经常会遇到多个代码仓的修改具有编译依赖关系,需要同时构建、同时合入。为此码云平台将Issue作为具有编译依赖的多个代码仓提交PR的关联标识。具体操作如下:
196>1.  在此次提交的任意一个代码仓上创建Issue。
197>2.  将多个需要同时构建、同时合入的PR关联上述Issue,具体操作请参考码云帮助中心:[https://gitee.com/help/articles/4142](https://gitee.com/help/articles/4142)198>3.  触发构建\(详见触发构建的操作帮助\)后,构建中心会识别关联了同一Issue的PR,同时下载构建,并在代码审核通过后,同时进行合并入代码库。
199
200## 门禁构建<a name="section981124754415"></a>
201
202### 创建Issue<a name="section979820334458"></a>
203
2041.  找到并打开对应Repository的首页
2052.  选择左上角的Issues页签,点击右侧新建Issue按钮,按照指引建立一个专属的任务,用于相关联的代码(开发特性/修改bug)执行CI门禁。
206
207### 将Issue与PR关联<a name="section5470144853615"></a>
208
209创建PR或编辑已有的PR时,描述框输入\#+I+五位Issue ID,即可将Issue与PR关联。
210
211**约束:**
212
213-   一个PR只允许关联一个Issue,关联多个Issue时无法触发CI。
214-   相关特性开发或bug修复涉及多个代码仓联合修改时,多个PR可关联同一个Issue。
215-   Issue关联的PR中,不允许存在已被合入或关闭的PR,否则无法触发CI。
216-   若Issue已被合入或关闭的PR关联,则该Issue无法被重复使用,需重新创建Issue并进行OPEN的PR关联。
217
218### 触发代码门禁<a name="section11163175420406"></a>
219
220在PR中评论“start build“即可触发CI门禁。
221
222多个PR关联同一个Issue时,在任一PR中评论“start build”均可触发该Issue的CI门禁。
223
224门禁执行完成,会在该Issue关联的所有PR中自动评论门禁执行结果。
225
226如果门禁通过,该Issue关联的所有PR均会自动标记“测试通过”。
227
228详细参考[代码门禁质量要求](https://gitee.com/openharmony/community/blob/master/sig/sig_qa/%E4%BB%A3%E7%A0%81%E9%97%A8%E7%A6%81%E8%A6%81%E6%B1%82.md)229
230## CI门户<a name="section8563257123985"></a>
231
232OpenHarmony通过持续集成(CI,Continuous Integration)及时发现代码问题,确保代码质量可靠和功能稳定,包括:
233
234- 代码门禁:开发者向OpenHarmony提交代码合入申请后,会触发门禁检查,例如静态检查、代码编译、功能测试等,门禁通过后才能合入代码。
235- 每日构建:OpenHarmony的持续集成流水线每日自动执行,以便提前发现代码静态检查、编译、功能等方面的问题,及时修复问题,确保代码质量。
236
237CI门户是为了便于开发者及时查看、分析每日构建和代码门禁的执行结果的一个可持续集成的门户。
238
239示例:[CI门户入口](http://ci.openharmony.cn/)
240
241![CI门户](figures/ci-portal.png)
242
243## 代码审查<a name="section17823849145014"></a>
244
245请参考码云帮助中心:[https://gitee.com/help/articles/4304](https://gitee.com/help/articles/4304)
246
247**相关主题:[FAQ](FAQ.md)**
248