提交 fe8ef4d8 编写于 作者: Lab机器人's avatar Lab机器人

init

# 帮助文档
## 概览[](#概览 "Permalink")
欢迎您使用CODEChina,如果您是 Github 或 GitLab 的初级用户,我们建议您从查看本文档开始学习如何使用 CODEChina。如果您熟悉以上两个产品中的一个或多个,您可以直接开始 CODEChina 产品,在产品中我们也会为您设置帮助提示,您可以随时回来查看我们的产品文档。
| 基础入门 | 基本入门 |
| --- | --- |
| [**用户文件**](/docs/user.md)熟悉CODEChina 中的功能和概念. |[**是 Git 和 GitLab/GitHub 的新手吗?**](#刚开始使用gitcodechinagitlabgithub)我们有资源可以帮助您入门 |
| [**为 CODEChina 做贡献**](#为codechina开源做贡献)为CODEChina开源贡献力量! | [**从另一个平台进入 CODEChina?**](#从另一个平台进入到-codechina)请查阅我们的便捷指南 |
## 热门话题[](#热门话题 "Permalink")
以下是我们推荐的一些主题:
### 计划[](#计划 "Permalink")
无论您使用 Waterfall,敏捷还是会话开发,CODEChina 均可简化您的协作工作流程。
使用 CODEChina 灵活的项目管理工具可视化,确定优先级,协调和跟踪进度。
以下文档与 DevOps **计划**阶段有关:
| 计划主题 | 描述 |
| --- | --- |
| Burndown Charts| 在特定的里程碑中观察项目的进度 |
| [讨论](/docs/user/discussions.md) | 问题,提交和合并请求中的线程,注释和可解决线程 |
| [截止日期](/docs/user/project/issues/due-date.md) | 跟踪发行期限|
| Epics | 跟踪共享主题的问题组|
| [ Issue ](/docs/user/project/issues.md) ,包括[机密问题](/docs/user/project/issues/confidential.md)[发布和合并请求模板](/docs/user/project/description-template.md) ,和[移动的问题](/docs/user/project/issues/manage.md#moving-issues) | 项目问题并限制对问题的访问,并创建用于提交新问题和合并请求的模板。 此外,在项目之间转移问题|
| [标签](/docs/user/project/label.md) | 分类问题或使用描述性标签合并请求|
| [里程碑](/docs/user/project/milestone.md) | 设置发布问题和合并请求的里程碑,并带有可选的截止日期|
| [看板](/docs/user/project/kanban.md) | 在 Scrum 或看板上显示问题|
| [快捷方式](/docs/user/shortcutkey.md) | 针对问题或合并请求的常见操作的快捷方式,而无需单击按钮或在WEB界面中使用下拉菜单 |
| [关联 Issue](/docs/user/project/issues/crosslinking.md) | 在问题之间建立关系 |
| Roadmap | 可视化史诗般的时间表 |
| [时间跟踪](/docs/user/project/time-track.md) | 跟踪花费在问题和合并请求上的时间 |
| [代办事项](/docs/user/todo.md) | 通过在简单仪表板上显示的时间顺序列表,跟踪需要注意的工作 |
[返回概览](#概览)
### 新建[](#新建 "Permalink")
将源代码整合到一个易于管理和控制的[分布式版本控制系统中](https://en.wikipedia.org/wiki/Distributed_version_control) ,而不会中断您的工作流程。
CODEChina 存储库随附分支工具和访问控制,可为项目和代码的协作提供可扩展的单一事实来源。
以下文档与 DevOps **新建**阶段有关:
#### 项目和组织[](#项目和组织 "Permalink")
| 创建主题-项目和组 | 描述 |
| --- | --- |
| 全局搜索 | 利用 Elasticsearch 在整个 CODEChina 实例上进行更快,更高级的代码搜索|
| 语法检索 | 使用高级查询获得更具针对性的搜索结果|
| Contribution analytics | 请参阅小组贡献者的详细统计信息|
| [创建](/docs/basic/create-project.md)并 fork 项目,以及[导入项目](/docs/user/project/import.md) | 创建,复制和移动项目 |
| 锁定文件 | 锁定文件以避免合并冲突 |
| [组织](/docs/user/org.md) and [子组织](/docs/user/org/sub_org.md) | 分组组织您的项目 |
| Issue 分析 | 检查每月创建了多少个问题|
| [项目](/docs/user/project.md) ,包括项目访问和[设置](/docs/user/project/settings.md) | 托管源代码,并控制项目的可见性和设置配置。|
| [搜索](/docs/img/add_user_search_people.png) | 搜索问题,合并请求,项目,组和待办事项。|
| [Web IDE](/docs/user/project/webide.mdl) | 在 WebIDE 中编辑文件|
| [Wikis](/docs/user/project/wiki.md) | 使用内置的 Wiki 来管理您的文档|
[返回概览](#概览)
#### 代码仓库[](#代码仓库 "Permalink")
| 创建主题-代码仓库 | 描述 |
| --- | --- |
| [分支](/docs/user/project/repo/branches.md)[默认分支](/docs/user/project/repo/branches.md#default-branch) | 如何在 CODEChina 中使用分支 |
| [提交](/docs/user/project/repo.md#commits) and [署名提交](/docs/user/project/repo/gpg-sign.md) | 处理提交,并使用 GPG 对您的提交进行签名 |
| [创建分支](/docs/user/project/repo/web-editor.md#create-a-new-branch)[创建](/docs/user/project/repo/web-editor.md#create-a-file)[上传](/docs/user/project/repo/web-editor.md#upload-a-file)文件,并[创建目录](/docs/user/project/repo/web-editor.md#create-a-directory) | 创建分支,创建和上传文件以及创建目录|
| [删除已合并的分支](/docs/user/project/repo/branches.md#delete-merged-branches) | 合并更改后的批量删除分支|
| [文件模板](/docs/user/project/repo/web-editor.md#template-dropdowns) | 通用文件的文件模板 |
| [文件](/docs/user/project/repo.md#files) | 文件管理 |
| Jupyter Notebook 文件 | 对`.ipynb`文件的支持 |
| [保护分支](/docs/user/project/protected-branch.md) | 使用受保护的分支 |
| 推送规则| 对项目推送的附加控制 |
| [代码仓库](/docs/user/project/repo.md) | 在网页中管理源代码仓库 |
| 镜像代码仓库 | 推入或拉出外部的代码仓库 |
| [处理合并请求](/docs/user/project/repo/web-editor.md#tips) | 在提交时启动合并请求 |
[返回概览](#概览)
#### 合并请求[](#合并请求 "Permalink")
| 创建主题-合并请求 | 描述 |
| --- | --- |
| 在本地处理合并请求 | 在本地处理合并请求的提示|
| [Cherry-pick](/docs/user/project/merge-request/cherry-pick.md) | 对更改进行 Cherry Pick |
| [Merge request thread resolution](/docs/user/discussions.md#moving-a-single-thread-to-a-new-issue) | 解析线程,将合并请求中的线程移至问题,并且仅在解决所有线程后才允许合并请求 |
| [合并请求](/docs/user/project/merge-request.md) | 合并请求管理 |
| [草稿合并请求](/docs/user/project/merge-request/draft.md) | 防止合并草稿合并请求 |
[返回概览](#概览)
## 刚开始使用Git/CODEChina/GitLab/Github?[](#刚开始使用git吗 "Permalink")
使用新系统可能让您觉得难以入手,我们有以下文档可快速提升您的相关知识:
| 主题 | 描述 |
| --- | --- |
| Basics guides | 开始在命令行和 CODEChina 上工作 |
| Workflow overview | 利用最佳的工作流程增强您的工作流程 |
| [Markdown](/docs/user/markdown.md) | 高级格式化系统(Markdown) |
[返回概览](#概览)
### 账户管理[](#账户管理 "Permalink")
了解有关帐户管理的更多信息:
| 主题 | 描述 |
| --- | --- |
| [用户账号](/docs/user/account.md) | 管理您的帐户 |
| 账号验证 | 设置您的 SSH 密钥,并部署密钥以安全地访问您的项目 |
| [用户权限](/docs/user/permissions.md) | 了解项目中的每个角色可以做什么 |
[返回概览](#概览)
### Git 和 CODEChina[](#Git和CODEChina "Permalink")
了解有关使用 Git 以及将 Git 与 CODEChina 结合使用的更多信息:
| 主题 | 描述 |
| --- | --- |
| Git | Git 入门,分支策略,Git LFS 和高级用法 |
| [Git cheat sheet](https://about.gitlab.com/images/press/git-cheat-sheet.pdf) | 下载描述最常用的 Git 操作的 PDF|
| Work Flow| 使用 Work Flow 策略探索 Git 的精华 |
[返回概览](#概览)
## 从另一个平台进入到 CODEChina?[](#从另一个平台进入到codechina "Permalink")
如果您是从另一个平台进入 CODEChina,您会发现以下有用信息:
| 主题 | 描述 |
| --- | --- |
| [导入项目](/docs/user/project/import.md) | 从 GitHub,Bitbucket,GitLab.com,FogBugz 和 SVN 导入项目 |
| 从SVN迁移 | 将 SVN 存储库转换为 Git 和 CODEChina |
[返回概览](#概览)
## 为CODEChina开源做贡献[](#为codehina开源做贡献 "Permalink")
CODEChina 是开源的,您可以通过以下方式为我们的开源社区做出贡献:
| 主题 | 描述 |
| --- | --- |
| 开发 | 如何在开发上做贡献 |
| 协议 | 贡献者许可协议 |
| 文档 | 如何在文档上做贡献|
[返回概览](#概览)
\ No newline at end of file
# Summary
* [首页](README.md)
* [概览](docs/overview.md)
* [组织](docs/user/org.md)
* [子组织](docs/user/org/sub_org.md)
* [项目](docs/user/project.md)
* [徽章](docs/user/project/badges.md)
* [批量编辑](docs/user/project/bulk-edit.md)
* [新建项目](docs/basic/create-project.md)
* [描述模板](docs/user/project/description-template.md)
* [文件查找](docs/user/project/repo/file-find.md)
* [合并请求](docs/user/project/merge-request.md)
* [允许协作](docs/user/project/merge-request/fork-collaboration.md)
* [创建合并请求](docs/user/project/merge-request/create-merge-request.md)
* [Cherry-pick](docs/user/project/merge-request/cherry-pick.md)
* [快进合并](docs/user/project/merge-request/fast-forward.md)
* [解决冲突](docs/user/project/merge-request/resolve-conflicts.md)
* [还原](docs/user/project/merge-request/revert.md)
* [评审及管理](docs/user/project/merge-request/reviewing.md)
* [Squash合并](docs/user/project/merge-request/squash.md)
* [合并请求版本](docs/user/project/merge-request/versions.md)
* [草稿](docs/user/project/merge-request/draft.md)
* [项目成员](docs/user/project/member.md)
* [导入](docs/user/project/import.md)
* [Github](docs/user/project/import/github.md)
* [URL](docs/user/project/import/by-url.md)
* [Releases](docs/user/project/releases.md)
* [代码仓库](docs/user/project/repo.md)
* [分支](docs/user/project/repo/branches.md)
* [Git属性](docs/user/project/git-attr.md)
* [文件指责](docs/user/project/repo/blame.md)
* [文件历史记录](docs/user/project/repo/history.md)
* [保护分支](docs/user/project/protected-branch.md)
* [保护Tag](docs/user/project/protected-tag.md)
* [减少仓库大小](docs/user/project/repo/reduce-repo-size.md)
* [GPG签名提交](docs/user/project/repo/gpg-sign.md)
* [文件编辑](docs/user/project/repo/web-editor.md)
* [WebIDE](docs/user/project//webide.md)
* [项目设置](docs/user/project/settings.md)
* [与群组共享项目](docs/user/project/member/share.md)
* [wiki](docs/user/project/wiki.md)
* [Issues](docs/user/project/issues.md)
* [机密Issue](docs/user/project/issues/confidential.md)
* [关联Issue](docs/user/project/issues/crosslinking.md)
* [截止日期](docs/user/project/issues/due-date.md)
* [看板](docs/user/project/kanban.md)
* [操作Issue](docs/user/project/issues/actions.md)
* [标签](docs/user/project/label.md)
* [管理Issue](docs/user/project/issues/manage.md)
* [里程碑](docs/user/project/milestone.md)
* [Issue排序](docs/user/project/issues/sort.md)
* [用户](docs/user.md)
* [举报用户](docs/user/abuse.md)
* [用户账号](docs/user/account.md)
* [登录日志](docs/user/account/logs.md)
* [用户权限](docs/user/permissions.md)
* [个人访问令牌](docs/user/profile/token.md)
* [个人偏好](docs/user/profile/preferences.md)
* [探讨](docs/user/discussions.md)
* [SSH密钥](docs/ssh.md)
* [快捷键](docs/user/shortcutkey.md)
* [Markdown](docs/user/markdown.md)
* [电子邮件通知](docs/user/account/email-notify.md)
* [快速操作](docs/user/project/quick-actions.md)
* [自动填充](docs/user/project/autofill.md)
* [预留命名空间](docs/user/reserved.md)
* [搜索](docs/user/search.md)
* [时间跟踪](docs/user/project/time-track.md)
* [待办事项](docs/user/todo.md)
\ No newline at end of file
{
"title" : "CODEChina帮助文档",
"author" : "Miykael",
"description" : "CODEChina开源社区用户使用及帮助文档",
"language" : "zh-hans",
"links" : {
"sidebar" : {
}
},
"plugins" : [
"favicon",
"back-to-top-button",
"popup",
"theme-fexa",
"-sharing",
"sharing-plus",
"tbfed-pagefooter",
"chapter-fold",
"-lunr",
"-search",
"search-pro"
],
"variables": {
"themeFexa":{
"nav":[
{
"url":"/",
"target":"_blank",
"name": "开始使用"
}
]
}
},
"pluginsConfig": {
"favicon": {
"shortcut": "/docs/img/logo-s.png",
"bookmark": "/docs/img/logo-s.png",
"appleTouch": "/docs/img/logo-s.png",
"appleTouchMore": {
"120x120": "",
"180x180": "/docs/img/logo-s.png"
}
},
"theme-fexa":{
"search-placeholder":"输入关键字搜索",
"logo":"/docs/img/logo.png",
"favicon": "",
"url":"/"
},
"sharing": {
"douban": true,
"facebook": false,
"google": false,
"qq": true,
"qzone": true,
"twitter": false,
"weibo": true,
"all": [
"douban", "facebook", "google", "instapaper", "linkedin","twitter", "weibo",
"messenger","qq", "qzone","viber","whatsapp"
]
},
"tbfed-pagefooter": {
"copyright":"Copyright &copy CODECHINA 2020",
"modify_label": "该文件修订时间:",
"modify_format": "YYYY-MM-DD HH:mm:ss"
}
}
}
\ No newline at end of file
文件已添加
# 新建项目[](#create-a-project "Permalink")
开发中大多数工作都在一个[项目](/docs/user/project/repo.md)完成,文件和代码都保存在项目中,并且大多数功能都将在项目范围内使用。
## 新建一个项目[](#create-a-project "Permalink")
您可以按照以下步骤新建一个项目:
1. 点击导航栏中的加号图标并点击新建项目,这将打开" **新建项目"**页面
2. 在" **新建项目"**页面上,可以选择:
* 创建一个[空白项目](#blank-projects)
* 使用可用的[项目模板](#project-templates)之一创建一个项目
* 从其他第三方导入一个项目,目前支持 github 以及 url 导入这两种方式
**注意:**有关不能用作项目名称的单词列表,请参见[保留的项目和组名称](/docs/user/reserved.md)
### 空项目[](#blank-projects "Permalink")
要在" **新建项目"**页面上创建一个新的空白项目,请执行以下操作:
1. 在" **空白项目"**选项卡上,提供以下信息:
* **项目名称****项目名称**字段中. 您不能使用特殊字符,但可以使用空格,连字符,下划线甚至表情符号;添加名称时, **项目 URL**将自动填充(仅在项目名称不含中文时会自动填充)
* **项目 URL**字段中项目的路径是项目的 URL 路径
* 使用" **项目描述"(可选)**字段,您可以为项目的仪表板输入描述,这将帮助其他人了解您的项目的含义;尽管不是必需的,但我们建议您还是填写上您的项目简介。
* 更改" **可见性级别"**会修改用户的项目查看和访问权限
* 选择**使用 README 初始化存储库**选项将创建一个 README 文件,以便 Git 存储库被初始化,具有默认分支并可以被克隆
2. 点击 **新建项目**
### 项目模板[](#project-templates "Permalink")
项目模板可以使用必要的文件预填充新项目,以使您快速入门。
有两种类型的项目模板:
* [内置模板](#built-in-templates) ,来自以下组:
* [`project-templates`](https://gitlab.com/gitlab-org/project-templates)
* [`pages`](https://gitlab.com/pages)
* [自定义项目模板](#custom-project-templates-premium)
#### 内置模板[](#built-in-templates "Permalink")
内置模板是项目模板,它们是:
*[`project-templates`](https://gitlab.com/gitlab-org/project-templates)[`pages`](https://gitlab.com/pages)组中开发和维护
* 与 GitLab 一起发布
要在" **新建项目"**页面上使用内置模板,请执行以下操作:
1. 在" **从模板创建"**选项卡上,选择" **内置模板"**选项卡
2. 从可用的内置模板列表中,单击:
* **预览**按钮以查看模板源本身
* **使用模板**按钮开始创建项目
3. 通过填写项目的详细信息来完成创建项目, 该过程与创建[空白项目](#blank-projects)相同
#### 自定义项目模板[](#custom-project-templates-premium "Permalink")
自定义项目可以从**实例**选项卡,或在组级别从**组**选项卡,在**从模板**标签上的**创建** ,创建过程与内置模板创建项目基本一致。
\ No newline at end of file
# 帮助文档
## 概览[](#概览 "Permalink")
欢迎您使用CODEChina,如果您是 Github 或 GitLab 的初级用户,我们建议您从查看本文档开始学习如何使用 CODEChina。如果您熟悉以上两个产品中的一个或多个,您可以直接开始 CODEChina 产品,在产品中我们也会为您设置帮助提示,您可以随时回来查看我们的产品文档。
| 基础入门 | 基本入门 |
| --- | --- |
| [**用户文件**](/docs/user.md)熟悉CODEChina 中的功能和概念. |[**是 Git 和 GitLab/GitHub 的新手吗?**](#刚开始使用gitcodechinagitlabgithub)我们有资源可以帮助您入门 |
| [**为 CODEChina 做贡献**](#为codechina开源做贡献)为CODEChina开源贡献力量! | [**从另一个平台进入 CODEChina?**](#从另一个平台进入到-codechina)请查阅我们的便捷指南 |
## 热门话题[](#热门话题 "Permalink")
以下是我们推荐的一些主题:
### 计划[](#计划 "Permalink")
无论您使用 Waterfall,敏捷还是会话开发,CODEChina 均可简化您的协作工作流程。
使用 CODEChina 灵活的项目管理工具可视化,确定优先级,协调和跟踪进度。
以下文档与 DevOps **计划**阶段有关:
| 计划主题 | 描述 |
| --- | --- |
| Burndown Charts| 在特定的里程碑中观察项目的进度 |
| [讨论](/docs/user/discussions.md) | 问题,提交和合并请求中的线程,注释和可解决线程 |
| [截止日期](/docs/user/project/issues/due-date.md) | 跟踪发行期限|
| Epics | 跟踪共享主题的问题组|
| [ Issue ](/docs/user/project/issues.md) ,包括[机密问题](/docs/user/project/issues/confidential.md)[发布和合并请求模板](/docs/user/project/description-template.md) ,和[移动的问题](/docs/user/project/issues/manage.md#moving-issues) | 项目问题并限制对问题的访问,并创建用于提交新问题和合并请求的模板。 此外,在项目之间转移问题|
| [标签](/docs/user/project/label.md) | 分类问题或使用描述性标签合并请求|
| [里程碑](/docs/user/project/milestone.md) | 设置发布问题和合并请求的里程碑,并带有可选的截止日期|
| [看板](/docs/user/project/kanban.md) | 在 Scrum 或看板上显示问题|
| [快捷方式](/docs/user/shortcutkey.md) | 针对问题或合并请求的常见操作的快捷方式,而无需单击按钮或在WEB界面中使用下拉菜单 |
| [关联 Issue](/docs/user/project/issues/crosslinking.md) | 在问题之间建立关系 |
| Roadmap | 可视化史诗般的时间表 |
| [时间跟踪](/docs/user/project/time-track.md) | 跟踪花费在问题和合并请求上的时间 |
| [代办事项](/docs/user/todo.md) | 通过在简单仪表板上显示的时间顺序列表,跟踪需要注意的工作 |
[返回概览](#概览)
### 新建[](#新建 "Permalink")
将源代码整合到一个易于管理和控制的[分布式版本控制系统中](https://en.wikipedia.org/wiki/Distributed_version_control) ,而不会中断您的工作流程。
CODEChina 存储库随附分支工具和访问控制,可为项目和代码的协作提供可扩展的单一事实来源。
以下文档与 DevOps **新建**阶段有关:
#### 项目和组织[](#项目和组织 "Permalink")
| 创建主题-项目和组 | 描述 |
| --- | --- |
| 全局搜索 | 利用 Elasticsearch 在整个 CODEChina 实例上进行更快,更高级的代码搜索|
| 语法检索 | 使用高级查询获得更具针对性的搜索结果|
| Contribution analytics | 请参阅小组贡献者的详细统计信息|
| [创建](/docs/basic/create-project.md)并 fork 项目,以及[导入项目](/docs/user/project/import.md) | 创建,复制和移动项目 |
| 锁定文件 | 锁定文件以避免合并冲突 |
| [组织](/docs/user/org.md) and [子组织](/docs/user/org/sub_org.md) | 分组组织您的项目 |
| Issue 分析 | 检查每月创建了多少个问题|
| [项目](/docs/user/project.md) ,包括项目访问和[设置](/docs/user/project/settings.md) | 托管源代码,并控制项目的可见性和设置配置。|
| [搜索](/docs/img/add_user_search_people.png) | 搜索问题,合并请求,项目,组和待办事项。|
| [Web IDE](/docs/user/project/webide.mdl) | 在 WebIDE 中编辑文件|
| [Wikis](/docs/user/project/wiki.md) | 使用内置的 Wiki 来管理您的文档|
[返回概览](#概览)
#### 代码仓库[](#代码仓库 "Permalink")
| 创建主题-代码仓库 | 描述 |
| --- | --- |
| [分支](/docs/user/project/repo/branches.md)[默认分支](/docs/user/project/repo/branches.md#default-branch) | 如何在 CODEChina 中使用分支 |
| [提交](/docs/user/project/repo.md#commits) and [署名提交](/docs/user/project/repo/gpg-sign.md) | 处理提交,并使用 GPG 对您的提交进行签名 |
| [创建分支](/docs/user/project/repo/web-editor.md#create-a-new-branch)[创建](/docs/user/project/repo/web-editor.md#create-a-file)[上传](/docs/user/project/repo/web-editor.md#upload-a-file)文件,并[创建目录](/docs/user/project/repo/web-editor.md#create-a-directory) | 创建分支,创建和上传文件以及创建目录|
| [删除已合并的分支](/docs/user/project/repo/branches.md#delete-merged-branches) | 合并更改后的批量删除分支|
| [文件模板](/docs/user/project/repo/web-editor.md#template-dropdowns) | 通用文件的文件模板 |
| [文件](/docs/user/project/repo.md#files) | 文件管理 |
| Jupyter Notebook 文件 | 对`.ipynb`文件的支持 |
| [保护分支](/docs/user/project/protected-branch.md) | 使用受保护的分支 |
| 推送规则| 对项目推送的附加控制 |
| [代码仓库](/docs/user/project/repo.md) | 在网页中管理源代码仓库 |
| 镜像代码仓库 | 推入或拉出外部的代码仓库 |
| [处理合并请求](/docs/user/project/repo/web-editor.md#tips) | 在提交时启动合并请求 |
[返回概览](#概览)
#### 合并请求[](#合并请求 "Permalink")
| 创建主题-合并请求 | 描述 |
| --- | --- |
| 在本地处理合并请求 | 在本地处理合并请求的提示|
| [Cherry-pick](/docs/user/project/merge-request/cherry-pick.md) | 对更改进行 Cherry Pick |
| [Merge request thread resolution](/docs/user/discussions.md#moving-a-single-thread-to-a-new-issue) | 解析线程,将合并请求中的线程移至问题,并且仅在解决所有线程后才允许合并请求 |
| [合并请求](/docs/user/project/merge-request.md) | 合并请求管理 |
| [草稿合并请求](/docs/user/project/merge-request/draft.md) | 防止合并草稿合并请求 |
[返回概览](#概览)
## 刚开始使用Git/CODEChina/GitLab/Github?[](#刚开始使用git吗 "Permalink")
使用新系统可能让您觉得难以入手,我们有以下文档可快速提升您的相关知识:
| 主题 | 描述 |
| --- | --- |
| Basics guides | 开始在命令行和 CODEChina 上工作 |
| Workflow overview | 利用最佳的工作流程增强您的工作流程 |
| [Markdown](/docs/user/markdown.md) | 高级格式化系统(Markdown) |
[返回概览](#概览)
### 账户管理[](#账户管理 "Permalink")
了解有关帐户管理的更多信息:
| 主题 | 描述 |
| --- | --- |
| [用户账号](/docs/user/account.md) | 管理您的帐户 |
| 账号验证 | 设置您的 SSH 密钥,并部署密钥以安全地访问您的项目 |
| [用户权限](/docs/user/permissions.md) | 了解项目中的每个角色可以做什么 |
[返回概览](#概览)
### Git 和 CODEChina[](#Git和CODEChina "Permalink")
了解有关使用 Git 以及将 Git 与 CODEChina 结合使用的更多信息:
| 主题 | 描述 |
| --- | --- |
| Git | Git 入门,分支策略,Git LFS 和高级用法 |
| [Git cheat sheet](https://about.gitlab.com/images/press/git-cheat-sheet.pdf) | 下载描述最常用的 Git 操作的 PDF|
| Work Flow| 使用 Work Flow 策略探索 Git 的精华 |
[返回概览](#概览)
## 从另一个平台进入到 CODEChina?[](#从另一个平台进入到codechina "Permalink")
如果您是从另一个平台进入 CODEChina,您会发现以下有用信息:
| 主题 | 描述 |
| --- | --- |
| [导入项目](/docs/user/project/import.md) | 从 GitHub,Bitbucket,GitLab.com,FogBugz 和 SVN 导入项目 |
| 从SVN迁移 | 将 SVN 存储库转换为 Git 和 CODEChina |
[返回概览](#概览)
## 为CODEChina开源做贡献[](#为codehina开源做贡献 "Permalink")
CODEChina 是开源的,您可以通过以下方式为我们的开源社区做出贡献:
| 主题 | 描述 |
| --- | --- |
| 开发 | 如何在开发上做贡献 |
| 协议 | 贡献者许可协议 |
| 文档 | 如何在文档上做贡献|
[返回概览](#概览)
\ No newline at end of file
# SSH密钥[](#ssh "Permalink")
Git 是一个分布式版本控制系统,这意味着您可以在本地工作. 此外,您还可以将更改共享或"推送"到其他服务器. CODEChina 支持使用 SSH 密钥在 Git 及其服务器之间进行安全通信.
SSH 协议提供的这种安全机制,并允许您向 CODEChina 远程服务器进行身份验证,而无需每次都提供用户名或密码,我们推荐您使用这种方式来作为您推拉代码的凭据。
通过阅读本文档可以帮助您配置安全的 SSH 密钥,这些密钥可用于帮助保护与 CODEChina 代码仓库的安全连接。
* 如果您需要有关创建 SSH 密钥的信息,请从我们的[ SSH 密钥选项](#options-for-ssh-keys)开始
* 如果您有专用于 CODEChina 帐户的 SSH 密钥,则可能对[使用非默认 SSH 密钥对路径](#working-with-non-default-ssh-key-pair-paths)感兴趣
* 如果您已经有了 SSH 密钥对,则可以转到[将 SSH 密钥添加到 CODEChina 帐户的方法](#adding-an-ssh-key-to-your-gitlab-account)
## 环境要求[](#requirements "Permalink")
为了支持 SSH,CODEChina 需要安装 OpenSSH 客户端,该客户端已预装在 GNU / Linux 和 macOS 上,但未预先安装在 Windows 上。
我们要求您使用 SSH 6.5 或更高版本,因为它不包括现在不安全的 MD5 签名。您可以通过下命令查看系统上安装的 SSH 版本:
```
ssh -V
```
## SSH 密钥选项[](#options-for-ssh-keys "Permalink")
CODEChina 支持使用 RSA,DSA,ECDSA 和 ED25519 密钥。
**提示:**现有文档表明 ED25519 更安全,如果使用 RSA 密钥,则美国国家科学技术研究院[出版物 800-57 第 3 部分(PDF)](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf)建议密钥大小至少为 2048 位。
因此,我们主要介绍 ED25519 和 RSA 这两种密钥的使用方法。
## 查看现有的 SSH 密钥[](#review-existing-ssh-keys "Permalink")
如果您已有 SSH 密钥,则可以使用它们来与 CODEChina 的代码库进行连接。 默认情况下,Linux 和 macOS 系统上的 SSH 密钥存储在用户的主目录中的`.ssh/`子目录中,下表包括每种 SSH 密钥算法的默认文件名:
| 算法 | 公钥 | 私钥 |
| --- | --- | --- |
| ED25519(首选) | `id_ed25519.pub` | `id_ed25519` |
| RSA(至少 2048 位密钥大小) | `id_rsa.pub` | `id_rsa` |
| DSA(已弃用) | `id_dsa.pub` | `id_dsa` |
| ECDSA | `id_ecdsa.pub` | `id_ecdsa` |
有关建议,请查看[SSH 密钥的选项](#options-for-ssh-keys)
## 生成 SSH 密钥[](#generating-a-new-ssh-key-pair "Permalink")
SSH 密钥的生成方式如下:
* ED25519 密钥,请查看[ED25519 SSH 密钥](#ed25519-ssh-keys)
* RSA 密钥,请查看[RSA SSH 密钥](#rsa-ssh-keys)
### ED25519 SSH keys[](#ed25519-ssh-keys "Permalink")
[Practical Cryptography With Go](https://leanpub.com/gocrypto/read#leanpub-auto-chapter-5-digital-signatures) 一书中表明 [ED25519](https://ed25519.cr.yp.to/) 密钥比 RSA 密钥更为安全。
2014年 OpenSSH 6.5 引入 ED25519 SSH 密钥后,当前任何操作系统都可用使用这种密钥。
您可以使用以下命令创建和配置 ED25519 密钥:
```
ssh-keygen -t ed25519 -C "<comment>"
```
`-C`(例如带引号注释的电子邮件地址)是标记 SSH 密钥的可选方法。
您将看到类似于以下内容的响应:
```
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
```
要获得指导,请继续执行[常见步骤](#common-steps-for-generating-an-ssh-key-pair) .
### RSA SSH 密钥[](#rsa-ssh-keys "Permalink")
如果您使用 RSA 密钥生成 SSH 密钥,则我们建议您至少使用 [ 2048 位](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf)的密钥大小. 默认情况下, `ssh-keygen`命令创建一个 1024 位 RSA 密钥.
您可以使用以下命令创建和配置 RSA 密钥,如果需要,可以生成建议的最小密钥大小`2048`
```
ssh-keygen -t rsa -b 2048 -C "email@example.com"
```
`-C`标志(例如带引号注释的电子邮件地址)是标记 SSH 密钥的可选方法。
您将看到类似于以下内容的响应:
```
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
```
要获得指导,请继续执行[常见步骤](#common-steps-for-generating-an-ssh-key-pair)
**注意:**如果您使用 7.8 或更低版本的 OpenSSH,请参考与[编码](#rsa-keys-and-openssh-from-versions-65-to-78)相关的问题。
### SSH 密钥生成步骤[](#common-steps-for-generating-an-ssh-key-pair "Permalink")
无论是创建[ED25519](#ed25519-ssh-keys)还是创建[RSA](#rsa-ssh-keys)密钥,您都从`ssh-keygen`命令开始。此时,您将在命令行中看到以下消息(以 ED25519 密钥为例):
```
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
```
如果您还没有 SSH 密钥对并且也没有生成[部署密钥](#deploy-keys) ,您可以按照系统提示的建议选择 SSH 密钥存储的文件和目录,SSH 客户端将使用默认配置来生成您的 SSH 密钥。
当然,您也可以将新生成的 SSH 密钥保存在其他位置。您可以选择要分配的目录和文件名,您还可以为专用的[特定主机](#working-with-non-default-ssh-key-pair-paths) 生成SSH 密钥。
在选择 SSH 密钥的保存路径后,您可以为 SSH 密钥设置[密码](https://www.ssh.com/ssh/passphrase/)
```
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
如果成功,您将看到有关`ssh-keygen`命令将标识和私钥保存在何处的确认信息。
如有需要,您也可以使用以下命令更新密码:
```
ssh-keygen -p -f /path/to/ssh_key
```
### OpenSSH 6.5 ~ 7.8 的 RSA 密钥[](#rsa-keys-and-openssh-from-versions-65-to-78 "Permalink")
在 OpenSSH 7.8 之前,RSA 密钥的默认公共密钥指纹基于 MD5,因此并不安全。
如果您的 OpenSSH 版本介于 6.5 至 7.8(含)之间,请使用`-o`选项运行`ssh-keygen` ,以更安全的 OpenSSH 格式保存您的 SSH 私钥。
如果您已经具有可用于 CODEChina 的 RSA SSH 密钥,请考虑对其进行升级以使用更安全的密码加密格式。 您可以使用以下命令进行操作:
```
ssh-keygen -o -f ~/.ssh/id_rsa
```
或者,您可以使用以下命令以更安全的加密格式生成新的 RSA 密钥:
```
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
```
**注意:**ED25519 已将密钥加密为更安全的 OpenSSH 格式。
## 在您的 CODEChina 账号中添加 SSH 密钥[](#adding-an-ssh-key-to-your-account "Permalink")
现在,您可以将创建好的 SSH 密钥复制到您的 CODEChina 帐户。您可以参考以下步骤:
1. 从以文本格式保存 SSH 密钥的位置复制您的**公共** SSH 密钥,以下命令可以将 ED25519 的信息保存到指定操作系统的剪贴板中:
**macOS:**
```
pbcopy < ~/.ssh/id_ed25519.pub
```
**Linux(需要 xclip 软件包):**
```
xclip -sel clip < ~/.ssh/id_ed25519.pub
```
**Windows 上的 Git Bash:**
```
cat ~/.ssh/id_ed25519.pub | clip
```
如果您使用的是 RSA 密钥,相应地替换即可。
2. 打开`https://codechina.csdn.net`并登录
3. 选择右上角的头像,然后单击**设置**
4. 单击 **SSH 密钥**.
5. 将复制的公共密钥粘贴到**密钥**文本框中.
6.**标题**文本框中设置您密钥的名称,例如 *工作笔记本电脑**家用电脑*
7. 在"过期于"中设置密钥的过期日期(可选)
8. 单击**添加密钥**按钮
按照上述步骤添加的 SSH 密钥即使"过期"后在工作流程中仍然有效,由于配置的到期日期信息并不包含在 SSH 密钥本身中,因此您仍然可以根据需要导出公共 SSH 密钥。
**注意:**如果您手动复制了公共 SSH 密钥,请确保复制了整个密钥,以`ssh-ed25519` (或`ssh-rsa` )开头,并以您的电子邮件地址结尾。
## 测试 SSH 密钥是否能够正常工作[](#testing-that-everything-is-set-up-correctly "Permalink")
要测试是否正确添加了 SSH 密钥,可以在终端中运行以下命令:
```
ssh -T git@codechina.csdn.net
```
在您第一次通过 SSH 方式连接到 CODEChina的时候,将会询问您是否信任将要连接的 CODEChina host地址。当确认 `yes` 后,会将 CODEChina 作为已知主机添加到受信任的 hosts 地址中:
```
The authenticity of host 'codechina.csdn.net (121.36.6.22)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'codechina.csdn.net' (ECDSA) to the list of known hosts.
```
一旦添加到已知主机列表中,将不再要求您再次验证 CODEChina 主机的真实性。 再次运行以上命令时,您将只收到*欢迎使用 CODEChina 的`@username` !* 信息。
如果未出现欢迎消息,则可以通过使用以下命令在详细模式下运行`ssh`来解决问题:
```
ssh -Tv git@codechina.csdn.net
```
## 使用非默认路径的 SSH 密钥[](#working-with-non-default-ssh-key-pair-paths "Permalink")
如果您为 SSH 密钥对使用了非默认文件路径,请配置 SSH 客户端以指向 CODEChina 私有 SSH 密钥。
可以运行以下命令进行配置:
```
eval $(ssh-agent -s)
ssh-add <path to private SSH key>
```
以上设置将会保存到`~/.ssh/config`文件中。以下是两个专用于 CODEChina 的 SSH 密钥示例:
```
# CODEChina
Host codechina.csdn.net
Preferredauthentications publickey
IdentityFile ~/.ssh/codechina_rsa
# Github instance
Host github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/example_github_rsa
```
公共 SSH 密钥对于 CODEChina 必须是唯一的,因为它们将绑定到您的账号中。 SSH 密钥是通过 SSH 推送代码时唯一的标识符,这是为什么它需要唯一地映射到单个用户的原因。
## 为项目设置 SSH 密钥[](#per-repository-ssh-keys "Permalink")
如果要根据正在使用的项目代码仓库使用不同的密钥,则可以在代码仓库中执行以下命令:
```
git config core.sshCommand "ssh -o IdentitiesOnly=yes -i ~/.ssh/private-key-filename-for-this-repository -F /dev/null"
```
这不使用 SSH 代理,并且至少需要 Git 2.10.
## 多账号设置[](#multiple-accounts-on-a-single-gitlab-instance "Permalink")
[为项目设置 SSH 密钥](#per-repository-ssh-keys)方法还适用于在 CODEChina 中使用多个账号的情况。
此外,您也可以直接在`~.ssh/config`为主机分配别名。 如果在`.ssh/config`中的`Host`块之外设置了`IdentityFile` ,则 SSH 和作为扩展的 Git 将无法登录. 这是 SSH 组装`IdentityFile`条目的方式,因此不能通过将`IdentitiesOnly`设置为`yes`来更改. `IdentityFile`条目应指向 SSH 密钥对的私钥。
**注意:**私钥和公钥应仅由用户读取,通过运行以下`chmod 0400 ~/.ssh/<example_ssh_key>`在 Linux 和 macOS 上完成此操作: `chmod 0400 ~/.ssh/<example_ssh_key>``chmod 0400 ~/.ssh/<example_sh_key.pub>`
```
# User1 Account Identity Host <user_1.codechina.csdn.net>
Hostname codechina.csdn.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/<example_ssh_key1>
# User2 Account Identity Host <user_2.codechina.csdn.net>
Hostname codechina.csdn.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/<example_ssh_key2>
```
**注意:**为提高效率和透明度,示例`Host`别名定义为`user_1.codechina.csdn.net``user_2.codechina.csdn.net` 。 高级配置难以维护,使用这种别名在使用其他工具(如`git remote`子命令)时会更容易理解。 SSH 可以将任何字符串理解为`Host`别名,因此`Tanuki1``Tanuki2`尽管提供了很少的上下文指向它们,也可以使用.
克隆`CODEChina`代码仓库通常如下所示:
```
git clone git@gcodechina.csdn.net:repo-org/repo.git
```
要为`user_1`克隆它,请将`codechina.csdn.net`替换为 SSH 别名`user_1.codechina.csdn.net`
```
git clone git@<user_1.codechina.csdn.net>:repo-org/repo.git
```
使用`git remote`命令可以修复以前克隆的代码仓库。
以下的示例假定远程代码仓库被别名为`origin`
```
git remote set-url origin git@<user_1.codechina.csdn.net>:repo-org/repo.git
```
### Eclipse[](#eclipse "Permalink")
如果使用的是[EGit](https://www.eclipse.org/egit/) ,则可以[将 SSH 密钥添加到 Eclipse](https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration) .
### Windows系统[](#options-for-microsoft-windows "Permalink")
如果您运行的是 Windows 10, [适用于 Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10)[Windows 子系统(WSL)](https://docs.microsoft.com/en-us/windows/wsl/install-win10)及其最新的[WSL 2](https://docs.microsoft.com/en-us/windows/wsl/install-win10#update-to-wsl-2)版本,则支持安装不同的 Linux 发行版,其中包括 Git 和 SSH 客户端。
对于当前版本的 Windows,您还可以通过[Git for Windows](https://gitforwindows.org)安装 Git 和 SSH 客户端。
替代工具包括:
* [Cygwin](https://www.cygwin.com)
* [PuttyGen](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
## 故障排除[](#troubleshooting "Permalink")
如果在 Git Clone 上,系统会提示您输入密码,例如`git@codechina.csdn.net's password:`,则表明您的 SSH 设置有问题。
* 确保您正确地生成了 SSH 密钥,并将公共 SSH 密钥添加到了您 CODEChina 账号的 SSH 密钥中
* 尝试使用`ssh-agent`手动注册您的私有 SSH 密钥,如本文档前面所述
* 尝试通过运行`ssh -Tv git@codechina.csdn.net`调试连接
\ No newline at end of file
# 用户文档[](#user "Permalink")
欢迎您开始使用CODEChina作为您的项目/开源项目代码托管平台!
CODEChina 是一个基于 Git 的平台,它集成了许多用于软件开发和部署以及项目管理的基本工具:
* 通过版本控制在代码仓库中托管代码
* 使用功能齐全的[Issues](/project/issues#issues-list)跟踪有关新功能开发、错误报告及反馈的建议
* 组织和管理Issue(/project/issues#issue-boards)优先次序
* 使用Review Apps查看[合并请求](/project/merge_requests)中每个分支中更改的代码并实时预览
* 使用内置的CI/CD构建,测试和部署
* 使用Pages部署个人/专业静态网站
* 通过使用容器注册表与 Docker 集成
* 通过使用价值流分析跟踪开发生命周期
* 提供[服务台](/project/service_desk)支持
## 项目[](#project "Permalink")
您可以创建[项目](project)来托管代码,跟踪问题,在代码上进行协作。或者,您可以在一个项目中完成下列所有操作:
* [代码仓库](/project/repo.md) :将[代码库](/project/repo)托管在具有版本控制的存储库中,并作为完全集成平台的一部分
* [Issues](/project/issues) :探索 Issue
* [合并请求](/project/merge_requests) :在代码,评论,每个分支的实时预览更改方面进行协作,并通过合并请求来批准请求
* [里程碑](/project/milestone) :在设置的里程碑日期前处理多个Issue及合并请求
## 账号[](#account "Permalink")
您可以自定义和配置以下内容:
* [设置](/account) :管理用户设置以更改您的个人信息,个人访问令牌,授权的应用程序等
* [权限](/permissions) :了解每种用户类型(访客,记者,开发人员,维护人员,所有者)的不同权限级别集
* [abuse](/abuse) :向我们的审核人员举报用户的滥用或违规情况
## 组织[](#organization "Permalink")
通过建立[组织](/org)您可以将相关项目组合在一起,并授予成员一次访问多个项目的权限。
您也可以在组织中嵌套[子组织](/org/sub_org)
## 探讨[](#discussions "Permalink")
您可以在 Issue、合并请求、及提交中添加注释、评论并@相关人员,点击[了解更多](/discussions)
### Markdown[](#markdown "Permalink")
您可以在[markdown](/docs/user/markdown.md)中了解如何在主题、注释、Issue 及合并请求以及所有支持markdonw的其他地方来使用markdown填写你的内容。
## 待办事项[](#todo "Permalink")
[代办事项](/todo)可以让你与组织成员更快速、高效地进行写作,它会将所有用户或组织 @你的内容,也包括你被指派的 Issue 及合并请求,让你不会遗漏任何一个协助者的回复。
## 搜索[](#search "Permalink")
[搜索和筛选](/search)组织、项目、Issue、合并请求、文件以及代码等内容。
## 快捷键[](#shortcutkey "Permalink")
CODEChina中支持许多[快捷键](/shortcutkey) ,帮助您更方便的在页面之间进行切换、更快地完成任务。
## Webhooks[](#webhooks "Permalink")
配置webhook]以侦听特定事件,例如推送,问题或合并请求。CODEChina会将相关数据通过 POST 请求发送到 webhook 中配置的 URL 中。
\ No newline at end of file
# 举报用户[](#举报用户 "Permalink")
您可以举报其他用户的违规行为。我们的审核人员在收到您的举报后会对举报内容进行核实,并对被举报用户进行相应的处理。
您可以通过以下方式报告用户:
- 举报用户
- 从个人主页举报用户
- 从评论举报用户
- 通过 Issue 或合并请求举报用户
## 从个人主页举报用户[](#reporting-abuse-through-a-users-profile "Permalink")
可以通过以下步骤从用户的个人资料页面举报滥用行为:
1. 单击用户个人头像下方的感叹号报告滥用按钮
2. 完成滥用情况报告
3. 点击**发送报告**按钮
## 从评论举报用户[](#reporting-abuse-through-a-users-comment "Permalink")
要报告用户评论中的滥用行为,请执行以下操作:
1. 单击垂直省略号(⋮)其他操作按钮以打开下拉列表
2. 选择 **举报为滥用**
3. 完成滥用情况报告
4. 点击**发送报告**按钮
**注意:**在滥用情况报告的" **消息"**字段中,将预先填写报告用户评论的 URL
## 通过 Issue 或合并请求举报用户[](#reporting-abuse-through-a-users-issue-or-merge-request "Permalink")
**报告滥用**按钮显示在 Issue 或合并请求的右上方:
* 对于有权关闭 Issue 或合并请求的用户,从单击" **关闭 Issue"**或" **关闭合并请求"**按钮时出现的菜单中选择**"报告滥用**情况"
* 对于没有权限关闭问题或合并请求的用户,在查看问题或合并请求时
显示" **举报滥用行为"**按钮后,要提交滥用行为报告:
1. 点击**举报滥用行为**按钮
2. 提交滥用情况报告
3. 点击**发送报告**按钮
**注意:**在滥用情况报告的" **消息"**字段中,将预先填写报告用户的问题或合并请求的 URL
\ No newline at end of file
# 用户账号[](#用户账号 "Permalink")
您的个人资料请前往 [CSDN 个人中心](https://i.csdn.net/#/uc/profile) 进行修改设置,修改后的资料我们将在您下次一登录 CODEChina 的时候进行同步更新。
## 个人资料[](#user-profile "Permalink")
要访问您的个人资料设置:
1. 单击您的头像
2. 单击**设置**
从那里,您可以:
* 更新您的个人信息
* 为您的个人资料设置[自定义状态](#current-status)
* 管理您的个人资料的[提交电子邮件](#commit-email)
* 管理[个人访问令牌](/docs/user/profile/token.md)以通过 API 和授权的应用程序访问您的帐户
* 选择用于[通知](/docs/user/account/email-notify.md) ,基于 Web 的提交并显示在您的公开个人资料上的电子邮件
* 管理[SSH 密钥](/docs/ssh.md)以通过 SSH 访问您的帐户
* 管理您的[首选项](/docs/user/profile/preferences.md#syntax-highlighting-theme)
* 查看您的活动会话并在必要时撤消其中的任何一个
* 访问认证日志,这是涉及您帐户的重要事件的安全日志
## 当前状态[](#current-status "Permalink")
您可以自定义自己目前的状态消息以及描述它的表情符号。 当您不在办公室或不在家时,这可能会有所帮助:其他用户可以在回答您的 Issue 或为您分配工作时考虑您的当前状态。 请注意,即使您的个人资料是私人的,您的状态也是公开可见的。
状态消息限制为 100 个纯文本字符.。但是,它们可能包含表情符号代码,例如" `I'm on vacation :palm_tree:`
设置当前状态:
1. 单击您的头像
2. 点击**设置状态** ,或点击**编辑状态(**如果您已经设置了状态)
3. 设置所需的表情符号和/或状态消息
4. 点击**设置状态** ;或者,您可以单击" **删除状态"**以完全删除您的用户状态
或者:
1. 单击您的头像.
2. 单击 **用户资料**
3. 单击**单用资料**选项卡
4.**您当前的状态**输入框中输入您的状态
5. 点击**添加状态表情符号** (笑脸),然后选择所需的表情符号
6. 点击**更新个人资料设置**
\ No newline at end of file
# 电子邮件通知[](#电子邮件通知 "Permalink")
通知使您可以随时了解 CODEChina 中发生的事情,启用通知后,您可以接收有关 Issue、合并请求和 Epic 活动的更新,通知将通过电子邮件发送。
## 接收通知[](#receiving-notifications "Permalink")
您将由于以下原因之一收到通知:
* 您参与 Issue、合并请求或 Epic,在这种情况下, *参与*意味着评论或编辑
* 您在 Issue、合并请求或 Epic 中启用了通知。要启用通知,请单击侧栏中的**通知**切换至*开*
启用通知后,您将收到有关该 Issue、合并请求或 Epic 中发生的操作的通知。
**注意:**通知可能会被管理员阻止,从而阻止发送通知。
## 调整你的通知[](#tuning-your-notifications "Permalink")
通知的数量可能是巨大的,CODEChina 允许您调整收到的通知。例如,您可能希望收到有关特定项目中所有活动的通知,而对于其他项目,仅当您的名字被提及时才得到通知。
您可以通过组合通知设置来调整收到的通知:
* [全局通知设置]](#global-notification-settings)
* [通知范围](#notification-scope)
* [通知级别](#notification-levels)
### 编辑通知设置[](#editing-notification-settings "Permalink")
编辑通知设置:
1. 点击您的个人资料图片,然后选择**设置**
2. 点击左侧边栏中的**通知**
3. 编辑所需的通知设置,编辑的设置将自动保存并启用
这些通知设置仅适用于您,它们不会影响同一项目或组中其他任何人收到的通知。
## 全局通知设置[](#global-notification-settings "Permalink")
**全局通知设置**是默认设置,除非您为项目或组选择不同的值:
* 通知电子邮件
* 这是您的通知将发送到的电子邮件地址
* 全局通知级别
* 这是适用于所有通知的默认[通知级别](#notification-levels)
* 接收有关您自己的活动的通知
* 如果您想接收有关自己活动的通知,请选中此复选框。 默认值:未选中
### 通知范围[](#notification-scope "Permalink")
您可以通过为每个项目和组选择不同的通知级别来调整通知的范围。
通知范围按优先级顺序应用(从高到低):
* 项目
* 对于每个项目,您可以选择一个通知级别,您的项目设置将覆盖组设置
* 组织
* 对于每个组,您可以选择一个通知级别,您的群组设置会覆盖您的默认设置
* 全局(默认)
* 如果尚未为发生活动的项目或组选择通知级别,则将应用全局或*默认*通知级别
#### 项目通知[](#project-notifications "Permalink")
您可以为每个项目选择一个通知级别,如果您需要密切监视选定项目中的活动,这将很有用。
要为项目选择通知级别,请使用以下两种方法之一:
1. 点击您的个人资料图片,然后选择**设置**
2. 点击左侧边栏中的**通知**
3. 在" **项目"**部分中找到该项目
4. 选择所需的[通知级别](#notification-levels)
或者:
1. 导航到项目页面
2. 单击带有下拉图标的通知下拉列表
3. 选择所需的[通知级别](#notification-levels)
#### 组织通知[](#group-notifications "Permalink")
您可以为每个组织选择通知级别和电子邮件地址。
##### 组织通知级别[](#group-notification-level "Permalink")
要为组选择通知级别,请使用以下两种方法之一:
1. 点击您的个人资料图片,然后选择**设置**
2. 点击左侧边栏中的**通知**
3. 在" **组"**部分中找到该项目
4. 选择所需的[通知级别](#notification-levels)
* * *
1. 导航到组的页面
2. 单击带有下拉图标的通知下拉列表
3. 选择所需的[通知级别](#notification-levels)
##### 组织通知邮件地址[](#group-notification-email-address "Permalink")
您可以选择一个电子邮件地址,以接收您所属的每个组的通知。例如,如果您是自由职业者,并且希望将有关客户项目的电子邮件分开存放,这可能会很有用。
1. 点击您的个人资料图片,然后选择**设置**
2. 点击左侧边栏中的**通知**
3. 在" **组织"**部分中找到该项目
4. 选择所需的电子邮件地址
### 通知级别[](#notification-levels "Permalink")
对于每个项目和组织,您可以选择以下级别之一:
| 级别 | 描述 |
| --- | --- |
| 全局 | 您的全局设置适用 |
| 关注 | 接收任何活动的通知 |
| 提及 | `@mentioned`在评论中`@mentioned`接收通知 |
| 参与 | 接收有关您参与的线程的通知 |
| 停用 | 关闭通知 |
| 自定义 | 接收有关自定义选定事件的通知|
## 通知事件[](#notification-events "Permalink")
将通知用户以下事件:
| 事件 | 发给 | 设定等级 |
| --- | --- | --- |
| 添加了新的 SSH 密钥 | User | 安全电子邮件,始终发送|
| 添加了新电子邮件 | User | 安全电子邮件,始终发送|
| 电邮已变更 | User | 安全电子邮件,始终发送 |
| 密码已更改 | User | 安全电子邮件,始终发送 |
| 用户已添加到项目 | User | 将用户添加到项目时发送 |
| 项目访问权限级别已更改 | User | 更改用户项目访问级别时发送 |
| 用户已添加到组 | User | 将用户添加到组时发送 |
| 群组访问权限级别已更改 | User | 更改用户组访问级别时发送 |
| 项目已移 | 项目成员(1) | (1)不禁用 |
| 新品发布 | 项目成员 | 自定义通知 |
## Issue / Epic / 合并请求活动[](#issue--epics--merge-request-events "Permalink")
在以下大多数情况下,通知将发送到:
* 参与:
* 发行/合并请求的作者和受让人
* 关于问题/合并请求的评论的作者
* `@username`在问题,合并请求或史诗的标题或描述中提到的任何人
* `@username`在有关问题,合并请求或史诗的任何评论中提及的"参与"或更高通知级别的任何人
* 观察者:通知级别为"观察"的用户
* 订阅者:手动订阅问题,合并请求或史诗的任何人
* 自定义:通知级别为"自定义"的用户针对下表中显示的任何事件打开了通知
| Event | 发给 |
| --- | --- |
| 新问题 |   |
| 结束期 |   |
| 重新分配问题 | 以上,加上旧的受让人 |
| 重新打开问题 |   |
| 到期问题 | 选择此事件的参与者和自定义通知级别 |
| 更改里程碑问题 | 选择了此事件的订户,提及的参与者和自定义通知级别 |
| 消除里程碑问题 | 选择了此事件的订户,提及的参与者和自定义通知级别 |
| 新合并请求 |   |
| 推送合并请求 | 选择此事件的参与者和自定义通知级别 |
| 重新分配合并请求 | 以上,加上旧的受让人 |
| 关闭合并请求 |   |
| 重新打开合并请求 |   |
| 合并合并请求 |   |
| 更改里程碑合并请求 | 选择了此事件的订户,提及的参与者和自定义通知级别 |
| 删除里程碑合并请求 | 选择了此事件的订户,提及的参与者和自定义通知级别 |
| 新评论 | 以上内容,加上评论中`@username`提及的任何人,通知级别为"提及"或更高 |
| 新史诗 |   |
| 接近史诗 |   |
| 重新开启史诗 |   |
此外,如果发布或合并请求的标题或描述发生了更改,则通知将通过`@username`发送到任何**新**提及的内容,就像在原始文本中提到的一样。
您不会收到有关您自己创建的问题,合并请求或里程碑的通知(除非由于问题而定)。仅当其他人对您创建或提及的内容进行评论或添加更改时,您才会收到自动通知。
如果开放的合并请求由于冲突而变得不可合并,则将通知其原因。
## 过滤 email[](#filtering-email "Permalink")
通知电子邮件包括特定于 CODEChina 的标题。您可以根据这些标头的内容过滤通知电子邮件,以更好地管理您的通知。 例如,您可以过滤特定项目的所有电子邮件,在该项目中您将被分配合并请求或问题。
下表列出了所有特定于 CODEChina 的电子邮件标题:
| 标题 | 描述 |
| --- | --- |
| `X-GitLab-Group-Id` | 组的 ID,仅在史诗的通知电子邮件中显示 |
| `X-GitLab-Group-Path` | 组的路径,仅在史诗的通知电子邮件中显示 |
| `X-GitLab-Project` | 通知所属的项目的名称 |
| `X-GitLab-Project-Id` | 项目的 ID |
| `X-GitLab-Project-Path` | 项目的路径 |
| `X-GitLab-(Resource)-ID` | 通知所针对的资源的 ID,该资源例如可以是`Issue``MergeRequest``Commit`或其他此类资源 |
| `X-GitLab-Discussion-ID` | 注释所属的线程的 ID,用于注释的通知电子邮件中 |
| `X-GitLab-Pipeline-Id` | 通知所针对的管道的 ID,在管道的通知电子邮件中.|
| `X-GitLab-Reply-Key` | 支持通过电子邮件回复的唯一令牌 |
| `X-GitLab-NotificationReason` | 通知原因. 可以`mentioned``assigned``own_activity` |
| `List-Id` | The path of the project in an RFC 2919 mailing list identifier. This is useful for email organization with filters, for example |
### X-GitLab-NotificationReason[](#x-gitlab-notificationreason "Permalink")
`X-GitLab-NotificationReason`标头包含`X-GitLab-NotificationReason`的原因,该值是按优先级顺序的以下值之一:
* `own_activity`
* `assigned`
* `mentioned`
通知的原因也包含在通知电子邮件的页脚中, 例如有原因的电子邮件`assigned`都会有这句话的注脚:
* `You are receiving this email because you have been assigned an item on <configured GitLab hostname>.`
**注意:**正在考虑将其他事件的通知包含在`X-GitLab-NotificationReason`标头中,有关详细信息,请参见此[相关问题](https://gitlab.com/gitlab-org/gitlab/-/issues/20689)
\ No newline at end of file
# 登录日志[](#logs "Permalink")
CODEChina 列出了已登录到您帐户的所有设备,这使您可以查看会话,并撤销所有您不认识的会话。
## 列出所有活动会话[](#listing-all-active-sessions "Permalink")
1. 单击您的头像
2. 单击 **设置**
3. 点击边栏中的**活动会话**
## 活动会话限制[](#active-sessions-limit "Permalink")
CODEChina 允许用户一次拥有多达 100 个活动会话,如果活动会话数超过 100,则最早的会话将被删除。
## 撤消一个会话[](#revoking-a-session "Permalink")
1. 使用前面的步骤导航到" **活动会话"**
2. 单击除会话外的**撤消**,当前会话无法撤消,因为这将使您退出 CODEChina。
\ No newline at end of file
# 讨论[](#讨论 "Permalink")
您可以在以下位置发表评论:
* Issues
* Epics
* 合并要求
* 提交
* diff
除了标准的评论形式外,您还可以选择以话题讨论的方式创建评论, 收到回复后,评论也将是[话题讨论](#start-a-thread-by-replying-to-a-standard-comment) 的形式。
评论区域支持[Markdown](/docs/user/markdown.md)[快速操作](/docs/user/project/quick-actions.md) , 您可以随时编辑自己的评论,拥有" [maintainer"](/docs/user/permissions.md)或更高权限的用户也可以编辑其他人的评论。
您还可以通过回复评论通知电子邮件来回复评论,回复标准评论会创建另一个标准评论。回复主题评论会在主题中创建回复,电子邮件回复支持[Markdown](/docs/user/markdown.md)[快速操作](/docs/user/project/quick-actions.md)
**注意:**每个对象最多只能有 5,000 条评论,例如:issue,epic 及合并请求。
## 可解决的评论及讨论[](#resolvable-comments-and-threads "Permalink")
讨论有助于跟踪计划和代码审查的进度。
合并请求,提交,提交差异和代码片中的每个评论或讨论初始状态都显示为未解决,具有Developer及以上权限的任何人或所检查的更改的作者都可以单独解决这些问题。即使该讨论已解决,如果非成员没有解决他们自己的响应,讨论也不会标记为解决;如果非成员解决了相同的答复,则讨论会被标记为已解决。
解决所有评论或讨论可以防止您忘记处理反馈,并可以隐藏不再相关的线程。
### 在合并请求的上下文中发起讨论[](#commit-threads-in-the-context-of-a-merge-request "Permalink")
对于具有基于提交的工作流的审阅者,在合并请求的上下文中将讨论添加到特定的提交差异上可能很有用。 在以下情况下,这些讨论将通过提交ID更改来保持不变:
* Rebase后强行提交代码
* 修改提交的评论
可以按照以下步骤创建提交差异讨论:
1. 导航到合并请求的" **提交"**选项卡,将显示构成合并请求的提交列表
2. 进入选定的提交,单击" **更改"**选项卡(在该选项卡中,将仅显示与所选提交不同的内容),并提交评论
[![Commit diff discussion in merge request context](/docs/img/commit_comment_mr_context.png)](/docs/img/commit_comment_mr_context.png)
3. 以这种方式创建的任何讨论都将显示在合并请求的"**讨论"**选项卡中,并且可以解决
以这种方式创建的线程将仅出现在原始合并请求中,而不是在项目的" **代码">"提交"**页面下的**提交**中。
**提示:**在合并请求内的讨论中引用的提交的链接时,它将在当前合并请求的上下文中自动转换为链接。
### 解决话题跳转[](#jumping-between-unresolved-threads "Permalink")
当合并请求中包含大量评论时,可能很难跟踪未解决的评论。 您可以使用讨论上"回复"字段旁边的"跳转"按钮在未解决的讨论之间快速跳转。
您还可以使用快捷键在讨论之间导航:
* 使用`n`跳到下一个未解决的线程.
* 使用`p`跳到上一个未解决的线程.
### 将评论或讨论标记为已解决[](#marking-a-comment-or-thread-as-resolved "Permalink")
您可以通过单击**讨论**底部的" **解决讨论"**按钮将其标记为已解决。
[!["Resolve thread" button](/docs/img/resolve_thread_button.png)](/docs/img/resolve_thread_button.png)
或者,您可以将每个评论单独标记为已解决。
[!["Resolve comment" button](/docs/img/resolve_comment_button.png)](/docs/img/resolve_comment_button.png)
### 在合并请求中所有未解决讨论转为 Issue[](#move-all-unresolved-threads-in-a-merge-request-to-an-issue "Permalink")
要在新 Issue 中解决当前自合并请求中的所有未解决的讨论时,可以单击" **再新问题中解决所有讨论"**的按钮。
[![Open new issue for all unresolved threads](/docs/img/btn_new_issue_for_all_threads.png)](/docs/img/btn_new_issue_for_all_threads.png)
或者,当您的项目仅[在解决所有讨论](#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved)后才接受合并请求[](#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved) ,在合并请求部件中会有一个创建一个新 Issue 以便稍后解决的选项。
### 将单个讨论转变成 Issue[](#moving-a-single-thread-to-a-new-issue "Permalink")
要从单个讨论创建新 Issue时,可以使用" **在新问题中解决此讨论"**按钮。
您将会跳转到预填充了讨论内容的新 Issue,类似于为一次委派多个讨论而创建的 Issue。创建 Issue 将把该讨论标记为已解决,并在合并请求讨论中添加引用新 Issue 的评论。
### 只有全部讨论内容解决后才允许合并[](#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved "Permalink")
在解决所有讨论之前,将不允许合并合并请求。
要使该设置生效,需要进入项目的设置页面,选中" **仅在解决所有讨论后才允许合并请求"**复选框,然后单击" **保存"**即可。
从现在开始,直到所有讨论解决后,您才能从网页上进行合并操作。
### Automatically resolve merge request diff threads when they become outdated[](#automatically-resolve-merge-request-diff-threads-when-they-become-outdated "Permalink")
在 GitLab 10.0 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14053) .
您可以在使用新的推送修改的行上自动解决合并请求差异线程.
导航到您的项目的设置页面,选中" **使用推送更改的行上****自动解析合并请求差异线程"**复选框,然后单击" **保存"**以使更改生效.
[![Automatically resolve merge request diff threads when they become outdated](/docs/img/a283d966822ac6a760d1a650273fbb3b.png)](/docs/img/automatically_resolve_outdated_discussions.png)
从现在开始,如果推送使 diff 部分过时,默认情况下将解决 diff 上的所有线程. 不变的线上线程和顶级可解析线程不会自动解析.
## 提交的讨论[](#commit-threads "Permalink")
您可以在项目的**代码> 提交**下向特定提交添加评论和讨论。
**注意:**如果在强制推送后更改了提交 ID,则以这种方式创建的讨论将丢失。
## 讨论的讨论[](#threaded-discussions "Permalink")
虽然可解决的讨论仅适用于合并请求的文件diff,但也可以添加与文件diff无关的讨论, 您可以针对 Issue,提交,摘要及合并请求添加一个看起来像讨论的特定讨论。
要开始讨论,请单击" **评论"**按钮切换下拉列表,选择" **开始讨论",**并在准备发布评论时单击" **开始讨论** "按钮。
这将以单个讨论的形式发起评论,使您可以更大的范围进行特定的讨论。
## 图片的讨论[](#image-threads "Permalink")
有时讨论会围绕图片展开。使用图片讨论,您可以轻松地定位图像的特定坐标并在其周围开启讨论。图片讨论在合并请求详情和提交的详情页面中可用。
要启动图片讨论,请将鼠标悬停在图片上。当您的鼠标指针转换为图标时,表示该图片可用于讨论,此时只需单击图片上的任意位置以创建新的讨论即可。
单击图片后,将显示新建评论输入框,保存评论后,您会在图像顶部看到一个新的徽章,此徽章代表您的讨论。
## 锁定讨论[](#lock-discussions "Permalink")
对于有较多贡献者参与的大型项目,在以下场景中禁用讨论将会非常地有帮助:
* 项目维护者已经解决了该问题,无需更多的后续反馈
* 项目维护者已经将新讨论指向了新的 Issue 或合并请求
* 参与讨论者的讨论内容比较随意、辱骂或是无益的产品建议
在这些情况下,项目中具有开发者权限或更高权限的用户可以使用边栏中的"锁定"按钮来锁定/解锁 问题或合并请求. 对于问题,具有记者权限的用户可以锁定/解锁。
在锁定的问题或合并请求中,只有团队成员才能添加新评论和编辑现有评论,非团队成员无法添加或编辑评论。
## 合并请求评审[](#merge-request-reviews "Permalink")
查看"合并请求"差异时,您可以开始审阅,您可以在"合并请求"中创建**仅**在发布之前才对**您可见的**评论,以便您可以将所有评论作为单个操作提交。
### 开始评审[](#starting-a-review "Permalink")
为了开始审阅,只需像往常一样在合并请求的" **更改"**选项卡下对差异添加评论,然后单击" **开始审阅"**按钮。
当开始审阅后,审阅内容部分中所有的评论都会被标记为`Pending`,同时所有审阅中的评论都会显示两个按钮:
* **完成审阅** :提交**审阅中的**所有评论,使其他用户可以看到它们
* **立即添加评论** :提交常规评论,而不是审阅的一部分
您可以在评论中使用[快速操作](/docs/user/project/quick-actions.md) ,评论也将会显示提交评论后即将执行的操作。
要向评论添加更多评论,请照常开始写评论,然后单击**添加到评论**按钮,这会将评论添加到评论中。
# Markdown[](#Markdown "Permalink")
我们建议您使用 Markdown 来书写相关文档或者需求描述。您可以在以下区域使用 Markdown
* 评论
* Issues
* 合并请求
* 里程碑
* 代码段(代码段必须以`.md`扩展名命名)
* Wiki
* 仓库中的 Markdown 文档
* Epics
## GitLab Flavored Markdown (GFM)[](#gitlab-flavored-markdown-gfm "Permalink")
我们使用的是 " GitLab Flavored Markdown"(GFM). 它以几种方式扩展了[CommonMark 规范](https://spec.commonmark.org/current/) (基于标准 Markdown),以添加其他有用的功能。它的灵感来自[GitHub Flavored Markdown](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax) ,以下为 GFM 的[官方介绍文档](https://docs.gitlab.com/ee/user/markdown.html)
### 从 Redcarpet 过渡到 CommonMark[](#transition-from-redcarpet-to-commonmark "Permalink")
从 11.1 开始,GitLab 使用[CommonMark Ruby 库](https://github.com/gjtorikian/commonmarker)[Markit](https://github.com/gjtorikian/commonmarker)处理 GitLab 系统中的所有新问题,合并请求,注释和其他 Markdown 内容. 从 11.3 开始,存储库中的 Wiki 页面和 Markdown 文件( `*.md` )也将通过 CommonMark 处理. 从 11.8 开始, [Redcarpet Ruby 库](https://github.com/vmg/redcarpet)已被删除,所有问题和注释,包括 11.1 之前的问题和注释,现在都可以使用[CommonMark Ruby Library 处理](https://github.com/gjtorikian/commonmarker) .
该文档网站的[Markdown 引擎](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/108)已于 2018 年 10 月[从 Redcarpet 迁移到 Kramdown](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/108) .
您的代码仓库中可能存在使用较旧的 Markdown 语法编写的 Issue、合并请求或 Markdown 文档。这些文档使用的是 GitLab 的 RedCarpet 版本,由于 CommonMark 使用了稍微严格的语法,因此自我们过渡到 CommonMark 以来,这些文档现在看起来可能会稍微有所不同。
这个问题通常很容易修复,例如,带嵌套列表的编号列表可能会错误显示:
```
1. Chocolate
- dark
- milk
```
只需在每个嵌套项目中添加一个空格即可使`-`与顶部列表项的第一个字符对齐(本例中为`C` ):
```
1. Chocolate
- dark
- milk
```
1. Chocolate
* dark
* milk
**注意:**我们将在本文档中标记 Redcarpet 和 CommonMark Markdown 之间的全部重大差异。
如果您有大量的 Markdown 文件,确定它们是否正确显示可能很繁琐. 您可以使用[diff_redcarpet_cmark](https://gitlab.com/digitalmoksha/diff_redcarpet_cmark)工具(不是官方支持的产品)来生成文件列表以及 RedCarpet 和 CommonMark 呈现文件的方式之间的差异. 它可以指示是否需要更改任何内容-通常不需要更改.
### GFM extends standard Markdown[](#gfm-extends-standard-markdown "Permalink")
GitLab 充分利用了标准(CommonMark)格式,但还包括对 GitLab 用户有用的附加功能.
它利用了[Markdown](#new-GFM-markdown-extensions)[新功能](#new-GFM-markdown-extensions) ,这些[功能](#new-GFM-markdown-extensions)是标准 Markdown 所没有的:
* [Color “chips” written in HEX, RGB or HSL](#colors)
* [Diagrams and flowcharts](#diagrams-and-flowcharts)
* [Emoji](#emoji)
* [Front matter](#front-matter)
* [Inline diffs](#inline-diff)
* [Math equations and symbols written in LaTeX](#math)
* [Special GitLab references](#special-gitlab-references)
* [Task Lists](#task-lists)
* [Table of Contents](#table-of-contents)
* [Wiki specific Markdown](#wiki-specific-markdown)
它还具有[扩展的 Markdown 功能](#standard-markdown-and-extensions-in-gitlab) ,而无需更改标准 Markdown 的使用方式:
| 标准 Markdown语法 | GitLab 中扩展的 Markdown 语法|
| --- | --- |
| [blockquotes](#blockquotes) | [multi-line blockquotes](#multiline-blockquote) |
| [code blocks](#code-spans-and-blocks) | [colored code and syntax highlighting](#colored-code-and-syntax-highlighting) |
| [emphasis](#emphasis) | [multiple underscores in words](#multiple-underscores-in-words-and-mid-word-emphasis) |
| [headers](#headers) | [linkable Header IDs](#header-ids-and-links) |
| [images](#images) | [embedded videos](#videos) and [audio](#audio) |
| [line breaks](#line-breaks) | [more line break control](#newlines) |
| [links](#links) | [automatically linking URLs](#url-auto-linking) |
## New GFM Markdown extensions[](#new-gfm-markdown-extensions "Permalink")
### Colors[](#colors "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#colors) .
可以使用颜色标识呈现以 HEX,RGB 或 HSL 格式书写的颜色。
支持的格式(不支持命名的颜色):
* HEX: ``#RGB[A]`` or ``#RRGGBB[AA]``
* RGB: ``RGB[A](R, G, B[, A])``
* HSL: ``HSL[A](H, S, L[, A])``
反引号内的颜色后面将带有色值的"色块":
```markdown
- `#F00`
- `#F00A`
- `#FF0000`
- `#FF0000AA`
- `RGB(0,255,0)`
- `RGB(0%,100%,0%)`
- `RGBA(0,255,0,0.3)`
- `HSL(540,70%,50%)`
- `HSLA(540,70%,50%,0.3)`
```
* `#F00`
* `#F00A`
* `#FF0000`
* `#FF0000AA`
* `RGB(0,255,0)`
* `RGB(0%,100%,0%)`
* `RGBA(0,255,0,0.3)`
* `HSL(540,70%,50%)`
* `HSLA(540,70%,50%,0.3)`
### 框架图和流程图[](#diagrams-and-flowcharts "Permalink")
可以使用[Mermaid](https://mermaid-js.github.io/mermaid/#/)[PlantUML](https://plantuml.com)从 GitLab 中的文本生成图表和流程图。
#### Mermaid[](#mermaid "Permalink")
在 GitLab 10.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15107)
访问[官方页面](https://mermaid-js.github.io/mermaid/#/)以获取更多详细信息. 如果您不熟悉使用 Mermaid,或者需要帮助来确定 Mermaid 代码中的问题,则[Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor/)是一个有用的工具,可用于在 Mermaid 中创建和解决问题。
为了生成图表或流程图,您应该在`mermaid`块内编写文本:
````markdown
```mermaid
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
```
````
```mermaid
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
```
子图也可以使用:
````markdown
```mermaid
graph TB
SubGraph1 --> SubGraph1Flow
subgraph "SubGraph 1 Flow"
SubGraph1Flow(SubNode 1)
SubGraph1Flow -- Choice1 --> DoChoice1
SubGraph1Flow -- Choice2 --> DoChoice2
end
subgraph "Main Graph"
Node1[Node 1] --> Node2[Node 2]
Node2 --> SubGraph1[Jump to SubGraph1]
SubGraph1 --> FinalThing[Final Thing]
end
```
````
```mermaid
graph TB
SubGraph1 --> SubGraph1Flow
subgraph "SubGraph 1 Flow"
SubGraph1Flow(SubNode 1)
SubGraph1Flow -- Choice1 --> DoChoice1
SubGraph1Flow -- Choice2 --> DoChoice2
end
subgraph "Main Graph"
Node1[Node 1] --> Node2[Node 2]
Node2 --> SubGraph1[Jump to SubGraph1]
SubGraph1 --> FinalThing[Final Thing]
end
```
### Emoji[](#emoji "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#emoji) .
```
Sometimes you want to :monkey: around a bit and add some :star2: to your :speech_balloon:. Well we have a gift for you:
:zap: You can use emoji anywhere GFM is supported. :v:
You can use it to point out a :bug: or warn about :speak_no_evil: patches. And if someone improves your really :snail: code, send them some :birthday:. People will :heart: you for that.
If you're new to this, don't be :fearful:. You can easily join the emoji :family:. All you need to do is to look up one of the supported codes.
Consult the [Emoji Cheat Sheet](https://www.emojicopy.com) for a list of all supported emoji codes. :thumbsup:
```
> **注意:**以上表情符号示例在本文档中使用了硬编码图像。 在 GitLab 中呈现时,表情符号可能会出现不同,具体取决于所使用的操作系统和浏览器。
大多数 emoji 表情在 macOS,Windows,iOS,Android 上都是支持的,并且不支持的情况一下也会将退回到基于图像的表情上。
**注意:**在 Linux 上,您可以下载[Noto Color Emoji](https://www.google.com/get/noto/help/emoji/)以获得完整的本机表情符号支持,Ubuntu 18.04(与许多现代 Linux 发行版一样)默认情况下已安装此字体。
### Front matter[](#front-matter "Permalink")
在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/23331) .
Front matter 是 Markdown 文档开头,内容之前的元数据。 静态站点生成器(例如[Jekyll](https://jekyllrb.com/docs/front-matter/)[Hugo](https://s0gohugo0io.icopy.site/content-management/front-matter/)和许多其他应用程序)可以使用此数据。
当您查看由 GitLab 渲染的 Markdown 文件时,任何 Front matter 都会按原样显示在文档顶部的框中,位于渲染的 HTML 内容之前。要查看示例,可以在[GitLab 文档文件](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/README.md)的源版本和渲染版本之间切换。
在 GitLab 中,仅在 Markdown 文件和 Wiki 页面中支持使用 Front matter ,而在其他支持 Markdown 格式的其他地方使用 Front matter 将无法生效。它必须在文档的最顶部,并且必须在定界符之间,如下所述:
支持以下定界符:
* YAML( `---` ):
```
---
title: About Front Matter
example:
language: yaml
---
```
* TOML( `+++` ):
```
+++
title = "About Front Matter"
[example]
language = "toml"
+++
```
* JSON( `;;;` ):
```
;;;
{
"title": "About Front Matter"
"example": {
"language": "json"
}
}
;;;
```
通过向任何现有定界符添加说明符来支持其他语言, 例如:
```
---php
$title = "About Front Matter";
$example = array(
'language' => "php",
);
---
```
### 行内 diff[](#inline-diff "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#inline-diff) 。
使用内联 diff 标签,您可以显示`{+ additions +}``[- deletions -]`
包装标签可以是大括号或方括号:
```
- {+ addition 1 +}
- [+ addition 2 +]
- {- deletion 3 -}
- [- deletion 4 -]
```
* {+加法 1 +}
* [+加法 2 +]
* {-删除 3-}
* [-删除 4-]
* * *
但是,包装标签不能混合使用:
```
- {+ addition +]
- [+ addition +}
- {- deletion -]
- [- deletion -}
```
如果您的差异包含``code``字体的单词,请确保使用反斜杠`\`来转义每个反引号``` ,否则差异突出显示将无法正确呈现:
```
- {+ Just regular text +}
- {+ Text with `backticks` inside +}
- {+ Text with escaped \`backticks\` inside +}
```
* {+普通文字+}
* {+带有`backticks`文字+}
* {+内含转义的`反引号'的文字+}
### 数学公式[](#math "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#math) 。
可以使用[KaTeX](https://github.com/KaTeX/KaTeX)渲染用 LaTeX 语法编写的数学运算。
在`$`符号之间写的数学将与文本内嵌,用声明为`math`的语言在[代码块中](#code-spans-and-blocks)编写的`math`将在单独的一行显示:
````markdown
This math is inline $`a^2+b^2=c^2`$.
This is on a separate line
```
math a^2+b^2=c^2
```
````
此数学`a^2+b^2=c^2`为内联$`a^2+b^2=c^2`$。
这是单独的一行:
```
a^2+b^2=c^2
```
*请注意,KaTeX 仅支持 LaTeX 的[子集](https://katex.org/docs/supported.html) .*
**注意:**这也适用于 Asciidoctor `:stem: latexmath` . 有关详细信息,请参见[Asciidoctor 用户手册](https://asciidoctor.org/docs/user-manual/#activating-stem-support) .
### Special GitLab references[](#special-gitlab-references "Permalink")
GFM 可以识别与 GitLab 相关的特殊参考. 例如,您可以轻松地引用项目中的问题,提交,团队成员甚至整个团队。GFM 会将引用转换为链接,以便您可以轻松地在它们之间导航.
此外,GFM 可以识别某些跨项目引用,并且还具有一个速记版本,可以引用同一命名空间中的其他项目。
GFM 将识别以下内容:
| references | input | 跨项目参考 | 同一命名空间下的快捷方式 |
| --- | --- | --- | --- |
| @用户 | `@user_name` |   |   |
| @组织 | `@group_name` |   |   |
| 整个团队 | `@all` |   |   |
| 项目 | `namespace/project>` |   |   |
| issue | `#123` | `namespace/project#123` | `project#123` |
| 合并请求 | `!123` | `namespace/project!123` | `project!123` |
| 代码片 | `$123` | `namespace/project$123` | `project$123` |
| epic | `&123` | `group1/subgroup&123` |   |
| 项目 id | `~123` | `namespace/project~123` | `project~123` |
| 单个词的标签名称 | `~bug` | `namespace/project~bug` | `project~bug` |
| 多词的标签名称 | `~"feature request"` | `namespace/project~"feature request"` | `project~"feature request"` |
| 范围标签按名称 | `~"priority::high"` | `namespace/project~"priority::high"` | `project~"priority::high"` |
| 项目里程碑 id | `%123` | `namespace/project%123` | `project%123` |
| 单个词的里程碑 | `%v1.23` | `namespace/project%v1.23` | `project%v1.23` |
| 多词的里程碑 | `%"release candidate"` | `namespace/project%"release candidate"` | `project%"release candidate"` |
| 特定提交 | `9ba12248` | `namespace/project@9ba12248` | `project@9ba12248` |
| 对比指定提交 | `9ba12248...b19a04f5` | `namespace/project@9ba12248...b19a04f5` | `project@9ba12248...b19a04f5` |
| 文件引用 | `[README](doc/README)` |   |   |
| 文件行引用 | `[README](doc/README#L13)` | &nbsp;  | &nbsp;  |
除此之外,还可以识别和格式化指向某些对象的链接, 这些示例包括:
* 对问题的评论: `"https://gitlab.com/gitlab-org/gitlab/-/issues/1234#note_101075757"` ,它将呈现为`#1234 (note1)`
* 问题设计标签: `"https://gitlab.com/gitlab-org/gitlab/-/issues/1234/designs"` ,该标签将显示为`#1234 (designs)` .
* 链接到各个设计: `"https://gitlab.com/gitlab-org/gitlab/-/issues/1234/designs/layout.png"` ,它将呈现为`#1234[layout.png]` .
### 任务列表[](#task-lists "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#task-lists)。
您可以在支持 Markdown 的任何位置添加任务列表,如果它们处于 Issue、合并请求或评论中,可以通过"单击"切换状态。但在其他地方,您必须手动编辑 Markdown 以通过在方括号内添加或删除`x`来更改状态。
要创建任务列表,请添加特殊格式的 Markdown 列表, 您可以使用无序列表或有序列表:
```
- [x] Completed task
- [ ] Incomplete task
- [ ] Sub-task 1
- [x] Sub-task 2
- [ ] Sub-task 3
1. [x] Completed task
1. [ ] Incomplete task
1. [ ] Sub-task 1
1. [x] Sub-task 2
```
* [x]完成的任务
* []未完成的任务
* []子任务 1
* [x]子任务 2
* []子任务 3
1. [x] Completed task
2. []未完成的任务
1. []子任务 1
2. [x]子任务 2
### 目录[](#table-of-contents "Permalink")
通过在标记行上添加`[[_TOC_]]`标记,您可以将目录添加到 Markdown 文件,Wiki 页面或发布/合并请求描述中。 它将显示为链接到各种标题的无序列表。
```
This is an intro sentence to my Wiki page.
[[_TOC_]]
## My first heading
First section content.
## My second heading
Second section content.
```
### Wiki 内链 Markdown[](#wiki-specific-markdown "Permalink")
以下示例显示了如何使用 Wiki 的内部链接:
#### Wiki - 链接到页面[](#wiki---direct-page-link "Permalink")
仅包含页面的子弹的链接将指向该页面, *位于 Wiki 的基本级别*
该代码段将链接到 Wiki 根目录下的`documentation`页面:
```
[Link to Documentation](documentation)
```
#### Wiki - 链接到文件[](#wiki---direct-file-link "Permalink")
*相对于当前页面* ,带有文件扩展名的链接指向该文件。
如果下面的代码段放在`<your_wiki>/documentation/related`的页面上,它将链接到`<your_wiki>/documentation/file.md` :
```
[Link to File](file.md)
```
#### Wiki - hierarchical link[](#wiki---hierarchical-link "Permalink")
可以使用`./<page>` , `../<page>`来相对于当前 Wiki 页面构建链接.
如果此代码段放在`<your_wiki>/documentation/main`的页面上,它将链接到`<your_wiki>/documentation/related` :
```
[Link to Related Page](./related)
```
如果此代码段放在`<your_wiki>/documentation/related/content`的页面上,它将链接到`<your_wiki>/documentation/main` :
```
[Link to Related Page](../main)
```
如果此代码段放在`<your_wiki>/documentation/main`的页面上,它将链接到`<your_wiki>/documentation/related.md` :
```
[Link to Related Page](./related.md)
```
如果此代码段放在`<your_wiki>/documentation/related/content`的页面上,它将链接到`<your_wiki>/documentation/main.md` :
```
[Link to Related Page](../main.md)
```
#### Wiki - root link[](#wiki---root-link "Permalink")
以`/`开头的链接是相对于 Wiki 根目录的.
该代码段链接到`<wiki_root>/documentation` :
```
[Link to Related Page](/documentation)
```
该代码段链接到`<wiki_root>/miscellaneous.md` :
```
[Link to Related Page](/miscellaneous.md)
```
### Embedding metrics in GitLab Flavored Markdown[](#embedding-metrics-in-gitlab-flavored-markdown "Permalink")
公制图表可以嵌入到 GitLab 风味 Markdown 中。 有关更多详细信息,请参见在 GitLab 风格的 Markdown 中嵌入度量标准 。
## Standard Markdown and extensions in GitLab[](#standard-markdown-and-extensions-in-gitlab "Permalink")
所有标准 Markdown 格式均应在 GitLab 中按预期工作, 一些标准功能通过附加功能进行了扩展,而不会影响标准用法。 如果扩展了功能,则新选项将作为子节列出:
### Blockquotes[](#blockquotes "Permalink")
块引号是突出显示信息(如边注)的简便方法. 它是通过以`>`开头的 blockquote 行来生成的:
```
> Blockquotes are very handy to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
```
#### 多个引用块[](#multiline-blockquote "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#multiline-blockquote) 。
GFM 还支持`>>>`围起来的多行块引用,从而扩展了标准的 Markdown 标准:
```markdown
>>>
If you paste a message from somewhere else
that spans multiple lines,
you can quote that without having to manually prepend `>` to every line!
>>>
```
### Code spans and blocks[](#code-spans-and-blocks "Permalink")
您可以轻松突出显示应视为代码而非简单文本的任何内容,简单的内联代码很容易用单个反引号`\``突出显示:
```
Inline `code` has `back-ticks around` it.
```
* * *
同样,整个代码块可以用三个反引号( ````` ),三个波浪号( `~~~` )或缩进 4 个或更多的空格来围起来,以实现较大代码体的相似效果。
````markdwon
```python
def function():
#indenting works just fine in the fenced code block
s = "Python code"
print s
``` Using 4 spaces
is like using
3-backtick fences.
```
```
~~~
Tildes are OK too.
~~~
````
上面的三个示例呈现为:
```
def function():
#indenting works just fine in the fenced code block
s = "Python code"
print s
```
```
Using 4 spaces
is like using
3-backtick fences.
```
```
Tildes are OK too.
```
#### 代码块颜色及语法高亮[](#colored-code-and-syntax-highlighting "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#colored-code-and-syntax-highlighting) 。
GitLab 使用[Rouge Ruby 库](http://rouge.jneen.net/)在代码块中突出显示了更加丰富多彩的语法. 有关支持的语言的列表,请访问[Rouge 项目 Wiki](https://github.com/rouge-ruby/rouge/wiki/List-of-supported-languages-and-lexers) . 语法突出显示仅在代码块中受支持,因此在内联时无法突出显示代码.
代码块由带有三个反引号( ````` )或三个波浪号( `~~~` )的行围起来,并在第一个围栏的末尾标识了语言:
````markdown
```javascript
var s = "JavaScript syntax highlighting";
alert(s);
```
```python
def function():
#indenting works just fine in the fenced code block
s = "Python syntax highlighting"
print s
```
```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
``` No language indicated, so no syntax highlighting.
s = "There is no highlighting for this."
But let's throw in a <b>tag</b>.
```
````
上面的四个示例呈现为:
```
var s = "JavaScript syntax highlighting";
alert(s);
```
```
def function():
#indenting works just fine in the fenced code block
s = "Python syntax highlighting"
print s
```
```
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
```
No language indicated, so no syntax highlighting.
s = "There is no highlighting for this."
But let's throw in a <b>tag</b>.
```
### 强调[](#emphasis "Permalink")
在 Markdown 中有多种强调文本的方法,包括斜体,粗体,删除线,以及将这些强调样式结合在一起。
例如:
```
Emphasis, aka italics, with *asterisks* or _underscores_
Strong emphasis, aka bold, with double **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
```
**注意:**删除线不是 Markdown 核心标准的一部分,而是 GFM 的一部分。
#### Multiple underscores in words and mid-word emphasis[](#multiple-underscores-in-words-and-mid-word-emphasis "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#multiple-underscores-in-words)。
仅将单词的*一部分*斜体化通常是没有用的,尤其是当您要处理经常带有多个下划线的代码和名称时。 结果,GFM 通过忽略单词中的多个下划线来扩展了标准的 Markdown 标准,以更好地呈现讨论代码的 Markdown 文档:
```markdown
perform_complicated_task
do_this_and_do_that_and_another_thing
but_emphasis is_desired _here_
```
* * *
如果您只想强调单词的一部分,仍然可以使用星号来完成:
```markdown
perform*complicated*task
do*this*and*do*that*and*another thing
```
### 脚注[](#footnotes "Permalink")
脚注会添加指向注释的链接,该链接将在 Markdown 文件的末尾呈现。
要创建脚注,您既需要参考标记,又需要带有注释内容的单独行(文件中的任何地方)。
无论标签名称如何,参考标签的相对顺序都决定了呈现的编号。
参考标记可以使用字母和其他字符. 在解决[此错误](https://gitlab.com/gitlab-org/gitlab/-/issues/24423)之前,请避免在脚注标签名称中使用小写`w`或下划线( `_` )。
```
A footnote reference tag looks like this: [^1]
This reference tag is a mix of letters and numbers. [^footnote-42]
[^1]: This is the text inside a footnote.
[^footnote-42]: This is another footnote.
```
### 标题[](#headers "Permalink")
```
# H1
## H2
### H3
#### H4
##### H5
###### H6
此外, 对于 H1 and H2, 还可以通过下划线方式来实现:
Alt-H1
======
Alt-H2
------
```
#### 标题 ID 及连接[](#header-ids-and-links "Permalink")
GFM 扩展了标准 Markdown 标准,以便所有 Markdown 呈现的标头都自动获取 ID,可以将 ID 链接到该 ID(评论中除外)。
悬停时,将显示到这些 ID 的链接,从而可以更轻松地将链接复制到标头以在其他地方使用。
根据以下规则从标头的内容生成 ID:
1. 所有文本都将转换为小写
2. 删除所有非单词文本(例如标点符号或 HTML)
3. 所有空格都将转换为连字符
4. 连续的两个或多个连字符转换为1个
5. 如果标题已经存在,则会自动追加一个自增的数字来区别,通常从1开始
例如:
```
# This header has spaces in it
## This header has a :thumbsup: in it
# This header has Unicode in it: 한글
## This header has spaces in it
### This header has spaces in it
## This header has 3.5 in it (and parentheses)
```
将生成以下链接 ID:
1. `this-header-has-spaces-in-it`
2. `this-header-has-a-in-it`
3. `this-header-has-unicode-in-it-한글`
4. `this-header-has-spaces-in-it-1`
5. `this-header-has-spaces-in-it-2`
6. `this-header-has-3-5-in-it-and-parentheses`
请注意,表情符号处理是在生成标题 ID 之前进行的,因此表情符号将转换为图像,然后从 ID 中删除。
### 水平线[](#horizontal-rule "Permalink")
使用三个或多个连字符,星号或下划线来创建水平尺非常简单:
```
Three or more hyphens,
---
asterisks,
***
or underscores
___
```
### 图片[](#images "Permalink")
例如:
```
Inline-style (hover to see title text):
![alt text](img/markdown_logo.png "Title Text")
Reference-style (hover to see title text):
![alt text1][logo]
[logo]: img/markdown_logo.png "Title Text"
```
#### 视频[](#videos "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#videos) 。
链接到带有视频扩展名的文件的图像标签会自动转换为视频播放器. 有效的视频扩展名是`.mp4` , `.m4v` , `.mov` , `.webm`和`.ogv` :
```markdown
Here's a sample video:
![Sample Video](img/markdown_video.mp4)
```
#### 音频[](#audio "Permalink")
> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#audio) 。
与视频类似,带有音频扩展名的文件的链接标签会自动转换为音频播放器,有效的音频扩展名是`.mp3` , `.oga` , `.ogg` , `.spx`和`.wav` :
```markdown
Here's a sample audio clip:
![Sample Audio](img/markdown_audio.mp3)
```
### 行内 HTML[](#inline-html "Permalink")
> 要在第二个示例中[查看](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#inline-html)在 HTML 中呈现的 Markdown,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#inline-html) 。
您还可以在 Markdown 中使用原始 HTML,通常效果都很好。
有关允许的 HTML 标记和属性的列表,请参见 HTML :: Pipeline 的[SanitizationFilter](https://github.com/jch/html-pipeline/blob/v2.12.3/lib/html/pipeline/sanitization_filter.rb#L42)类的文档. 除了默认`SanitizationFilter`允许列表,GitLab 允许`span` , `abbr` , `details`和`summary`元素。
```
<dl>
<dt>Definition list</dt>
<dd>Is something people use sometimes.</dd>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. HTML <em>tags</em> will <b>work</b>, in most cases.</dd>
</dl>
```
仍然可以在 HTML 标记内使用 Markdown,但前提是包含 Markdown 的行分为各自的行:
```
<dl>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. HTML tags will work, in most cases.</dd>
<dt>Markdown in HTML</dt>
<dd>
Does *not* work **very** well. HTML tags will work, in most cases.
</dd>
</dl>
```
#### Details and summary[](#details-and-summary "Permalink")
> 要在第二个示例中[查看](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#details-and-summary)在 HTML 中呈现的 Markdown,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#details-and-summary) 。
可以使用 HTML 的[`<details>`](https://s0developer0mozilla0org.icopy.site/en-US/docs/Web/HTML/Element/details)和[`<summary>`](https://s0developer0mozilla0org.icopy.site/en-US/docs/Web/HTML/Element/summary)标记折叠内容. 这对于折叠长日志特别有用,因为它们占用更少的屏幕空间。
```
<p>
<details>
<summary>Click this to collapse/fold.</summary>
These details <em>will</em> remain <strong>hidden</strong> until expanded.
<pre><code>PASTE LOGS HERE</code></pre>
</details>
</p>
```
* * *
这些标记内的 Markdown 也受支持:
**注意:**如果 Markdown 无法正确呈现,请尝试在页面顶部添加`{::options parse_block_html="true" /}` ,然后将`markdown="span"`添加到开头的摘要标记中,如下所示: `<summary markdown="span">` .
请记住,在`</summary>`标记之后和`</details>`标记之前留空行,如示例所示:
````
<details>
<summary>Click this to collapse/fold.</summary>
These details _will_ remain **hidden** until expanded.
```
PASTE LOGS HERE
```
</details>
````
### 换行[](#line-breaks "Permalink")
如果先前的文本以两个换行符结尾,则会插入一个换行符(将开始一个新的段落),例如当您连续两次按`Enter 键`时. 如果仅使用一个换行符( `按`一次`Enter 键` ),则下一个句子将成为同一段落的一部分. 如果要避免长行换行并使它们易于编辑,这很有用:
```
Here's a line for us to start with.
This longer line is separated from the one above by two newlines, so it will be a *separate paragraph*.
This line is also a separate paragraph, but...
These lines are only separated by single newlines,
so they *do not break* and just follow the previous lines
in the *same paragraph*.
```
#### 新行[](#newlines "Permalink")
GFM 在[处理段落和换行符方面](https://spec.commonmark.org/current/)遵循 Markdown 规范。
段落是一个或多个连续的文本行,由一个或多个空行分隔(第一段末尾有两个新行), [如上所述](#line-breaks) 。
如果您需要对换行符或换行符进行更多控制,则可以通过以反斜杠或两个或多个空格结束一行来添加单个换行符,连续两个换行符将创建一个新的段落,中间有一个空行:
```
First paragraph.
Another line in the same paragraph.
A third line in the same paragraph, but this time ending with two spaces.{space}{space}
A new line directly under the first paragraph.
Second paragraph.
Another line, this time ending with a backslash.\
A new line due to the previous backslash.
```
### 链接[](#links "Permalink")
有两种创建链接的方法,即内联样式和引用样式:
```
- This is an [inline-style link](https://www.google.com)
- This is a [link to a repository file in the same directory](index.md)
- This is a [relative link to a readme one directory higher](../README.md)
- This is a [link that also has title text](https://www.google.com "This link takes you to Google!")
Using header ID anchors:
- This links to [a section on a different Markdown page, using a "#" and the header ID](index.md#overview)
- This links to [a different section on the same page, using a "#" and the header ID](#header-ids-and-links)
Using references:
- This is a [reference-style link, see below][Arbitrary case-insensitive reference text]
- You can [use numbers for reference-style link definitions, see below][1]
- Or leave it empty and use the [link text itself][], see below.
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org/en-US/
[1]: https://slashdot.org
[link text itself]: https://www.reddit.com
```
**注意:**相对链接不允许引用 Wiki 页面或项目文件中的 Wiki 页面中的项目文件, 这样做的原因是,Wiki 始终位于 GitLab 中的单独 Git 存储库中。例如,仅当链接位于 Wiki Markdown 文件内部时, `[I'm a reference-style link](style)`才会将链接指向`wikis/style` 。
#### URL 自动添加链接 [](#url-auto-linking "Permalink")
GFM 将自动为您添加到文档中的 URL 设置链接:
```
- https://www.google.com
- https://www.google.com
- ftp://ftp.us.debian.org/debian/
- smb://foo/bar/baz
- irc://irc.freenode.net/
- http://localhost:3000
```
* [https://www.google.com](https://www.google.com)
* [https://www.google.com](https://www.google.com)
* [ftp://ftp.us.debian.org/debian/](ftp://ftp.us.debian.org/debian/)
* <smb://foo/bar/baz>
* <irc://irc.freenode.net/>
* [http://localhost:3000](http://localhost:3000)
### 有序/无序列表列表[](#lists "Permalink")
可以轻松创建有序列表和无序列表。
对于有序列表,请在有序列表的每一行的开头添加希望列表以其开头的数字,例如`1.` ,后跟一个空格. 在第一个数字之后,使用什么数字都没有关系,有序列表将按垂直顺序自动编号,因此对同一列表中的所有项目重复`1.` .. 如果你开始以外的其他数字`1.` ,它会用它作为第一个数字,并从那里计数。
例如:
```
1. First ordered list item
2. Another item
- Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
1. Ordered sub-list
1. Next ordered sub-list item
4. And another item.
```
1. 首先订购的清单项目
2. 另一个项目
* 无序子列表.
3. 实际数字并不重要,只是一个数字
1. 订购子清单
2. 下一个订购的子清单项目
4. 还有另一个项目.
对于无序列表,请在无序列表的每一行的开头添加`-` , `*`或`+` ,然后加上一个空格,但是您不能混合使用它们。
```
Unordered lists can:
- use
- minuses
They can also:
* use
* asterisks
They can even:
+ use
+ pluses
```
* * *
如果列表项包含多个段落,则每个后续段落都应缩进到与列表项文本开头相同的级别。
例如:
```
1. First ordered list item
Second paragraph of first item.
1. Another item
```
* * *
如果第一项的段落没有缩进适当的空格数,则该段落将出现在列表外部,而不是在列表项下方正确缩进。
例如:
```
1. First ordered list item
Paragraph of first item.
1. Another item
```
### 上标/下标[](#superscripts--subscripts "Permalink")
当前,CommonMark 和 GFM 不支持 Redcarpet 支持的上标语法( `x^2` ). 您可以对上标和下标使用标准的 HTML 语法:
```markdown
The formula for water is H<sub>2</sub>O
while the equation for the theory of relativity is E = mc<sup>2</sup>.
```
### 表格[](#tables "Permalink")
表格不是 Markdown 核心规范的一部分,但它们是 GFM 的一部分。
1. 第一行包含表头,并用"竖线"( `|` )分隔
2. 第二行将标题与单元格分开,并且必须包含三个或更多破折号
3. 第三行以及随后的任何行均包含单元格值
* 您**不能**在 Markdown 中将单元格分隔成多行,它们必须保持为单行,但它们可能会很长。如果需要,还可以包含 HTML `<br>`标记以强制换行
* 像元大小**不必**彼此匹配,它们很灵活,但必须用管道( `|` )分隔
* 您**可以**有空白单元格
例如:
```
| header 1 | header 2 | header 3 |
| --- | ------ |---------:|
| cell 1 | cell 2 | cell 3 |
| cell 4 | cell 5 is longer | cell 6 is much longer than the others, but that's ok. It will eventually wrap the text when the cell is too large for the display size. |
| cell 7 | | cell <br> 9 |
```
(另外,你可以通过添加冒号选择文本列中的对齐`:`第二行中的"破折号"线条的两侧), 这将影响列中的每个单元格。
**注意:** [在 GitLab 本身中](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#tables) ,标题始终在 Chrome 和 Firefox 中左对齐,并在 Safari 中居中。
```
| Left Aligned | Centered | Right Aligned | Left Aligned | Centered | Right Aligned |
| :--- | :---: | ---: | :----------- | :------: | ------------: |
| Cell 1 | Cell 2 | Cell 3 | Cell 4 | Cell 5 | Cell 6 |
| Cell 7 | Cell 8 | Cell 9 | Cell 10 | Cell 11 | Cell 12 |
```
#### 从电子表格中复制并粘贴到 Markdown[](#copy-from-spreadsheet-and-paste-in-markdown "Permalink")
如果您使用电子表格软件(例如 Microsoft Excel,Google 表格或 Apple Numbers),则可以从电子表格中进行复制,GitLab 会将其粘贴为 Markdown 表格。例如,假设您具有以下电子表格:
[![Copy from spreadsheet](/docs/img/markdown_copy_from_spreadsheet_v12_7.png)](/docs/img/markdown_copy_from_spreadsheet_v12_7.png)
选择单元格并将其复制到剪贴板,打开一个 Markdown 并粘贴电子表格:
[![Paste to Markdown table](/docs/img/markdown_paste_table_v12_7.png)](/docs/img/markdown_paste_table_v12_7.png)
## 引用[](#references "Permalink")
* 该文档从[Markdown-Cheatsheet 中](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)大量引用
* Daring Fireball 上的原始[Markdown 语法指南](https://daringfireball.net/projects/markdown/syntax)是详细解释标准 Markdown 的绝佳资源
* 有关 CommonMark 的详细规范,请参见[CommonMark 规范](https://spec.commonmark.org/current/)
* [CommonMark Dingus](http://try.commonmark.org)是用于测试 CommonMark 语法的便捷工具
\ No newline at end of file
# 组织[](#组织 "Permalink")
通过 CODEChina 的组织,您可以:
* 将相关项目组装在一起
* 授予成员一次访问多个项目的权限
组也可以嵌套在[子组织中](/docs/user/org/sub_org.md)
通过单击顶部导航中的**组织>您的组织**来找到您的组织。
**"组织"**页面显示:
* 选择**您的组织**后, 将会显示**您**所属的全部组织(包括子组织)
* 选中" **浏览组织"**时将显示所有公开的组织列表
" **组织"**页面上的每个组都列出了:
* 它有多少个子组
* 它包含多少个项目
* 该组织有多少个成员,注意这里面不包括从父组织继承的成员
* 如果您具有足够的权限,还将显示组织设置的按钮
* 如果您是成员,也会看到退出该组的按钮
## 用户示例[](#用户示例 "Permalink")
您可以出于多种原因创建组织,例如:
* 通过在同一[命名空间](#命名空间)下组织相关项目并将成员添加到顶级组,可以以较少的步骤授予对多个项目和多个团队成员的访问权限。
* 通过创建小组并包括适当的成员,可以轻松地`@mention`所有团队中的问题并合并请求。
例如,您可以为公司成员创建一个[组织](/docs/user/org/sub_org.md) ,并为每个单独的团队创建一个[子组织](/docs/user/org/sub_org.md). 假设您创建了一个名为`company-team` ,并且在该组中为各个团队`backend-team``frontend-team``production-team`创建了子组。
* 从问题开始新的实现时,请添加评论: *" `@company-team` ,让我们开始吧!* *`@company-team/backend-team`您很高兴!"*
* 当您的后端团队需要前端提供帮助时,他们会添加一条评论: *" `@company-team/frontend-team`您能在这里帮助我们吗?"*
* 前端团队完成实施后,他们会评论: *" `@company-team/backend-team` ,它已经完成!* *让我们将其推送到`@company-team/production-team` !*
## 命名空间[](#命名空间 "Permalink")
在 CODEChina 中,命名空间将会是用户名称、组织名称或子组名的唯一名称。
* `https://codechina.csdn.net/username`
* `https://codechina.csdn.net/groupname`
* `https://codechina.csdn.net/groupname/subgroup_name`
例如,假设有一个名为 Miykael 的用户:
1. Miykael 在 CODEChina 上使用用户名`Miykael`创建了一个帐户; 他们的个人资料将在`https://codechina.csdn.net/miykael`下访问
2. Miykael 为他们的团队创建了一个组织,名称为`csdn-team` ; 该组织及其项目将在`https://codechina.csdn.net/csdn-team`下访问
3. CSDN 创建了一个名为`coding`的子组织 ; 该子组织及其项目将在`https://codechina.csdn.net/csdn-team/coding`下访问
通过这样做:
* 任何团队成员都使用`@miykael`提及 Miykael
* CSDN通过`@csdn-team`提及了团队中的每个人
* CSDN只提及`@csdn-team/coding`
> 注:出于系统安全以及知识产权、商标保护等因素,我们预留了一部分namespace,如果您的用户名与预留这部分namespace有冲突,系统将会自动对您在CODEChina中的namespace进行调整。
## 组织内的Issue及合并请求[](#组织内的Issue及合并请求 "Permalink")
Issue及合并请求是项目的一部分。对于组织,您可以在单个列表视图中查看所有[Issue](/docs/user/project/issues.md#issues-list),也可以查看组织中所有项目的请求合并。
### 批量编辑Issue及合并请求[](#批量编辑Issue及合并请求 "Permalink")
有关详细信息,请参考[批量编辑Issue及合并请求](/docs/user/project/bulk-edit.md)
## 新建一个组织[](#新建一个组织 "Permalink")
> 有关不允许用作组名的单词列表,请参见[保留名称](/docs/user/reserved.md) 。
通过以下方式,您可以创建一个新的组织:
* 在顶部菜单中,依次单击" **组织"**和" **您的组织"** ,然后单击绿色按钮" **新建组织"**
* 或者,在顶部菜单中,展开`+`号并选择**新建组织**
添加以下信息:
1. **组织名称**将自动填充 URL(自动填充不支持中文的组织名称)。(可选)您可以修改它,这是在组视图中显示的名称,该名称只能包含:
* 字母数字字符
* 中文
* 下划线
* 连接符`-`和点
* 空格
2. **组 URL**是将托管项目的名称空间. 该网址只能包含:
* 字母数字字符
* 下划线
* 连接符`-`和点(不能以连接符`-`开头或以点结尾)
3. (可选)可以为新建的组织添加一段简单介绍,以便其他用户了解该组织
4. (可选)可以为新建的组织上传一个头像
5. 选择新建的组织是否公开可见
## 为组织添加一个用户[](#为组织添加一个用户 "Permalink")
将多个项目放在一个组织中的好处是,您可以通过一个操作就授予某个用户访问该组织中所有项目的权限。
**组织设置-组织成员设置**中将成员添加到组织,可以通过用户名或者注册邮箱来添加组织成员。
选择[权限级别](/docs/user/permissions.md#permissions) ,然后添加新成员。您还可以设置该用户的到期日期。
假设一个有两个项目的组织:
***组织设置-组织成员设置**页面上,可以将新用户添加到组织中;
* 当将新用户设置为组织的**开发人员**成员时,他们将获得**开发人员**对该组内**所有项目的**访问权限。
如果要提高特定项目的现有用户的访问权限,请将其作为新成员再次添加到特定项目中,并为其添加相应的项目成员角色。
## 申请加入组织[](#申请加入组织 "Permalink")
作为组织所有者,您可以启用或禁用非组织成员请求访问组织的功能。该功能可以通过再**组织设置-常规设置-权限,LFS,2FS**中单击**允许用户请求访问(如果可见性是公开或内部的)**进行开启,该功能默认为启用状态。
如果组织启用了该设置,则非组织成员用户可以请求成为组织的成员。在您要加入的组织页中,单击组织名称后面的**申请权限**按钮即可。
申请访问权限后:
* 通过电子邮件将您的申请告知给组织的所有者(电子邮件将发送给最近活跃的组织所有者)
* 任何组织所有者都可以在组组织成员设置页面上批准或拒绝您的申请
如果您在申请权限被批准之前改变了主意,只需单击" **撤回访问请求"**按钮即可。
## 变更组织的所有者[](#变更组织的所有者 "Permalink")
组织的所有关系是指至少有一个组织成员拥有组织的 [ Owner ](/docs/user/permissions.md#group-members-permissions),一个组织至少需要一名所有者。
只有拥有一个所有者的组织可以变更组织的所有者。 可以通过以下方式变更组织唯一所有者:
1. 前往组织的 **组织设置-组织成员设置**选项卡;
2. 赋予其他成员**所有者**权限;
3. 让新的所有者删除您的**所有者**权限。
## 移除组织成员[](#移除组织成员 "Permalink")
只有[ Owner ](/docs/user/permissions.md#group-members-permissions)权限的[用户](/docs/user/permissions.md#group-members-permissions)才能管理组织成员。
如果要移除的成员在该组中具有直接成员资格,则可以从该组织中移除该成员; 如果成员资格是从父组继承的,则该成员只能从父组中进行移除。
移除成员时,您可以决定是否取消已经指派给该成员的 Issue 及合并请求。
* **取消分配给已移除的成员的 Issue及合并请求**可以将已经分配给当前要移除用户的 Issue 及合并请求重新进行分配
* **保留Issue和合并请求的分配**可能对于接受公开贡献的组织很有帮助,用户可以不必是组织成员就可以为 Issue 及合并请求做出贡献
可以通过以下操作将成员从组织中移除:
1. 在一个组织中,进入 **组织设置-组织成员设置**
2. 找到要移除的成员,并点击**移除**按钮,这时会弹出 **移除成员** 的弹窗
3. (可选)选中 **取消分配给已移除的成员的 Issue及合并请求** 的复选框
4. 点击**移除成员**按钮
## 变更组织的默认保护分支[](#变更组织的默认保护分支 "Permalink")
默认情况下,每个组织都会继承全局级别的分支保护。
您可以通过以下操作为特定组织变更此项设置:
1. 打开组织的 **组织设置-常规设置**页面
2. 展开 **权限,LFS,2FA**部分
3.**默认分支保护**下拉列表中选择所需的选项
4. 点击 **保存修改**
## 在组织中新建项目[](#在组织中新建项目 "Permalink")
有两种方法可以在组织中新建项目:
* 选择一个组,单击**新建项目**按钮 。 然后,您可以继续[创建您的项目](/docs/basic/create-project.md)
* 在创建项目时,从下拉菜单中选择已经创建的组名称空间
### 项目创建权限[](#项目创建权限 "Permalink")
默认情况下, [开发人员和维护人员](/docs/user/permissions.md#group-members-permissions)可以在一个组下创建项目。
可以通过以下操作为特定组更改此项设置:
1. 进入组织的**组织设置>常规设置**页面
2. 展开 **权限,LFS,2FA**部分
3.**允许创建项目**下拉列表中选择所需的选项
4. 点击 **保存修改**
## 查看组织详情[](#查看组织详情 "Permalink")
组织的 **详细信息**页面包含以下内容:
* 组织的基本信息和介绍
* 组织的项目
* 组织已存档的项目
* 组织的成员
## 与组织共享一个项目[](#与组织共享一个项目 "Permalink")
您可以[与组织共享您的项目](/docs/user/project/member/share.md),并向所有组织成员立即授予对该项目的访问权限。
或者,您可以[锁定与组织共享功能](#锁定与组织共享功能)
## 与组织共享另一个组织[](#与组织共享另一个组织 "Permalink")
[与组织共享项目](#与组织共享一个项目)类似,您可以与一个组织共享另一个组织,以使组织成员可以直接访问共享的组织(注:这对于继承的成员无效)。
要将给定的组(例如"前端")与另一个组(例如"工程")共享:
1. 进入到"前端"组织页面,然后进入**组织设置-组织成员设置**页面
2. 单击 **邀请组织** 按钮
3. 选择您要共享的组织"工程",并设置访问权限
4. 点击 **邀请**
"工程"的所有成员将被添加到"前端"组织中。
## 转移组织[](#转移组织 "Permalink")
您可以通过以下方式转移组织:
* 将子组织转移到新的父组织
* 通过将顶级组织转移到所需的组织,并将其转换为子组织
* 通过将子组织转移到顶级组织,可以将一个子组织转换为组织
转移组织时,请注意:
* 更改组织的父组织可能会产生一些副作用,具体的请参阅[更改存储库路径时的重定向](/docs/user/project.md#redirects-when-changing-repository-paths)
* 您只能将组织/子组织转移到您管理的组织/子组织中;
* 您必须手动更新本地存储库以指向新位置;
* 如果将要转移的父组织的公开可见性设置低于当前父组织,那么待转移组织机器项目的公开可见性将会与即将要转移到的父组织保持一致;
* 转移组织时,只有组织直接成员会被转移,从之前父组织集成的成员不会被转移。如果待转移组织的所有者是继承的身份成员,则该组织转移过去后将不会设有所有者,转移组的用户将会自动成为该组的所有者。
## 组织设置[](#组织设置 "Permalink")
创建组织后,在组织详情页您可以进入**组织设置**来对组织进行设置及管理。
### 常规设置[](#常规设置 "Permalink")
除了编辑您在[创建组织](#新建一个组织)时预先设置的内容外,您还可以对该组织的其他内容进行设置。
#### 变更组织的路径[](#变更组织的路径 "Permalink")
变更组织的路径也可能会产生一些副作用,具体的请参考[重定向的行为](/docs/user/project.md#redirects-when-changing-repository-paths)
如果您要腾出路径,以便其他组织或用户可以使用该路径,由于名称和路径都必须是唯一的,因此您在变更路径的同时也可能需要重命名该组织。
您可以通过以下操作更改组织的路径:
1. 进入到组织的**组织设置>常规设置**页面
2. 展开**高级**部分
3.**更改组织路径**下输入新的路径
4. 点击 **变更组织路径**
> **注意:**如果命名空间包含带有 Container Registry 标记的项目,则无法重命名该空间,因为该项目无法移动。
> **提示:**如果要保留对原始名称空间的所有权并保护 URL 重定向,我们建议您新建一个群组并向其转移项目,而无需更改组织的路径或重命名用户名。
### 删除一个组织[](#删除一个组织 "Permalink")
您可以通过以下删除组织及其内容:
1. 打开 **组织设置>常规设置**页面
2. 展开**高级**部分
3. 在"删除组织"部分中,单击**删除组织**按钮
4. 根据提示的内容确认删除操作
这个操作将会导致:
* 删除组织,并且将后台作业排队以删除该组织中的所有项目(注:删除行为默认在删除确认后的7天后进行)
### 恢复已删除组织[](#恢复已删除组织 "Permalink")
您可以通过以下操作恢复已经标记为删除的组织:
1. 打开 **组织设置>常规设置**页面.
2. 展开**高级**部分.
3. 在"恢复组织"部分中,单击**恢复组织**按钮.
#### 锁定与组织共享功能[](#锁定与组织共享功能 "Permalink")
该功能可防止一个组织中的[项目与另一个组共享项目](/docs/user/project/member/share.md),以便对项目访问进行更严格的控制。
例如,假设您有两个不同的团队(A 组和 B 组)在一个项目中一起工作,并且要继承该组成员身份,您可以在 A 组和 B 组之间设置共享项目。**使用组锁共享**可以防止其中的任何项目群组与其他群组共享,从而确保只有合适的群组成员才能访问这些项目。
要启用此功能,请打开组织设置页面, 选择 **禁止与其他组织共享项目**并点击**保存修改**
#### 禁用电子邮件通知[](#禁用电子邮件通知 "Permalink")
您可以禁用与该组织相关的所有电子邮件通知,其中包括其子组织和项目:
您可以通过以下操作来启用该功能:
1. 进入**组织设置>常规设置**页面
2. 展开**权限,LFS,2FA**部分,然后选择**禁用电子邮件通知**
3. 点击 **保存修改**
#### 禁用群组提及[](#禁用群组提及 "Permalink")
该功能可以防止用户将群组添加到对话中,并且在任何人提及这些用户所属的组织时通知他们。
@功能的自动完成下拉列表中会相应地显示提及被禁用的组织,这对于具有大量用户的组织特别有用。
您可以通过以下操作来启用该功能:
1. 进入到**组织设置>常规设置**页面
2. 展开" **权限,LFS,2FA**部分,然后选择**禁用群组提及**
3. 点击 **保存更改**
### 高级设置[](#高级设置 "Permalink")
* **项目** :查看该组中的所有项目,将成员添加到每个项目,访问每个项目的设置,以及删除任何项目,所有操作均在同一屏幕上进行
* **Webhooks** :为您的组配置 webhooks
\ No newline at end of file
# 子组织[](#子组织 "Permalink")
我们可支持20+ 层级的子组织(也称为嵌套结构或层次结构)。
通过子组织您可以:
* **独立的子组织** 由于每个组都有自己的可见性级别,因此您可以在同一保护范围内创建不同子组织以满足您不同的使用目的;
* **组织大型项目** 对于大型项目,子组织可能会更容易分隔源代码的权限
* **使管理人员和控制可见性变得更加容易** 根据人们的组织[成员身份](#成员身份)赋予他们不同的[权限](/docs/user/permissions.md#group-members-permissions)
有关组织和项目中允许的权限的更多信息,请参考[可见性级别](/docs/user/permissions.md#general-permissions)
## 概览[](#概览 "Permalink")
一个组织中可以有许多子组织,且每个组织只能有一个直接父组, 它类似于目录或嵌套项目列表:
* 第一组
* 1.1 组
* 1.2 组
* 1.2.1 组
* 1.2.2 组
* 1.2.2.1组
假设维护一个 GNU / Linux 发行版,其中第一个子组织是发行版的名称,随后的子组织则按如下所示拆分:
* Organization Group - GNU/Linux distro
* 类别子组-包
* (项目)配套 01
* (项目)配套 02
* 类别子组-软件
* (项目)核心
* (项目)CLI
* (项目)Android 应用
* (项目)iOS 应用
* 类别子组-红外线工具
* (项目)Ansible 剧本
当执行诸如在子组织之间转移或导入项目的操作时,其行为与在`group/project`级别执行这些操作时的行为相同。
## 新建一个子组织[](#新建一个子组织 "Permalink")
要在组织中创建子组织,您必须是该组织的所有者或维护者,具体取决于该组织的设置(默认情况下,允许所有者和维护者创建子组)。
有关权限的更多信息,请检查[权限表](/docs/user/permissions.md) 。有关不允许用作组名的单词列表,请参见[保留名称](/docs/user/reserved.md)
如果用户明确地作为所有者(或维护者,如果启用了此设置)被添加到父组织中,则用户始终可以创建子组,即使管理员在其组织设置中禁用了组创建也是如此。
您可以通过以下操作创建一个子组织:
1. 在组织详情页中,展开右上角**新建项目**旁的下拉按钮,选择**新建子组织** ,然后单击 **新建子组**按钮;
2. 像平常一样直接创建一个新组织。 需要注意的是,父组织名称空间在 **组路径**下是不可修改的,但 可见性级别可以与父组织不同;
3. 单击**创建组织**按钮
## 成员身份[](#成员身份 "Permalink")
将成员添加到子组织时,它们将从父组织继承成员资格和权限级别。如果您是其父组织成员之一,则您可以被允许访问该组织下所有的子组织。
成员的组权限只能由所有者更改,您可以通过查看组织的**组织设置-组织成员设置**页面来确定成员是否从父组织继承了权限。
[![Group members page](/docs/img/group_members.png)](/docs/img/group_members.png)
从上图我们可以了解到:
* 有 5 位成员可以访问第`four`组.
* User0 是一个 Reporter,已从组`four`的层次结构上方的组`one`继承了该权限
* User1 是一个开发者,已从组`one/two`的层次结构上方的组`two`继承了该权限
* User2 是一个开发者,已从组`one/two/three`的层次结构上方的组`three`继承了该权限
* 对于 User3,没有任何父组织的指示,因此它属于`four`
* 管理员是**所有**子组织的所有者和成员,与 User3 一样也没有任何父组织的指示
您可以使用右侧的下拉列表过滤此列表:
* **仅显示直接成员**仅显示 Administrator 和 User3,因为这是属于`four`组的唯一用户
* **仅显示继承的成员**将显示 User0,User1 和 User2,无论层次结构上方的哪个组都可以作为继承权限的来源
## 提及子组织[](#提及子组织 "Permalink")
在Issue,提交和合并请求中提及组织( `@group` )将通知该组的所有成员。当有了子组织后,如果您想拆分组织的结构,将有更精细的支持。提及方式与以前一样,您可以选择要通知的人群。
\ No newline at end of file
# 用户权限[](#用户权限 "Permalink")
不同的用户具有不同的权限,权限取决于他们在特定组或项目中具有的访问级别。 如果用户既属于项目组又属于项目本身,则使用最高权限级别。
在公共项目上,不启用Guest角色, 所有用户都能够:
* 新建 Issue
* 留言
* 克隆或下载项目代码
当成员离开团队的项目时,所有分配给他的" [Issue"](/docs/user/project/issues.md)及" [合并请求"](/docs/user/project/merge-request.md)将自动取消分配。
要添加或导入用户,可以遵循[项目成员文档](/docs/user/project/member.md)
## 项目成员权限[](#project-members-permissions "Permalink")
虽然 Maintainer 是项目级别的最高角色,但是某些操作只能由拥有命名空间所有权限的用户或组的 Owner执行。 有关更多信息,请参阅[项目成员文档](/docs/user/project/member.md)
下表描述了项目中的各种用户权限级别:
| 操作 | Guest | Reporter | Developer | Maintainer | Owner* |
| --- | --- | --- | --- | --- | --- |
| 下载专案 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 留言 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看允许和拒绝的许可证 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看许可证合规性报告 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看安全报告 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| 查看相关性列表 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看许可证列表 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 在相关性列表中查看许可证 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看项目代码 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 拉项目代码 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看受访问控制保护的页面 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看 wiki | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看工作清单 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| 查看工作日志 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| 下载和浏览工作工件 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
| 新建 Issue | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看相关 Issue | ✓ | ✓ | ✓ | ✓ | ✓ |
| 创建机密 Issue | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| 查看机密 Issue | (*2*) | ✓ | ✓ | ✓ | ✓ |
| 查看 Release | ✓ (*6*) | ✓ | ✓ | ✓ | ✓ |
| 管理用户加星标的指标仪表板( *7* ) | ✓ | ✓ | ✓ | ✓ | ✓ |
| 分配 Issue |   | ✓ | ✓ | ✓ | ✓ |
| 标签 Issue |   | ✓ | ✓ | ✓ | ✓ |
| 设定 Issue 权重 |   | ✓ | ✓ | ✓ | ✓ |
| 锁定 Issue 讨论 |   | ✓ | ✓ | ✓ | ✓ |
| 管理问题追踪器 |   | ✓ | ✓ | ✓ | ✓ |
| 管理标签 |   | ✓ | ✓ | ✓ | ✓ |
| 创建代码段 |   | ✓ | ✓ | ✓ | ✓ |
| 查看提交状态 |   | ✓ | ✓ | ✓ | ✓ |
| 查看容器注册表 |   | ✓ | ✓ | ✓ | ✓ |
| 查看环境 |   | ✓ | ✓ | ✓ | ✓ |
| 查看合并请求列表 |   | ✓ | ✓ | ✓ | ✓ |
| 查看项目统计 |   |   | ✓ | ✓ | ✓ |
| 查看错误跟踪列表 |   | ✓ | ✓ | ✓ | ✓ |
| 创建新的合并请求 |   | ✓ | ✓ | ✓ | ✓ |
| 查看指标仪表板注释 |   | ✓ | ✓ | ✓ | ✓ |
| Pull packages |   | ✓ | ✓ | ✓ | ✓ |
| Publish packages |   |   | ✓ | ✓ | ✓ |
| Upload Design Management files |   |   | ✓ | ✓ | ✓ |
| Create/edit/delete [Releases](/docs/user/project/releases.md) |   |   | ✓ | ✓ | ✓ |
| 创建新分支 |   |   | ✓ | ✓ | ✓ |
| 推送到不受保护的分支 |   |   | ✓ | ✓ | ✓ |
| 强制推送到不受保护的分支 |   |   | ✓ | ✓ | ✓ |
| 删除不受保护的分支 |   |   | ✓ | ✓ | ✓ |
| 分配合并请求 |   |   | ✓ | ✓ | ✓ |
| 标签合并请求 |   |   | ✓ | ✓ | ✓ |
| 锁定合并请求线程 |   |   | ✓ | ✓ | ✓ |
| 批准合并请求( *9* ) |   |   | ✓ | ✓ | ✓ |
| 管理/接受合并请求 |   |   | ✓ | ✓ | ✓ |
| 停止环境 |   |   | ✓ | ✓ | ✓ |
| 启用评论应用 |   |   | ✓ | ✓ | ✓ |
| 添加 Tag |   |   | ✓ | ✓ | ✓ |
| 创建或更新提交状态 |   |   | ✓ (*5*) | ✓ | ✓ |
| 更新容器注册表 |   |   | ✓ | ✓ | ✓ |
| 删除容器注册表映像 |   |   | ✓ | ✓ | ✓ |
| 创建/编辑/删除项目里程碑 |   |   | ✓ | ✓ | ✓ |
| 应用代码更改建议 |   |   | ✓ | ✓ | ✓ |
| 创建和编辑 Wiki 页面 |   |   | ✓ | ✓ | ✓ |
| 重写/删除 Git 标签 |   |   | ✓ | ✓ | ✓ |
| 创建/编辑/删除指标仪表板注释 |   |   | ✓ | ✓ | ✓ |
| 针对受保护的分支运行 CI / CD 管道 |   |   | ✓ (*5*) | ✓ | ✓ |
| 使用环境终端 |   |   |   | ✓ | ✓ |
| 添加新的团队成员 |   |   |   | ✓ | ✓ |
| 启用/禁用分支保护 |   |   |   | ✓ | ✓ |
| 推送到受保护的分支 |   |   |   | ✓ | ✓ |
| 为开发人员打开/关闭受保护的分支推送 |   |   |   | ✓ | ✓ |
| 启用/禁用标签保护 |   |   |   | ✓ | ✓ |
| 编辑专案 |   |   |   | ✓ | ✓ |
| 编辑项目徽章 |   |   |   | ✓ | ✓ |
| 与小组共享(邀请)项目 |   |   |   | ✓ (*8*) | ✓ (*8*) |
| 将部署密钥添加到项目 |   |   |   | ✓ | ✓ |
| 配置项目挂钩 |   |   |   | ✓ | ✓ |
| 管理跑步者 |   |   |   | ✓ | ✓ |
| 管理工作触发器 |   |   |   | ✓ | ✓ |
| 管理 CI / CD 变量 |   |   |   | ✓ | ✓ |
| 管理 Pages |   |   |   | ✓ | ✓ |
| 管理 Pages 域和证书 |   |   |   | ✓ | ✓ |
| 删除 Pages 页面 |   |   |   | ✓ | ✓ |
| 管理集群 |   |   |   | ✓ | ✓ |
| 管理项目运作 |   |   |   | ✓ | ✓ |
| 查看 Pod 日志 |   |   |   | ✓ | ✓ |
| 编辑评论(由任何用户发布) |   |   |   | ✓ | ✓ |
| 管理错误跟踪 |   |   |   | ✓ | ✓ |
| 删除维基页面 |   |   |   | ✓ | ✓ |
| 查看项目审核事件 |   |   |   | ✓ | ✓ |
| Manage push rules |   |   |   | ✓ | ✓ |
| 更改项目可见性 |   |   |   |   | ✓ |
| 将项目转移到另一个名称空间 |   |   |   |   | ✓ |
| 重命名项目 |   |   |   |   | ✓ |
| 删除分叉关系 |   |   |   |   | ✓ |
| 移除专案 |   |   |   |   | ✓ |
| 存档项目 |   |   |   |   | ✓ |
| 删除问题 |   |   |   |   | ✓ |
| 删除管道 |   |   |   |   | ✓ |
| 删除合并请求 |   |   |   |   | ✓ |
| 禁用通知电子邮件 |   |   |   |   | ✓ |
| 用力推动到受保护的分支( *4* ) |   |   |   |   |   |
| 卸下受保护的分支( *4* ) |   |   |   |   |   |
| 查看 CI \ CD 分析 |   | ✓ | ✓ | ✓ | ✓ |
| 查看代码审查分析 |   | ✓ | ✓ | ✓ | ✓ |
| 查看见解 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看问题分析 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看存储库分析 |   | ✓ | ✓ | ✓ | ✓ |
| 查看价值流分析 | ✓ | ✓ | ✓ | ✓ | ✓ |
*所有者权限仅在组或个人名称空间级别(例如,管理员)可用,并由其项目继承。
1. Guest 用户能够对公共项目执行此操作,但不能对私有项目执行此操作
2. Guest 用户只能查看他们自己创建的机密问题
3. 不允许 Guest,Reporter,Developer,Maintainer 或 Owner 使用,请参阅受保护的分支
4. 如果分支收到保护 ,则取决于授予开发人员和维护人员的权限
5. Guest 用户可以访问 项目的 [**Release**](/docs/user/project/releases.md)来下载资源,但不能下载源代码,也不能查看代码仓库信息(例如标签和提交)
6. 操作仅限于用户拥有(引用)的记录​​
7. 启用" [共享组锁定"后](/docs/user/org.md#share-with-group-lock) ,该项目将无法与其他组共享,它不影响具有组共享的组
## 项目功能权限[](#project-features-permissions "Permalink")
### Wiki 和 issues[](#wiki-and-issues "Permalink")
可以根据项目设置上选择的可见性级别对用户隐藏 Wiki 和 Issue 等项目功能:
* 禁用:所有人禁用
* 仅团队成员:即使您的项目是公开的或内部的,也只有团队成员才能看到
* 有访问权限的所有人:每个人都可以看到,具体取决于您的项目可见性级别
* 每个人:为所有人启用
### 保护分支权限[](#protected-branches "Permalink")
可以在每个分支的受保护分支上应用其他限制,此外,您可以自定义权限,以允许或阻止项目维护者和开发者推送到受保护的分支。
### 锁定文件权限[](#file-locking-permissions-premium "Permalink")
锁定文件或目录的用户是唯一可以编辑并将其更改推回锁定对象所在代码仓库的用户。
### 机密 Issue 权限[](#confidential-issues-permissions "Permalink")
报告者和更高的权限级别以及创建机密问题的来宾用户都可以访问机密问题. 要了解更多信息,请通读有关[权限和访问机密问题](/docs/user/project/issues/confidential.md#permissions-and-access-to-confidential-issues)的文档.
## 组织成员权限[](#group-members-permissions "Permalink")
任何用户都可以将自己从组中删除,除非他们是该组的最后一个所有者。下表描述了组中的各种用户权限级别:
| 操作 | Guest | Reporter | Developer | Maintainer | Owner |
| --- | --- | --- | --- | --- | --- |
| 浏览组 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 管理群组标记 |   | ✓ | ✓ | ✓ | ✓ |
| 管理群组里程碑 |   | ✓ | ✓ | ✓ | ✓ |
| Pull packages |   | ✓ | ✓ | ✓ | ✓ |
| Publish packages |   |   | ✓ | ✓ | ✓ |
| 查看指标仪表板注释 |   | ✓ | ✓ | ✓ | ✓ |
| 分组创建项目 |   |   | ✓ (3) | ✓ (3) | ✓ (3) |
| 与群组分享(邀请)群组 |   |   |   |   | ✓ |
| 创建/编辑/删除组里程碑 |   |   | ✓ | ✓ | ✓ |
| 创建/编辑/删除迭代 |   |   | ✓ | ✓ | ✓ |
| 启用/禁用依赖项代理 |   |   | ✓ | ✓ | ✓ |
| 使用安全仪表板 |   |   | ✓ | ✓ | ✓ |
| 创建/编辑/删除指标仪表板注释 |   |   | ✓ | ✓ | ✓ |
| 查看/管理组级别的 Kubernetes 集群 |   |   |   | ✓ | ✓ |
| 创建子组 |   |   |   | ✓ (1) | ✓ |
| 编辑史诗般的评论(由任何用户发布) |   |   |   | ✓ (2) | ✓ (2) |
| 编辑群组设定 |   |   |   |   | ✓ |
| 管理组级 CI / CD 变量 |   |   |   |   | ✓ |
| 列出组部署令牌 |   |   |   | ✓ | ✓ |
| 创建/删除组部署令牌 |   |   |   |   | ✓ |
| 管理小组成员 |   |   |   |   | ✓ |
| 删除群组 |   |   |   |   | ✓ |
| 删除组史诗 |   |   |   |   | ✓ |
| 编辑 SAML SSO 帐单 | ✓ | ✓ | ✓ | ✓ | ✓ (4) |
| 查看组审核事件 |   |   |   |   | ✓ |
| 禁用通知电子邮件 |   |   |   |   | ✓ |
| 查看贡献分析 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看见解 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看问题分析 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 查看生产力分析 |   | ✓ | ✓ | ✓ | ✓ |
| 查看价值流分析 | ✓ | ✓ | ✓ | ✓ | ✓ |
### 子组织权限[](#subgroup-permissions "Permalink")
将成员添加到子组时,它们将从父组继承成员资格和权限级别。如果您是其父级成员之一,则允许访问嵌套组。
## 项目功能[](#project-features "Permalink")
可以根据用户在项目设置上选择的可见性级别对用户隐藏 Wiki 和问题等项目功能.
* 禁用:所有人禁用
* 仅团队成员:即使您的项目是公开的或内部的,也只有团队成员才能看到
* 有访问权限的所有人:每个人都可以看到,具体取决于您的项目可见性级别
* 每个人:为所有人启用(仅适用于 GitLab 页面)
## CI/CD 权限[](#gitlab-cicd-permissions "Permalink")
CI / CD 权限取决于用户在项目中的角色. 共有三个权限级别:
* maintainer
* developer
* guest/reporter
| Action | 来宾,记者 | Developer | Maintainer |
| --- | --- | --- | --- |
| 查看提交和工作 | ✓ | ✓ | ✓ |
| 重试或取消作业 |   | ✓ | ✓ |
| 擦除作业工件和跟踪 |   | ✓ (*1*) | ✓ |
| 删除项目 |   |   | ✓ |
| 建立项目 |   |   | ✓ |
| 更改项目配置 |   |   | ✓ |
| 添加特定Runner |   |   | ✓ |
| 添加共享Runner |   |   |   |
| 查看系统中的事件 |   |   |   |
# 个人偏好[](#个人偏好 "Permalink")
用户的个人资料首选项页面允许用户自定义 CODEChina 的各个方面,可以通过以下步骤进行设置:
1. 单击您的头像
2. 点击"设置"
3. 单击边栏中的**首选项**
## 语法高亮主题[](#syntax-highlighting-theme "Permalink")
**注意:** CODEChina 使用[rouge Ruby 库](http://rouge.jneen.net/)在任何 Editor 上下文之外突出显示语法,WebIDE(如代码片段)使用[Monaco Editor](https://microsoft.github.io/monaco-editor/) ,并提供了[Monarch](https://microsoft.github.io/monaco-editor/monarch.html)库以突出显示语法,有关支持的语言的列表,请访问相应库的文档。
更改此设置可让您在 CODEChina 上查看语法突出显示的代码时自定义颜色主题。
默认语法主题为"白色",您可以在 5 个不同的主题中进行选择:
* White
* Dark
* 日光灯
* 日光暗
* Monokai
## 个性化[](#behavior "Permalink")
以下设置可让您自定义 CODEChina 布局的行为以及仪表板和项目登录页面的默认视图。
### 宽度[](#layout-width "Permalink")
可以根据喜好将 CODEChina 设置为使用不同的宽度,在固定(最大`1280px` )和流畅( `100%` )应用程序布局之间选择。
**注意:**虽然使用固定版式时`1280px`是标准最大宽度,但是某些页面仍根据内容使用 100%宽度。
### 默认工作台[](#default-dashboard "Permalink")
对于有权访问大量项目但仅能跟上少数项目的用户,默认"仪表板"页面上的活动量可能会很大。更改此设置可让您重新定义默认的仪表板。
您可以在此处使用 8 个选项作为默认仪表板视图:
* 您的项目(默认)
* 已加星标的项目
* 您的项目活动
* 已加星标项目的活动
* 您的团体
* [您的代办事项](/docs/user/todo.md)
* 分配的问题
* 分配的合并请求
### 选项卡宽度[](#tab-width "Permalink")
您可以在 CODEChina 的各个部分设置标签字符的显示宽度,例如 blob,diff 和代码片段。
**注意:** CODEChina 的某些部分不遵守此设置,包括 WebIDE,文件编辑器和 Markdown 编辑器。
## 本地化[](#localization "Permalink")
### 语言[](#language "Permalink")
从支持的语言列表中选择首选语言。
### 每周的起始[](#first-day-of-the-week "Permalink")
可以针对日历视图和日期选择器自定义一周的第一天,您可以选择以下选项之一作为一周的第一天:
* 周六
* 周日
* 周一
如果选择**System Default** ,则将使用系统范围的默认设置。
\ No newline at end of file
# 个人访问令牌[](#token "Permalink")
个人访问令牌在您定义的日期 UTC 午夜到期。
* 系统每天在世界标准时间 01:00 AM 进行检查,以识别将在 7 天内到期的个人访问令牌,并向这些令牌的所有者发送电子邮件通知。
## 创建个人访问令牌[](#creating-a-personal-access-token "Permalink")
您可以在 CODEChina 个人资料中创建任意数量的个人访问令牌:
1. 登录到 CODEChina
2. 点击右上角的头像,然后选择**设置**
3. 在" **用户设置"**菜单上,选择" **访问令牌"**
4. 选择令牌的名称和可选的到期日期.
5. 选择[所需的范围](#limiting-scopes-of-a-personal-access-token)
6. 单击**创建个人访问令牌**按钮
7. 将个人访问令牌保存在安全的地方,离开或刷新页面后,将无法再次访问它
### 撤消个人访问令牌[](#revoking-a-personal-access-token "Permalink")
您可以随时单击" **活动个人访问令牌"**区域下的相应" **撤消"**按钮来撤消任何个人访问令牌。
### 令牌活动记录[](#token-activity "Permalink")
您可以从" **个人访问令牌"**页面**查看**上次使用**令牌的时间** , 令牌使用情况的更新每 24 小时固定一次。对API 资源和GraphQL API 的请求将更新令牌的用法。
## 个人访问令牌可用范围[](#limiting-scopes-of-a-personal-access-token "Permalink")
可以使用一个或多个范围创建个人访问令牌,这些范围允许给定令牌可以执行各种操作,下表描述了可用范围:
| Scope | 引入 | Description |
| --- | --- | --- |
| `read_user` | [GitLab 8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | 允许访问`/users`下的只读端点。本质上,允许用户 API中的任何`GET`请求 |
| `api` | [GitLab 8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | 授予对 API 的完全读写访问权限,包括所有组和项目,容器注册表和程序包注册表 |
| `read_api` | [GitLab 12.10](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28944) | 授予对 API 的读取权限,包括所有组和项目,容器注册表和程序包注册表 |
| `read_registry` | [GitLab 9.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/11845) | 如果项目是私有的并且需要授权,则允许读取(拉出) 容器注册表图像 |
| `sudo` | [GitLab 10.2](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14838) | 允许以系统中的任何用户身份执行 API 操作(如果经过身份验证的用户是管理员) |
| `read_repository` | [GitLab 10.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17894) | 允许通过`git clone`对存储库进行只读访问(拉) |
| `write_repository` | [GitLab 11.11](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26021) | 允许通过`git clone`对存储库进行读写访问(拉,推)。 启用 2FA 时,通过 HTTP 访问 Git 存储库是必需的 |
\ No newline at end of file
# 项目[](#项目 "Permalink")
您可以创建用于托管代码库的项目,可以通过项目进行 Issue 管理,进行代码协作,并使用内置的 CI / CD 持续构建,测试和部署应用程序。
您可以设置您的项目为公开或私有,我们也不限制您创建的私有项目数量。
## 项目功能[](#projects-features "Permalink")
创建项目时,您可以使用众多功能:
**代码仓库:**
* [Issue](/docs/user/project/issues.md) :与您的团队讨论问题内的实现
* [看板](/docs/user/project/kanban.md) :组织工作流程并确定其优先级
* [代码仓库](/docs/user/project/repo.md) :将代码托管在完全集成的平台中
* [分支](/docs/user/project/repo/branches.md) :使用 Git 分支策略在代码上进行协作
* [受保护的分支机构](/docs/user/project/protected-branch.md) :防止协作者弄乱历史记录或在未经审查的情况下推送代码
* [受保护的标签](/docs/user/project/protected-tag.md) :控制谁有权创建标签,并防止意外更新或删除
* 储存库镜像
* [签署提交](/docs/user/project/repo/gpg-sign.md) :使用 GPG 签署您的提交
* 部署令牌 :管理基于项目的部署令牌,这些令牌允许永久访问存储库和 Container Registry.
* [Web IDE](/docs/user/project/webide.md)
**Release 及合并请求:**
* [Issue](/docs/user/project/issues.md) :与您的团队讨论问题内的实现
* [发行板](/docs/user/project/kanban.md) :组织工作流程并确定其优先级
* [合并请求](/docs/user/project/merge-request.md) :应用您的分支策略并获得团队的审查
* 合并请求批准 :实施更改之前请求批准
* [修复合并中的冲突](/docs/user/project/merge-request/resolve-conflicts.md) :直接从网页中使用 Git diff 工具
* 审查应用程序 :按分支实时预览合并请求中建议的更改结果
* [标签](/docs/user/project/label.md) :按标签整理问题并合并请求
* [时间跟踪](/docs/user/project/time-track.md) :跟踪估计在完成问题或合并请求上花费的时间和时间
* [里程碑](/docs/user/project/milestone.md) :朝着目标日期迈进
* [描述模板](/docs/user/project/description-template.md) :为项目定义特定于上下文的模板,并为您的项目合并请求描述字段
* [斜杠命令(快速操作)](/docs/user/project/quick-actions.md) :针对问题或合并请求的常见操作的文本快捷方式
* [自动完成字符](/docs/user/project/autofill.md) :自动完成对用户,组,问题,合并请求和其他 GitLab 元素的引用
* [Web IDE](/docs/user/project/webide.md)
**其他特性:**
* [Wiki](/docs/user/project/wiki.md) :在集成的 Wiki 中记录您的项目
* 代码片 :存储,共享和协作代码片段
* 价值流分析 :查看您的开发生命周期
* 分析:配置对您的项目至关重要的见解
* 语法高亮 :一种自定义代码块的替代方法,可替代默认语言选择
* [Release](/docs/user/project/releases.md) :一种跟踪项目中可交付成果的方式,可作为源,构建输出,其他元数据和与代码的发行版本相关的其他工件的快照
* 代码所有者 :为某些文件指定代码所有者
* License :批准和拒绝项目的许可证
* 依赖项列表 :查看项目依赖项
* 要求 :要求使您可以创建标准来检查产品
* 静态站点编辑器 :无需事先了解代码库或 Git 命令,即可在静态网站上快速编辑内容
### 项目集成[](#项目集成 "Permalink")
将您的项目与 Jira,Mattermost,Kubernetes,Slack 等进行集成。
## 新建项目[](#新建项目 "Permalink")
了解如何在 CODEChina 中[创建一个新项目](/docs/basic/create-project.md)
### Fork 项目[](#fork项目 "Permalink")
您可以Fork 一个项目 ,以便:
* 通过 Fork 项目并创建从分支到上游项目的合并请求来进行代码协作
* Fork 一个项目并在该基础上进行开发
### Star 项目[](#star项目 "Permalink")
您可以star 一个项目,以便您更容易找到经常使用的项目。 项目拥有的 star 数量可以看做其受欢迎的程度。
可以通过以下操作 star 项目:
1. 进入要 star 项目的主页
2. 在页面的右上角,点击**Star**
您可以通过以下操作查看已经 star 的项目:
1. 单击导航栏中的**项目**
2. 单击**Star 的项目**
3. 显示您 Star 项目的信息,包括:
* 项目描述,包括名称,描述和图标
* 项目 Star 的次数
* 项目 Fork 的次数
* 打开的合并请求数
* 未解决 Issue 的数量
### 浏览项目[](#浏览项目 "Permalink")
您可以探索其他设置为公开的项目。操作方式为:
1. 单击导航栏中的**项目**
2. 单击**探索项目**
我们将为您显示一个项目列表,按上次更新日期排序。 要查看具有最多[Star](#star-a-project)项目,请单击 **最多Star** ;要查看过去一个月中评论数量最多的项目,请点击**趋势**
## 项目设置[](#项目设置 "Permalink")
项目设置允许您设置项目的可见性级别、访问级别,并执行诸如归档、重命名或转移项目的操作。
了解更多有关[项目设置](/docs/user/project/settings.md)的文档。
## 导入/导出项目[](#i导入导出项目 "Permalink")
* [导入项目](/docs/user/project/import.md) from:
* [从Github导入](/docs/user/project/import/github.md)
* [从Bitbucket导入](/docs/user/project/import/by-url.md)
* 导出项目
## 删除项目[](#删除项目 "Permalink")
可以通过以下操作删除一个项目:
1. 打开**项目设置>常规设置**
2. 展开**高级**部分
3. 向下滚动到**删除项目**部分
4. 点击 **删除项目**
5. 通过输入所需的文本来确认删除操作
### 延迟删除[](#延迟删除 "Permalink")
默认情况下,删除项目后会延迟 7 天才真的会删除项目。在此期间项目为待删除状态, 管理员可以在这段时间内恢复项目。
## 项目成员[](#项目成员 "Permalink")
了解如何[将成员添加到您的项目中](/docs/user/project/member.md)
## 退出项目[](#退出项目 "Permalink")
当项目属于组织时(即项目在[组织的命名空间下](/docs/user/org.md#命名空间) ),**退出项目**将仅显示在项目的页面上。如果您选择退出项目,那么您将不再是项目成员,并且将无法继续参与项目。
## 项目首页[](#项目首页 "Permalink")
项目首页会根据项目的可见性设置和用户权限来显示不同的内容:
对于公共项目以及私有项目中[有权查看该项目代码](/docs/user/permissions.md#project-members-permissions)的项目成员:
* 显示[`README`文件或索引文件的](/docs/user/project/repo.md#repository-readme-and-index-files)内容(如果有),然后显示项目存储库中的目录列表
* 如果项目不包含这些文件中的任何一个,则访问者将看到存储库的文件和目录列表
对于没有权限查看项目代码的用户:
* 显示项目 Wiki(如果有)
* 显示项目的 Issue 列表
## 路径重定向[](#路径重定向 "Permalink")
当项目仓库路径变更时,从旧路径平稳过渡到新路径至关重要,我们提供两种重定向方式:Web 以及 Git 推/拉重定向。
这两种方式根据项目的情况,可能会有所不同。
当重命名一个用户、一个组织或者一个仓库时:
* 命名空间及其下的任何内容(例如项目)的现有 Web URL 将重定向到新 URL
* 命名空间下项目的现有 Git 远程 URL 将重定向到新的远程 URL,每次将其推/拉到修改过路径的代码仓库时,都会显示一条警告消息:提示您更新远程仓库地址。 这也就意味着在重命名后,任何自动化脚本或 Git 客户端将继续工作
* 只要原来的路径还没有被其他用户、组织或者项目占用,路径重定向功能将一直能够正常使用
\ No newline at end of file
# 自动填充字符[](#autofill "Permalink")
自动完成字符填充提供了一种在 Markdown 字段中输入字段值的快速方法,当您开始在 Markdown 字段中使用以下字符之一键入单词时,CODEChina 将针对一组匹配值逐步自动完成, 字符串匹配不区分大小写。
| 字符 | 自动补全内容 |
| --- | --- |
| `~` | Labels |
| `%` | Milestones |
| `@` | 用户和组 |
| `#` | Issues |
| `!` | 合并要求 |
| `&` | Epics |
| `$` | 代码片 |
| `:` | Emoji表情 |
| `/` | 快速行动 |
弹出列表中最多显示 5 个最相关的匹配项,当您从列表中选择一个项目时,该值将输入到该字段中。输入的字符越多,匹配结果就越精确。
与" [快速操作"](/docs/user/project/quick-actions.md)结合使用时,字符自动完成将会十分有用。
## 举例[](#example "Permalink")
假设您的项目中包括以下用户:
| 用户名 | 昵称 |
| --- | --- |
| alessandra | 罗斯·格兰特 |
| lawrence.white | 凯尔西·克鲁克 |
| leanna | 罗斯玛丽·罗甘(Rosemarie Rogahn) |
| logan_gutkowski | 李·沃克特 |
| shelba | 约瑟芬·海利 |
在" Issue "讨论中,输入`@l`将显示以下弹出列表,需要注意的是这里并不包括用户`shelba` ,因为该列表仅包含与问题最相关的 5 个用户。
[![Popup list which includes users whose username or name contains the letter `l`](/docs/img/autocomplete_characters_example1_v12_0.png)](/docs/img/autocomplete_characters_example1_v12_0.png)
如果继续输入`@le` ,弹出列表将更改为以下内容。现在,弹出窗口仅包括用户名中出现`le`或用户名中的单词的用户。
[![Popup list which includes users whose username or name contains the string `le`](/docs/img/autocomplete_characters_example2_v12_0.png)](/docs/img/autocomplete_characters_example2_v12_0.png)
\ No newline at end of file
# 徽章[](#badges "Permalink")
徽章是呈现有关您的项目的简要信息的统一方法,它们由一个小图像以及该图像指向的 URL 组成。徽章的示例可以是 pipeline 状态、测试范围或项目维护者联系的方式等。
## 项目徽章[](#project-badges "Permalink")
维护者或所有者可以将徽章添加到项目中,然后在项目的首页可见。如果发现必须将相同的徽标添加到多个项目,则可能需要在[组级别](#group-badges)添加它们。
可以通过以下步骤将新徽章添加到项目:
1. 进入项目的**项目设置>常规设置>徽章**
2. 输入徽章的名称,在"链接"下,输入徽章应指向的 URL,在"徽章图像 URL"下输入应显示的图像的 URL
3. 点击**添加徽章**按钮来提交**徽章**
将徽章添加到项目后,您可以在表单下方的列表中看到它,您可以通过单击旁边的图标进行编辑,也可以通过单击删除图标将其删除。
与组关联的徽章只能在[组级别](#group-badges)上进行编辑或删除。
## 组织徽章[](#group-badges "Permalink")
可以将徽章添加到组织中,然后将在该组下的每个项目的页面上看到它们。在这种情况下,无法在项目级别上对其进行编辑或删除,如果每个项目需要单独的徽章,请考虑将其添加到[项目级别](#project-badges)或使用[占位符](#placeholders)
可以通过以下步骤将新徽章添加到组织:
1. 进入组织的**组织设置>常规设置>徽章**
2. 输入徽章的名称,在"链接"下,输入徽章应指向的 URL,在"徽章图像 URL"下输入应显示的图像的 URL
3. 点击**添加徽章**按钮来提交**徽章**
将徽章添加到组后,您可以在表格下方的列表中看到它。您可以通过单击徽章旁边的图标来编辑徽章,也可以通过单击删除图标来删除徽章。
与项目直接关联的徽章可以在[项目级别](#project-badges)上配置。
## 占位符[](#placeholders "Permalink")
徽章指向的 URL 以及图像 URL 可以包含占位符,在显示徽章时将根据设置占位符来变化。可以使用的占位符包括:
* `%{project_path}` :包含父组织的项目的路径
* `%{project_id}` :数据库中与项目关联的 ID
* `%{default_branch}` :为项目代码仓库配置的默认分支名称
* `%{commit_sha}` :项目代码仓库中默认分支的最新提交 ID
**注意:** 占位符允许徽章公开其他隐私信息,例如私有项目仓库中的默认分支名称或提交 SHA。这样设计师因为徽章是用来公开使用的,对于敏感的信息,请尽量避免使用这些占位符。
\ No newline at end of file
# 项目中批量编辑 Issue 及合并请求
- [项目中批量编辑 Issue 及合并请求](#bulk-editing-issues-and-merge-requests-at-the-project-level)
- [批量编辑 Issue 及合并请求](#批量编辑-issue-及合并请求)
- [项目中批量编辑 Issue](#bulk-edit-issues-at-the-project-level)
- [项目中批量编辑合并请求](#bulk-edit-merge-requests-at-the-project-level)
# 批量编辑 Issue 及合并请求[](#批量编辑issue及合并请求 "Permalink")
如果要更新多个 Issue 或合并请求的属性,则可以通过批量编辑它们来完成。
[![Bulk editing](/docs/img/bulk-editing_v13_2.png)](/docs/img/bulk-editing_v13_2.png)
## 项目中批量编辑 Issue[](#bulk-edit-issues-at-the-project-level "Permalink")
**注意:**您需要具有[Reporter 或更高](/docs/user/permissions.md)级别的权限才能管理 Issue 。
当批量编辑项目的 Issue 时,您可以更改 Issue 的以下属性:
* 状态(打开/关闭)
* 指派人
* 里程碑
* 标签
* 订阅
您可以通过以下步骤对项目中的多个 Issue 进行批量更新:
1. 在一个项目中,转到 ** Issue **
2. 全选或选中多个要编辑的 Issue 旁边的复选框,屏幕右侧的侧边栏将显示可编辑的字段
3. 从边栏中选择适当的字段及其值
4. 点击**全部更新**按钮
## 项目中批量编辑合并请求[](#bulk-edit-merge-requests-at-the-project-level "Permalink")
**注意:**您需要[开发人员或更高](/docs/user/permissions.md)级别的权限才能管理合并请求。
在项目中批量编辑合并请求时,可以编辑以下属性:
* 状态(打开/关闭)
* 指派人
* 里程碑
* 标签
* 订阅
您可以通过以下步骤对项目中的多个合并请求进行批量更新:
1. 在一个项目中,转到 **合并请求**
2. 全选或选中多个要编辑的合并请求旁边的复选框,屏幕右侧的侧边栏将显示可编辑的字段
3. 从边栏中选择适当的字段及其值
4. 点击**全部更新**
\ No newline at end of file
# 描述模板[](#description-template "Permalink")
我们都知道,项目开发人员更有可能及时解决提交的 Issue。使用描述模板,您可以为 Issue 定义特定的上下文的模板,并为项目合并请求描述字段,并帮助从 Issue 中过滤掉许多不必要的噪音。
## 概览[](#overview "Permalink")
通过使用描述模板,用户可以选择描述模板创建新的 Issue 或合并请求,以帮助他们与其他贡献者进行有效沟通。
每个项目都可以定义自己的一组描述模板,这些模板将被添加到项目代码仓库的根目录中。
描述模板必须用[Markdown](/docs/user/markdown.md)编写,并存储在项目的存储库中的`.gitlab`目录下,且仅考虑默认分支的模板。
## 示例[](#use-cases "Permalink")
* 添加一个模板,该模板将用于特定项目的每个 Issue,并提供说明和指南,要求提供特定于该主题的信息。例如,如果您有一个用于跟踪新博客文章的项目,则可以要求标题,大纲,作者姓名,作者社交媒体信息等等。
* 在前面的示例之后,您可以为随新博客帖子提交的每个合并请求创建模板,要求提供有关帖子日期,前事数据,图像准则,相关问题的链接,审阅者姓名等信息。
* 您还可以为工作流的不同阶段创建 Issue 及合并请求模板,例如功能建议,功能改进或错误报告等。
## 创建 Issue 描述模板[](#creating-issue-templates "Permalink")
在代码仓库的`.gitlab/issue_templates/`目录内创建一个新的 Markdown( `.md` )文件,提交并推送到您的默认分支。
可以通过以下步骤新建一个 markdown 文件:
1. 单击`master`旁边的`+`按钮,然后单击**新建文件**
2. 将 Issue 模板的名称添加到`master`旁边的**文件名称**文本字段中,确保单词之间用下划线分隔,并且文件的扩展名为`.md` ,例如`feature_request.md`
3. 提交并推送到您的默认分支
如果您的存储库中没有`.gitlab/issue_templates`目录,则需要创建它。
可以通过以下步骤创建`.gitlab/issue_templates`目录:
1. 单击`master`旁边的`+`按钮,然后选择**新建目录**
2. 将此新目录`.gitlab`并提交到默认分支
3. 再次单击`master`旁边的`+`按钮,然后选择**新建目录**
4. 将新目录命名为`issue_templates`,并提交到默认分支
要检查它是否正常工作,请[创建一个新 Issue](/docs/user/project/issues/manage.md#create-a-new-issue),然后查看是否可以选择描述模板。
## 创建合并请求描述模板[](#creating-merge-request-templates "Permalink")
与 Issue 模板类似,在代码仓库的`.gitlab/merge_request_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支。
## 使用模板[](#using-the-templates "Permalink")
假设我们已经创建了`.gitlab/issue_templates/Bug.md`文件,在创建或编辑问题时,这将启用`Bug`下拉选项,选择`Bug``Bug.md`模板文件中的内容将被复制到 Issue 描述字段;可以通过"重置模板"按钮放弃您在选择模板后所做的任何更改,并将其恢复为初始状态。
## 描述模板示例[](#description-template-example "Permalink")
GitLab 社区版项目中提供了一些 Issue 及合并请求的描述模板,具体的可以参考[`.gitlab`文件夹](https://gitlab.com/gitlab-org/gitlab/tree/master/.gitlab)中的一些示例。
**提示:**可以在描述模板中使用[快速操作](/docs/user/project/quick-actions.md)来快速添加标签,指派人和里程碑。仅当提交问题或合并请求的用户有权执行相关操作时,才可以执行快速操作。
以下是一个 bug 的模板示例:
```markdown
Summary
(Summarize the bug encountered concisely)
Steps to reproduce
(How one can reproduce the issue - this is very important)
Example Project
(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report)
(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version)
What is the current bug behavior?
(What actually happens)
What is the expected correct behavior?
(What you should see instead)
Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
Possible fixes
(If you can, link to the line of code that might be responsible for the problem)
/label ~bug ~reproduced ~needs-investigation
/cc @project-manager
/assign @qa-tester
```
\ No newline at end of file
# 自定义Git属性[](#自定义Git属性 "Permalink")
CODEChina 支持定义自定义[Git 属性](https://git-scm.com/docs/gitattributes),例如将哪些文件视为二进制文件,以及将哪种语言用于语法突出显示差异。
要定义这些属性,在代码仓库的根目录中创建一个名为`.gitattributes`的文件,并将其推送到项目的默认分支即可。
## 编码要求[](#encoding-requirements "Permalink")
`.gitattributes`文件*必须*使用 UTF-8 编码,并且*不能*包含字节顺序标记,如果使用其他编码语言则文件的内容将被忽略。
## 语法高亮[](#syntax-highlighting "Permalink")
`.gitattributes`文件可用于定义语法高亮显示文件和差异时使用的语言。
\ No newline at end of file
# 迁移项目[](#迁移项目 "Permalink")
1. [From GitHub.com or GitHub Enterprise](/docs/user/project/import/github.md)
2. [From repo by URL](/docs/user/project/import/by-url.md)
除了上述特定的迁移文档之外,您还可以从 New Project 页面通过 HTTP 导入任何 Git 代码仓库。请注意,如果存储库太大,则导入可能会因为超时而失败。
\ No newline at end of file
# 通过URL导入[](#通过URL导入 "Permalink")
您可以通过提供 Git URL 来导入现有的代码仓库:
1. 在您的仪表板中,单击" **新建项目"**
2. 切换到**导入项目**选项卡
3. 点击**按 URL Repo**按钮
4. 填写" Git 代码仓库 URL"和其余项目字段
5. 单击**创建项目**开始导入过程
6. 完成后,您将被重定向到新创建的项目
[![Import project by repo URL](/docs/img/import_projects_from_repo_url.png)](/docs/img/import_projects_from_repo_url.png)
\ No newline at end of file
# 从Github导入[](#从Github导入 "Permalink")
使用导入器,您可以将 GitHub 代码仓库导入 CODEChina。
## 概览[](#overview "Permalink")
导入了项目的以下方面:
* 仓库描述
* Git 存储库数据
* Issue
* 拉取请求
* Wiki
* 里程碑
* 标签
* Release
* 拉取请求评论
* 定期发布和请求注释
保留对拉取请求和问题的引用,并且每个导入的存储库都保持可见性级别,除非该可见性级别受到限制 ,在这种情况下,它默认为默认项目可见性。
## 实现原理[](#how-it-works "Permalink")
导入 Issue 和拉取请求时,导入程序会尝试在数据库中查找其 GitHub 作者和 指派人(请注意,拉取请求在 CODEChina 中被称为"合并请求")。
为了导入成功,在Github 项目导入前,至少需要项目中的每个作者和指派人都应该满足下列条件:
* 有一个 GitHub 帐户,其[主要电子邮件地址](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)与其 CODEChina 帐户的电子邮件地址匹配。
如果在 CODEChina 的数据库中未找到项目中引用的用户,则会将项目创建者(通常是启动导入的用户)设置为作者/指派人,但是对于该项目中 Issue 的评论,还是会提及到 Github 原作者。
如果导入项目的命名空间不存在,则导入项目时会创建新的命名空间/组织;如果名称空间已经被占用,则会将该项目导入至启动导入过程的用户的命名空间里,命名空间/代码仓库名称也可以由具有权限的用户进行编辑。
有关更多技术细节,您可以参考使用 GitHub 导入器开发人员文档。
\ No newline at end of file
# Issues[](#issues "Permalink")
问题是就想法和计划工作进行协作的基本介质。
## 概览[](#overview "Permalink")
CODEChina Issue 跟踪器是用于协作开发想法,解决问题和计划工作的高级工具。
通过 Issue,可以在以下各项之间,在实施之前和期间共享和讨论提案:
* 您和您的团队
* 外部合作者
它们还可以用于各种其他目的,根据您的需求和工作流程进行定制,Issue 始终与特定项目相关联.
**常见的用例包括:**
* 讨论新想法的实施
* 跟踪任务和工作状态
* 接受功能建议,问题,支持请求或错误报告
* 详细说明新的代码实现
另请参见[始终从 Issue 开始讨论](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/)
## 认识 Issue[](#parts-of-an-issue "Permalink")
Issue 包含各种内容和元数据,从而在使用方式上具有很大的灵活性。每个 Issue 可以包含以下属性,但并非所有项目都是必须设置的。
* **内容**
* 标题
* 描述和任务
* 评论和其他活动
* **人员**
* 作者
* 指派人
* **状态**
* 状态(打开或关闭)
* 机密性
* 任务(完成与未完成)
* **规划和跟踪**
* 里程碑
* 截止日期
* 时间跟踪
* 标签
* 投票数
* 反应表情
* 关联问题
* 唯一的 Issue ID 和 URL
## 查看及管理 Issue[](#viewing-and-managing-issues "Permalink")
虽然您可以在[ Issue 页面](#issue-page)上查看和管理问题的全部详细信息,但也可以使用" [ Issue 列表"](#issues-list)["看板"](#issue-boards) ,Issue 引用 处理多个问题。
针对问题的关键操作包括:
* [新建 Issue](/docs/user/project/issues/manage.md#create-a-new-issue)
* [移动 Issue](/docs/user/project/issues/manage.md#moving-issues)
* [关闭 Issue](/docs/user/project/issues/manage.md#closing-issues)
* [删除 Issue](/docs/user/project/issues/manage.md#deleting-issues)
### Issue 详情页[](#issue-page "Permalink")
在 Issue 的详情页面上,您可以查看 Issue 的所有方面,如果有必要的[权限](/docs/user/permissions.md) ,可以对其进行修改。
### Issue 列表[](#issues-list "Permalink")
在" Issue 列表"上,可以查看当前项目中的所有问题。使用[搜索查询](/docs/user/search.md#filtering-issue-and-merge-request-lists)过滤 Issue 列表,包括特定的元数据,例如标签,指派人,状态等。从此视图,您还可以对显示的 Issue [进行批量](/docs/user/project/bulk-edit.md)更改。
您可以通过多种方式对问题列表进行排序,例如,通过问题创建日期,里程碑到期日期. 有关更多信息,请参见[排序和排序 Issue 列表](/docs/user/project/issues/sort.md)页面.
### 看板[](#issue-boards "Permalink")
[看板](/docs/user/project/kanban.md)中的其栏目根据标签来显示 Issue,它提供了可高度定制的工作流来管理问题的灵活性。
您可以在栏中重新排序 Issue,如果将 Issue 拖到另一列,则其关联的标签将更改以匹配新列的标签,整个看板可以被筛选为仅包括某个里程碑或总体标签中的问题。
### 相关的 Issue[](#related-issues-starter "Permalink")
您可以将两个 Issue 标记为"相关",以便在查看一个 Issue 时,另一个 Issue 始终列在"相关 Issue"部分中,这可以帮助显示重要的上下文,例如过去的工作,依赖项或重复项等。
### 关联 Issue[](#crosslinking-issues "Permalink")
您可以通过引用另一个 Issue 来[关联 Issue](/docs/user/project/issues/crosslinking.md) ,也可以通过包括其 URL 或 ID 来合并请求。参考的 Issue 在活动流中显示有关参考的消息,并带有指向其他 Issue 或合并请求的链接。
### 相似 Issue[](#similar-issues "Permalink")
为了防止同一主题重复出现问题,在创建新 Isuue 时会搜索相似的 Issue。
**新建 Issue**页面中键入标题时,系统会搜索用户在当前项目中有权访问的所有 Issue 的标题和描述,标题框下方最多显示五个类似问题(按最新更新排序)。
## 其他 Issue 操作[](#other-issue-actions "Permalink")
* [从模板创建 Issue](/docs/user/project/description-template.md#using-the-templates)
* [设置截止日期](/docs/user/project/issues/due-date.md)
* [批量编辑问题](/docs/user/project/bulk-edit.md)——从 Issue 列表中选择多个 Issue,以批量更改其状态,指派人,里程碑或标签。
\ No newline at end of file
# 操作Issue[](#操作Issue "Permalink")
请参考[ Issue 文档](/docs/user/project/issues.md)以了解更多关于 Issue 的介绍。
## Issue的元素[](#parts-of-an-issue "Permalink")
下图说明了问题的构成,请注意,根据查看问题的用户权限不同,某些部分看起来可能会略有不同或不存在。
您可以在一个屏幕上找到该 Issue 的所有信息。
[![Issue view](/docs/img/issues_main_view_numbered.png)](/docs/img/issues_main_view_numbered.png)
* **1.** [新建 Issue, 关闭 issue (重新开启 issue, 报告 issue)](#new-issue-close-issue-reopen-issue-report-issue)
* **2.** [新建待办事项](#to-do)
* **3.** [指派](#assignee)
* **4.** [里程碑](#milestone)
* **5.** [工时统计](#time-tracking)
* **6.** [截止日期](#due-date)
* **7.** [标签](#labels)
* **8.** [机密性](#confidentiality)
* **9.** [锁定 Issue](#lock-issue)
* **10.** [参与者](#participants)
* **11.** [通知](#notifications)
* **12.** [移动 Issue](#reference)
* **13.** [编辑 Issue](#edit)
* **14.** [Issue 描述](#description)
* **15.** [相关合并请求](#related-merge-requests)
* **16.** [点赞](#award-emoji)
* **17.** [查看全部活动](#show-all-activity)
* **18.** [创建合并请求](#create-merge-request)
* **19.** [Issue 历史](#issue-history)
* **20.** [评论](#comments)
* **21.** [提交评论,开启新的讨论,关闭 Issue](#submit-comment-start-a-thread-or-comment-and-close)
Issue 从状态(打开或关闭)开始,然后是作者,并包括许多其他功能,在上图中编号,下面将逐一进行解释。
当 Issue 由其他用户更改时,Issue 页面的许多元素都会自动刷新,例如标题和说明。评论和系统评论也会根据各种操作和内容更新自动更新。
### 新建 Issue, 关闭 issue (重新开启 issue, 报告 issue)[](#new-issue-close-issue-reopen-issue-report-issue "Permalink")
单击" **新建 Issue"**将打开一个新窗口,可以在同一项目中创建一个新 Issue。单击**关闭 Issue**将关闭此 Issue,但不会被删除。如果 Issue 已经关闭,您仍然可以访问它,并且按钮将显示**重新开启 issue** ,您可以单击以重新打开 Issue,重新开放的 Issue 与其他任何 Issue 都没有不同。
如果您无权修改 Issue,则" **关闭 Issue"**按钮将替换为" **举报 Issue"** ,您可以单击该按钮以[提交](/docs/user/abuse.md)有关该 Issue [的滥用情况报告](/docs/user/abuse.md); 如果您有权修改 Issue,但仅在关闭 Issue后,它也会显示.
### 待办事项[](#to-do "Permalink")
您可以在[待办事项列表](/docs/user/todo.md)添加待办事项或从中删除待办事项。具体可以执行的操作取决于待办事项是否已在"任务列表"中,如果问题是:
* 已在您的待办事项清单上:该按钮标有" **标记为已完成"** ,单击按钮以从您的任务列表中删除该问题
* 不在您的待办事项清单上:该按钮标有**添加待办事项** ,单击按钮将问题添加到您的"任务列表"中
### 指派[](#assignee "Permalink")
可以将问题分配给:
* 您自己
* 其他用户
可以根据需要频繁更改指派人,指派人应对该 Issue 负责,直到将其重新分配给其他人至解决该 Issue 为止。分配给某人后,Issue 将显示在其分配的 Issue 列表中。
**提示:**如果用户不是该项目的成员,则只有他们自己创建的 Issue 才能够分配给他们。
### 里程碑[](#milestone "Permalink")
选择一个[里程碑](/docs/user/project/milestone.md) ,并将 Issue 归类到其中。
### 工时统计[](#time-tracking "Permalink")
使用[快速行动](/docs/user/project/quick-actions.md)[跟踪估计和花费在 Issue 上的时间](/docs/user/project/time-track.md) ,您可以添加解决 Issue [所需时间](/docs/user/project/time-track.md#estimates)[估计](/docs/user/project/time-track.md#estimates),还可以添加解决 Issue[所花费的时间](/docs/user/project/time-track.md#time-spent)
### 截止日期[](#due-date "Permalink")
当您的工作时间很紧时,有一种方法来为实现和解决 Issue 设置截止日期将尤为重要。这可以在[截止日期](/docs/user/project/issues/due-date.md)元素中完成,截止日期可以根据需要进行多次更改。
### 标签[](#labels "Permalink")
通过给 Issue 加上[标签](/docs/user/project/label.md)来对其进行分类,它们有助于组织工作流程,并使您能够更顺畅的使用看板。
还可以为组织标签分配 Issue ,组织标签允许您对同一组内的所有项目使用相同的标签,它们的工作原理完全相同,并且可立即用于该组织的所有项目。
**提示:**如果标签尚不存在,可以单击**编辑** ,它会打开一个下拉菜单,从中可以选择**创建新标签**
### 机密性[](#confidentiality "Permalink")
您可以[将 Issue 设置为机密](/docs/user/project/issues/confidential.md), 设置后,未经授权的用户将无法访问该 Issue,也不会在项目看板或 Issue 列表中看到该 Issue。
### 锁定 Issue[](#lock-issue "Permalink")
您可以[锁定 Issue 中的讨论](/docs/user/discussions.md) ,以防止添加更多评论。
### 参与者[](#participants "Permalink")
涉及该 Issue 的所有用户,他们要么参与了该 Issue 的[讨论](/docs/user/discussions.md) ,要么在描述或讨论中被提及。
### 通知[](#notifications "Permalink")
单击图标以启用/禁用该 Issue 的[通知](/docs/user/account/email-notify.md#issue--epics--merge-request-events) ,如果您以任何方式参与了该 Issue,它将自动启用。
* **启用**: 如果您不是该 Issue 的参与者,但想要了解该 Issue 的进展,您可以启用并订阅该 Issue 的更新通知
* **禁用** :如果您正在接收有关该 Issue 的更新通知,但不再希望接收它们,请禁用该通知
### 编辑[](#edit "Permalink")
单击此图标可编辑当前 Issue ,您将有权访问与创建 Issue 时的全部字段,如果用户没有编辑 Issue 的权限,则不会显示此图标。
### 描述[](#description "Permalink")
纯文本标题和 Issue 描述位于 Issue 页面的顶部,该描述完全支持[Markdown](/docs/user/markdown.md#gitlab-flavored-markdown-gfm) ,支持许多格式。问题历史记录中列出了对 Issue 描述的更改记录。
### 提及[](#mentions "Permalink")
您可以使用`@username``@groupname`提及用户或组织,除非他们设置禁用了所有通知,否则它们将通过待办事项和电子邮件得到通知,这是在通知设置中控制的。
自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们。
**提示:**避免在问题中提及`@all`并合并请求,因为它会向该项目组的所有成员发送电子邮件通知,产生垃圾邮件。
### 相关的合并请求[](#related-merge-requests "Permalink")
该 Issue 的描述或 Issue 讨论中提到的[合并请求](/docs/user/project/issues/crosslinking.md#from-merge-requests)在此处列为[相关合并请求](/docs/user/project/issues/crosslinking.md#from-merge-requests) ,另外,如果当前 Issue 在另一个合并请求中被提及,则该合并请求也将在此处列出。
### 点赞[](#award-emoji "Permalink")
您可以为该 Issue 点赞, 有"顶"和"踩"两种快捷方式,或者您可以单击浅灰色的"笑脸"图标并从可用的[Markdown Emoji](/docs/user/markdown.md#emoji)下拉列表中选择其他表情。
**提示:在讨论中**发布"+1"作为评论会对该 Issue 的所有参与/订阅者造成垃圾邮件,也会使讨论内容显得混乱,因此不建议这样做.。给 Issue 点赞是一种让他们知道您的反应而不会发送垃圾邮件的方法,我们更建议您使用这种方式。
### 显示所有活动[](#show-all-activity "Permalink")
您可以通过单击**显示所有活动**并选择以下任一内容来过滤 Issue 历史记录中**显示的内容**
* **仅显示评论** ,仅显示讨论并隐藏 Issue 的更新
* **仅显示历史记录** ,仅显示更新并隐藏讨论
此外:
* 您可以使用`@username``@groupname`提及用户或组,除非他们已[禁用](#notifications)其配置文件设置中的[所有通知](#notifications) ,否则它们将通过待办事项和电子邮件得到[通知](#notifications)
* 自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们。
### 创建合并请求[](#create-merge-request "Permalink")
通过一个操作同时完成创建一个新的分支和**草稿**合并请求, 默认情况下,该分支将被命名为`issuenumber-title` ,但是您可以选择任何名称,并且系统会验证该分支是否已经被使用。创建的合并请求将自动继承 Issue 的里程碑和标签,并设置为在合并时自动关闭 Issue 。
(可选)您可以选择仅创建一个[新分支](/docs/user/project/repo/web-editor.md#create-a-new-branch-from-an-issue) ,并以该 Issue 命名。
### Issue 历史记录[](#issue-history "Permalink")
所有向该 Issue 提交的评论和更新都会被列出在 Issue 历史记录中,如上面介绍的,可以通过过滤条件筛选 Issue 历史记录。
#### 动态排序[](#activity-sort-order "Permalink")
您可以颠倒 Issue 动态的默认顺序,上方的 Issue 动态将按照您的选择排序。您的排序方式将通过本地存储保存,并自动应用于您查看的每一个 Issue 。
要更改 Issue 动态排序顺序,请单击**按时间倒叙**下拉菜单,然后选择最旧或最新的优先显示。
### 评论[](#comments "Permalink")
通过在讨论中发布评论来协作解决 Issue ,评论框将完全支持Markdown。
### 提交评论,开启新的讨论,关闭 Issue[](#submit-comment-start-a-thread-or-comment-and-close "Permalink")
撰写评论后,您可以:
* 单击**评论** ,您的评论将被发布
* 选择从下拉列表中**启动新的讨论** ,并在当前 Issue 的主讨论中启动一个新的[讨论]来讨论更具体的点,可邀请其他参与者直接回复您的讨论,并将相关评论分组在一起。
您也可以从此处关闭 Issue ,无需滚动到 Issue 页面的顶部再关闭 Issue。
\ No newline at end of file
# 机密 Issue[](#confidential-issues "Permalink")
机密性 Issue 是指那些仅具有[足够权限](#permissions-and-access-to-confidential-issues)的项目成员可见的 Issue, 开源项目和公司都可以使用机密 Issue 来使安全漏洞不被公开或防止意外泄漏。
## 将 Issue 设置为私密[](#making-an-issue-confidential "Permalink")
您可以在创建 Issue 或编辑现有 Issue 的过程中将其设置为保密。
创建新 Issue 时,可以在文本区域下方的复选框中将问题标记为机密 Issue。选中该框,然后点击" **提交问题"**按钮以创建 Issue。对于现有 Issue ,可以对其进行编辑,然后选中机密复选框,并点击**保存更改**
[![Creating a new confidential issue](/docs/img/confidential_issues_create.png)](/docs/img/confidential_issues_create.png)
## 修改 Issue 的机密性[](#modifying-issue-confidentiality "Permalink")
有两种方法可以更改 Issue 的机密性:
第一种方法是编辑 Issue 并标记/取消标记机密复选框,保存 Issue 后,它将更改 Issue 的机密性;
第二种方法是在 Issue 详情页右侧找到"保密性"部分,然后单击**编辑**,在弹出的窗口中可以设置打开或关闭 Issue 的机密性。
每次 Issue 机密性的更改也会被系统作为评论自动记录在 Issue 的历史记录中。
[![Confidential issues system notes](/docs/img/confidential_issues_system_notes.png)](/docs/img/confidential_issues_system_notes.png)
## 机密 Issue 区别[](#indications-of-a-confidential-issue "Permalink")
> **注意:**如果您没有足够的权限,您将无法看到机密 Issue 。
我们可以通过以下几点来区分机密 Issue 和普通 Issue:
在 Issue 列表页面视图中,您可以在标记为机密的问题旁边看到斜线图标
[![Confidential issues index page](/docs/img/confidential_issues_index_page.png)](/docs/img/confidential_issues_index_page.png)
* * *
同样,在 Issue 详情页,您可以在 Issue 标题上方看到斜线图标,此外在下方的评论区域中也有一个提示框,表明您正在评论的 Issue 是机密的。
[![Confidential issue page](/docs/img/confidential_issues_issue_page.png)](/docs/img/confidential_issues_issue_page.png)
Issue 详情页右边栏也有一个 机密性的标识:
[![Sidebar confidential issue](/docs/img/sidebar_confidential_issue.png)](/docs/img/sidebar_confidential_issue.png)
## 机密 Issue 的访问权限[](#permissions-and-access-to-confidential-issues "Permalink")
对于机密 Issue ,有两种级别的访问权限。一般情况下,机密 Issue 仅对具有Reporter 访问权限的项目成员可见;但是,Guest 用户也可以创建机密 Issue ,但 Guest 只能查看到他们自己创建的机密 Issue 。
对于没有权限的用户,机密 Issue 在搜索结果中也会被隐藏。
## 由机密 Issue 创建的合并请求[](#merge-requests-for-confidential-issues "Permalink")
为了防止机密信息在帮助解决机密 Issue 的过程中从公共项目中泄露,我们可以通过创建私有 Fork 项目的合并请求来解决机密 Issue 。
创建的合并请求将针对私有 Fork 项目的默认分支,而不是公共上游项目的默认分支。这样可以防止合并请求、分支和提交进入公共代码仓库,避免过早地泄露机密信息。当准备好将机密提交公开时,可以通过打开从私有 Fork 项目到公共上游项目的合并请求来完成。
**最佳实践:**如果您在原始上游的同一组织或子组织中创建了一个长期的私有 Fork 项目,则公共项目的所有具有 Developer 权限的用户在私有项目中也将具有相同的权限,这样,所有有权查看机密 Issue 的开发人员都将拥有更简化的工作流程来解决这些 Issue 。
### 实现方式[](#how-it-works "Permalink")
在机密 Issue 中,将会显示**创建机密合并请求**按钮,单击它会打开一个下拉列表,您可以在其中选择**创建机密合并请求和分支****创建分支**
**项目**下拉列表将显示用户至少是 Developer,并且合并请求已启用的全部私有 Fork 项目列表。
每当" **分支名称"**和" **源(分支或标记)"**字段更改时,将检查目标或源分支的可用性。 两个分支都应在所选的私有 Fork项目中可用。
单击**创建机密合并请求**按钮后,将在私有 Fork 项目中创建分支和合并请求,当选择**创建分支**时,将仅创建分支。
在私有 Fork项目中创建分支后,开发人员现在可以将代码推送到该分支以解决机密 Issue 。
\ No newline at end of file
# 关联Issue[](#crosslinking-issue "Permalink")
可以访问 Issue 页面了解更多关于 Issue 的内容。
## 在提交信息中关联[](#from-commit-messages "Permalink")
每次在提交消息中提及 Issue 时,您都会在开发工作流的两个阶段之间建立一种关系: Issue 本身以及与该 Issue 相关的第一次提交。
如果 Issue 和您要提交的代码都在同一项目中,则只需在提交消息中添加`#xxx` ,其中`xxx`是 Issue 编号。如果它们不在同一项目中,则可以将完整的 URL 添加到问题中( `https://codechina.csdn.net/<username>/<projectname>/issues/<xxx>` )。
```markdown
git commit -m "this is my commit message. Ref #xxx"
```
```markdown
git commit -m "this is my commit message. Related to https://codechina.csdn.net/<username>/<projectname>/issues/<xxx>"
```
**注意:**将您的第一次提交与您的 Issue 相关联,对于分析跟踪您的过程将非常重要。它将测量该 Issue 从计划到实施所花费的时间,即从创建 Issue 到进行第一次提交之间的时间。
## 在 Issue 中关联[](#from-related-issues "Permalink")
在合并请求及在其他 Issue 中提及相关 Issue 对您的团队成员和协作者了解有关同一主题的未解决 Issue 将很有帮助。
如上所述,当您从提交消息中提到 Issue时,您可以执行此操作。
当在 Issue `#222`提到 Issue `#111`时,Issue `#111`还将在其跟踪器中显示一条通知,也就是说,您只需提及一次即可在两个Issue 中均显示该关系。在[合并请求中](#from-merge-requests)提及 Issue 时,也是如此。
## 在合并请求中关联[](#from-merge-requests "Permalink")
在合并请求中提及 Issue 与在 Issue 中关联是一样的步骤。
当您在合并请求说明中提到 Issue 时,它就会[将 Issue 和合并请求链接在一起](#from-related-issues)。此外,您还可以[将 Issue 设置](/docs/user/project/issues/manage.md#closing-issues-automatically)为在合并请求合并后立即[自动关闭](/docs/user/project/issues/manage.md#closing-issues-automatically)
\ No newline at end of file
# 截止日期[](#due-date "Permalink")
截止日期在 Issue 中可用于跟踪 deadlines 以确保功能的按期交付。您至少需要 Reporter 权限才可以编辑截止日期,但任何具有 Issue 查看权限的用户都可以看到截止日期。
## 设置截止日期[](#setting-a-due-date "Permalink")
创建或编辑 Issue 时,您可以点击**截止日期**字段,然后出现一个日历来帮助您选择所需的日期。要删除日期,请选择日期文本并将其删除即可。该日期的时区与服务器的时区有关,与用户的时区无关。
您还可以通过 Issue 侧边栏设置截止日期。在 Issue 详情页的右侧找到**截止日期**,然后单击**编辑**以选择截止日期或删除现有的日期,您所作的更改将立即保存。
设置截止日期的最后一种方法是直接在 Issue 的描述或评论中使用[快速操作](/docs/user/project/quick-actions.md)
* `/due <date>` :设置到期日, 有效的`<date>`示例包括`in 2 days``this Friday``December 31st`
* `/remove_due_date` :删除到期日
## 截止日期的用法[](#making-use-of-due-dates "Permalink")
设置了截止日期的 Issue 可以在 Issue 跟踪器中轻松查看到,并在它们旁边显示了截止日期,日期过期的 Issue 会将图标和日期显示为红色。您可以从右侧的下拉菜单中按截止日期倒叙/顺序对 Issue 进行排序。
截止日期也会出现在您的[待办事项清单中](/docs/user/todo.md) .
未解决 Issue 在截止日期的前一天,系统将向该 Issue 的所有参与者发送电子邮件,与截止日期一样,"截止日期前的一天"由服务器的时区来确定。
截止日期的问题也可以导出为 iCalendar,可以将 URL 添加到日历应用 app 中。通过单击以下页面上的**订阅日历**按钮可以访问该 URL:
***分配的 Issue **页面上,链接在该页面的右上方
***项目 Issue **页面上
# 管理 Issue[](#managing-issues "Permalink")
Issue 是通过想法和计划进行协工作的基本要素。 [创建](#create-a-new-issue)[移动](#moving-issues)[关闭](#closing-issues)[删除](#deleting-issues) Issue 是 Issue 中的关键操作。
## 创建 Issue[](#create-a-new-issue "Permalink")
创建新 Issue 时,系统将提示您填写 Issue 的数据和字段,如下所示。如果您清楚要分配给Issue 的值,则可以使用" [快速操作"](/docs/user/project/quick-actions.md)功能输入相应的内容,而不用从列表中选择它们。
### 获取新建 Issue 的表单[](#accessing-the-new-issue-form "Permalink")
有多种方法可以从项目中获取"新建 Issue"表单:
* 进入**项目** > ** Issue** > **新建 Issue**
* 从项目中**未解决的 Issue**中,点击**新建 Issue**以在同一项目中创建一个新的 Issue
***项目的仪表板中** ,单击加号( **+** )打开带有一些选项的下拉菜单,选择**新建 Issue**以在该项目中创建一个 Issue:
***看板**中,通过单击列表顶部的加号( **+** )创建新 Issue,将新建一个带有对应标签的 Issue
### 认识新建 Issue 的表单[](#elements-of-the-new-issue-form "Permalink")
[![New issue from the issues list](/docs/img/new_issue_v13_2.png)](/docs/img/new_issue_v13_2.png)
创建新 Issue 时,可以填写以下字段:
1. **标题**
2. **描述**
3. **问题机密性设置**
4. **指派人**
5. **截止日期**
6. **里程碑**
7. **标记**
## 移动 Issue[](#moving-issues "Permalink")
移动 Issue 会将其复制到新位置(项目),并在旧项目中将其关闭,但不会被删除。这两个 Issue 上还将添加一个系统注释,以指示它来自何处。
移动 Issue 的按钮位于 Issue 详情页右侧最底部。
## 关闭 Issue[](#closing-issues "Permalink")
当您确定 Issue 已解决或不再需要解决时,可以使用"关闭"按钮关闭该 Issue。
您还可以通过在看板中将从其拖放到**已关闭**列表中来**关闭** Issue。
### 自动关闭 Issue[](#closing-issues-automatically "Permalink")
**注意:**由于性能原因,从现有代码仓库的第一次推送将禁用自动关闭 Issue 功能。
当提交或合并请求解决了一个或多个 Issue 时,在将提交或合并请求推送到项目的默认分支时将会自动关闭这些 Issue。
如果提交消息或合并请求描述包含与[定义的模式](#default-closing-pattern)相匹配的文本,则匹配文本中引用的所有 Issue 均将被关闭。将提交推送到项目的[**默认**分支时](/docs/user/project/repo/branches.md#default-branch) ,或者将提交或合并请求合并到默认分支时,Issue 就会自动关闭。
例如,如果合并请求描述中包含`Closes #4, #6, Related to #5`,则合并合并请求时问题`#4``#6`将自动关闭,但不会合并`#5`,只会将其标记为相关 Issue ,但不会自动关闭。
如果 Issue 与 合并请求位于不同的代码仓库中,则需要提供完整的 Issue URL地址:
```markdown
Closes #4, #6, and https://codechina.csdn.net/<username>/<projectname>/issues/<xxx>
```
#### 默认关闭表达式[](#default-closing-pattern "Permalink")
如果未指定,将使用如下所示的表达式来用作默认 Issue 关闭的表达式:
```markdown
\b((?:[Cc]los(?:e[sd]?|ing)|\b[Ff]ix(?:e[sd]|ing)?|\b[Rr]esolv(?:e[sd]?|ing)|\b[Ii]mplement(?:s|ed|ing)?)(:?) +(?:(?:issues? +)?%{issue_ref}(?:(?: *,? +and +| *,? *)?)|([A-Z][A-Z0-9_]+-\d+))+)
```
这将匹配以下关键字:
* Close, Closes, Closed, Closing, close, closes, closed, closing
* Fix, Fixes, Fixed, Fixing, fix, fixes, fixed, fixing
* Resolve, Resolves, Resolved, Resolving, resolve, resolves, resolved, resolving
* Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing
请注意, `%{issue_ref}`是在源代码中定义的复杂正则表达式,可以匹配对以下内容的引用:
* 本地 Issue( `#123` ).
* 跨项目 Issue( `group/project#123` ).
* 指向 Issue 的链接( `https://gitlab.example.com/group/project/issues/123` ).
例如以下提交消息:
```markdown
Awesome commit message
Fix #20, Fixes #21 and Closes group/otherproject#22.
This commit is also related to #17 and fixes #18, #19
and https://codechina.csdn.net/group/otherproject/issues/23.
```
将在提交被推送到的项目中关闭`#18``#19``#20``#21` ,以及`group/otherproject`项目中`#22``#23``#17`将不会关闭,因为它与关闭模式不匹配,当从命令行与`git commit -m`一起使用时,它可以处理多行/多行提交消息。
#### 禁用自动关闭 Issue[](#disabling-automatic-issue-closing "Permalink")
可以在[项目的设置中](/docs/user/project/settings.md)禁用项目的自动关闭 Issue 功能。引用的问题仍将按原样显示,但不会自动关闭。
这仅影响被新合并请求或提交关联的 Issue,已经解决的 Issue 仍然保持原样,禁用自动关闭 Issue 的设置仅影响当前项目中的合并请求,并不会阻止其他项目从通过跨项目的 Issue将其关闭。
## 删除 Issue[](#deleting-issues "Permalink")
具有项目 [Owner](/docs/user/permissions.md) 权限的用户可以通过编辑 Issue 并单击删除按钮来删除 Issue。
# Issue 排序[](#Issue排序 "Permalink")
您可以通过多种方式对 Issue 列表进行排序,包括按 Issue 创建日期、里程碑、截止日期等进行排序。可用的排序选项可以根据列表的上下文进行更改。有关按发布优先级排序的信息,请参见[标签优先级](/docs/user/project/label.md#label-priority)
在项目的 Issue 列表清单中,也可以手动对 Issue 进行排序,类似于看板中的手动排序。
## 手动排序[](#manual-sorting "Permalink")
选择**手动**排序时,可以通过拖放移动 Issue 来更改顺序,更改后的排序自动保留。除了某些个别情况外,访问同一列表的每个人都将看到重新排序的 Issue 列表。
每个 Issue 都分配有一个相对顺序值,代表其相对于列表中其他 Issue 的相对顺序,当您拖放 Issue 并重新排序时,其相对顺序值也会进行相应地更改。
此外,任何出现在手动排序列表中的 Issue ,更新后的相对顺序将用于排序。这也意味着,如果您具有相应权限的任何用户将问题`A`拖放到问题`B`上方,则随后将这两个问题在任何列表中(可能是不同的)例如项目 Issue 列表或组织 Issue 列表),都将维持相同的排序。
此顺序还会影响看板中 Issue 的排序,更改 Issue 列表中的顺序会更改看板中的顺序,反之亦然。
\ No newline at end of file
# 看板[](#issue-boards "Permalink")
我们也提供了种组织工作、提高效率的 Issue 看板,看板也支持将工作拆分为可执行的小任务,并使用看板实现工作的流转。
## 概览[](#overview "Permalink")
看板是一个软件项目管理工具,用于计划,组织和可视化功能或产品发布的工作流程,它可以用作[看板](https://en.wikipedia.org/wiki/Kanban_(development))或[Scrum 板](https://en.wikipedia.org/wiki/Scrum_(software_development))。
它结合了 Issue 跟踪和项目管理功能,将所有内容保持在同一位置,因此您无需在不同平台之间切换即可组织工作流程。
使用看板,您可以将 Issue 组织在与其分配的标签相对应的列表中,从而在这些列表将 Issue 可视化。
您定义流程,我们会为您进行组织:您添加标签,然后创建相应的列表以提取现有 Issue。准备就绪后,可以将 Issue 从一个步骤拖放到下一个步骤。
[![GitLab issue board - Core](/docs/img/issue_boards_core.png)](/docs/img/issue_boards_core.png)
### 看板的功能[](#advanced-features-of-issue-boards "Permalink")
* 每个项目创建多个看板
## 工作方式[](#how-it-works "Permalink")
看板功能通过将 CODEChina 现有的[发行跟踪功能](/docs/user/project/issues.md#issues-list)[标签](/docs/user/project/label.md)用作 Scrum 板的列表而建立。
使用看板,您可以对 Issue 有不同的看法,同时保持在问题跟踪器中看到的相同过滤和排序功能。看板基于其项目的标签结构,因此它使用相同的描述性标签来指示在板上的位置,从而在整个开发生命周期中保持一致性。
问题板向您显示团队正在处理的问题,分配给每个人的问题以及这些问题在工作流中的位置。
从创建 Issue,托管代码,执行审阅,构建,测试和部署这些您都可以再一个平台完成,看板可帮助您在 CODEChina 中可视化和管理整个过程。
## 用户示例[](#use-cases "Permalink")
有多种方法可以使用针对自己喜欢的工作流程量身定制看板,一下是看板的一些常见用例:
### 单个看板示例[](#use-cases-for-a-single-issue-board "Permalink")
借助 CODEChina 工作流程,您可以讨论 Issue 中的提案,使用标签对其进行分类,然后在其中使用问题委员会进行组织并确定优先级。
例如,让我们考虑以下简化的开发工作流程:
1. 您有一个托管应用程序代码库的代码仓库,您的团队成员正在积极贡献代码
2. 您的**后端**团队将开始新的实施工作,收集反馈和批准,并将其传递给**前端**团队
3. 前端完成后,新功能将部署到要测试的**预发布**环境中
4. 成功后,它将部署到**生产** 环境
如果您具有标签" **后端** "," **前端** "," **暂存** "和" **生产** ",以及带有每个列表的看板,则可以:
* 可视化从开发生命周期开始到部署到生产的整个实现流程
* 通过垂直移动优先顺序排列列表中的 Issue
* 在列表之间移动 Issue,以根据您设置的标签进行整理
* 通过选择一个或多个现有 Issue,将多个 Issue 添加到看板的列表中
[![issue card moving](/docs/img/issue_board_move_issue_card_list.png)](/docs/img/issue_board_move_issue_card_list.png)
### 多个看板示例[](#use-cases-for-multiple-issue-boards "Permalink")
借助[多个看板](#multiple-issue-boards) ,每个团队可以拥有自己的看板来单独组织其工作流程。
#### Scrum team[](#scrum-team "Permalink")
每个团队只有一个看板,现在您可以在流程的每个部分中解决 Issue,例如: **To Do****Doing****Done**
#### 组织讨论[](#organization-of-topics "Permalink")
创建列表以按主题对 Issue 进行排序,并快速在主题或组织之间(例如**UX****Frontend****Backend**之间)进行更改。更改反映在各个方面,因为更改列表会相应更新每个 Issue 的标签。
#### 高级团队移交[](#advanced-team-handover "Permalink")
例如,假设我们有一个 UX 小组,其看板包含:
* **Todo**
* **Doing**
* **Frontend**
完成操作后,他们将卡移至**Frontend** ,前端团队的看板看起来像:
* **Frontend**
* **Doing**
* **Done**
由 UX 团队**整理的**卡片准备就绪后,会自动显示在" **前端"**列中。
**注意:**有关更广泛的用例,请参阅博客文章[GitLab 工作流程,概述](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario);对于一个真实的用例示例,您可以了解为什么[Codepen 决定采用发行版](https://about.gitlab.com/blog/2017/01/27/codepen-welcome-to-gitlab/#project-management-everything-in-one-place)来改善多个[发行版](https://about.gitlab.com/blog/2017/01/27/codepen-welcome-to-gitlab/#project-management-everything-in-one-place)的工作流程。
#### 快速指派[](#quick-assignments "Permalink")
为每个团队成员创建列表,然后将 Issue 快速拖放到每个团队成员的列表中。
## 看板术语[](#issue-board-terminology "Permalink")
**看板**代表您的** Issue **的独特视图。它可以有多个列表,每个列表由卡代表的 Issue 组成。
**列表**是问题板上的一列,显示与某些属性匹配的问题。除了默认的"打开"和"关闭"列表外,每个其他列表还显示与您选择的标签匹配的问题,在每个列表的顶部,您可以看到属于该问题的数量。列表类型包括:
* **开** (默认):不属于其他列表中的一个所有打开的问题, 始终显示为最左边的列表
* **已关闭** (默认):所有已关闭的问题,始终显示为最右边的列表
* **标签列表****标签的**所有未解决问题
**卡**是列表中的一个框,它代表一个 Issue,您可以将卡片从一个列表拖动到另一个列表,以更改其标签,卡上显示的信息包括:
* Issue 标题
* 相关标签
* Issue 数量
* 指派人
## 权限[](#permissions "Permalink")
具有[报告者和更高角色的](/docs/user/permissions.md)用户可以使用看板的所有功能来创建或删除列表,并将问题从一个列表拖动到另一个列表。
### 多看板[](#multiple-issue-boards "Permalink")
多看板允许给定项目或组使用多个看板,对于具有多个团队的大型项目,或者在使用代码仓库托管多个产品代码的情况下,这将非常有用。
使用菜单顶部的搜索框,您可以过滤列出的看板。
当您有十个或更多的板可用时,菜单中还会显示**最近**部分,其中包含最后四个被访问板的快捷方式。
当您在具有多个看板的项目或组中重新访问看板时,系统会自动加载您上次访问的板。
#### 创建看板[](#create-an-issue-board "Permalink")
可以通过以下步骤创建新的看板:
1. 点击"看板"页面左上角的具有当前板名称的下拉菜单
2. 点击 **创建新板**
3. 输入新板的名称
#### 删除看板[](#delete-an-issue-board "Permalink")
要删除当前活动的看板:
1. 单击"发行板"页面左上角的具有当前板名称的下拉菜单
2. 单击**删除看板**
3. 单击**删除**进行确认
### 全屏模式[](#focus-mode "Permalink")
单击右上角的按钮可打开和关闭全屏模式,在全屏模式下,导航 UI 处于隐藏状态,使您可以集中精力处理板上的问题。
## Blocked issues[](#blocked-issues "Permalink")
如果一个问题被另一个问题阻止,则其标题旁边会出现一个图标,指示其阻止状态。
[![Blocked issues](/docs/img/b1edf28a1aa5c59ffa779a574c4fc548.png)](/docs/img/issue_boards_blocked_icon_v12_8.png)
## 看板可进行的操作[](#actions-you-can-take-on-an-issue-board "Permalink")
* [新建列表](#create-a-new-list)
* [删除列表](#delete-a-list)
* [添加 Issue](#add-issues-to-a-list)
* [从列表中移除 Issue](#remove-an-issue-from-a-list)
* [筛选](#filter-issues)出现在问题板上的问题
* [拖动 Issue](#drag-issues-between-lists)
* [选择多个卡片](#multi-select-issue-cards)
* [在列表中排序](#issue-ordering-in-a-list)
* 拖动列表并重新排序
* 更改问题标签(通过在列表之间拖动问题)
* 解决问题(将其拖动到" **完成"**列表中)
如果您无法执行上述某些操作,请确保您具有正确的[权限](#permissions)
### 初次使用看板[](#first-time-using-an-issue-board "Permalink")
第一次打开看板时,会显示默认列表(" **打开"**和" **关闭"** )以及欢迎消息,其中提供了两个选项,您可以:
* 创建一组预定义的标签(默认情况下: **To Do****Doing** ),并在看板创建其对应的列表
* 退出并使用自己的列表
[![issue board welcome message](/docs/img/issue_board_welcome_message.png)](/docs/img/issue_board_welcome_message.png)
如果选择使用并创建预定义列表,则它们将显示为空,因为与它们关联的标签要到那时才存在,这意味着系统无法自动填充它们。当然,如果标签存在的话,则会创建该列表,并填充具有该标签的问题。
### 新建列表[](#create-a-new-list "Permalink")
通过单击看板右上角的**添加列表**按钮来创建新列表。
然后,选择标签以从中创建列表,新列表将被插入列表的末尾,在**完成**之前。移动和重新排序列表就像拖动列表一样简单。
要为尚不存在的标签创建列表,请选择**创建新标签****创建标签**,这将立即创建标签并将其添加到下拉列表中。现在,您可以选择它来创建列表。
### 删除列[](#delete-a-list "Permalink")
要从看板上删除列表,请使用列表标题中的删除图标,将出现一个确认对话框供您确认删除操作。
删除列表对 Issue 和标签没有任何影响,只是删除了列表视图。如果需要,您随时可以将其添加回去。
### 添加问题到列表[](#add-issues-to-a-list "Permalink")
您可以通过单击**看板**右上角的**添加问题**按钮将 Issue 添加到列表中,这将打开一个模式窗口,您可以在其中查看不属于任何列表的所有问题。
通过单击卡片选择一个或多个问题,然后单击" **添加问题"**以将其添加到所选列表中,您可以通过按标签筛选来限制要添加到列表中的问题。
### 从列表中移除 Issue[](#remove-an-issue-from-a-list "Permalink")
从列表中删除 Issue 可以通过单击卡片,然后单击侧边栏中的**从**面板中**删除**按钮来完成,相应的标签被删除。
### 过滤 Issue[](#filter-issues "Permalink")
你应该能够使用问题板顶部的过滤器来只显示你想要的结果。这与问题跟踪程序中使用的过滤类似,因为问题和标签中的元数据在问题板中重复使用。
### 创建工作流[](#create-workflows "Permalink")
通过对列表重新排序,可以创建工作流程。由于看板的列表基于标签,因此可以与您现有的看板一起使用。因此,如果您已经用"后端"和"前端"标记了事物,则问题在创建它们时会出现在列表中。此外,这意味着您可以通过更改标签轻松地在列表之间移动某些内容。
使用看板的典型工作流程为:
1. 您已经[创建了](/docs/user/project/label.md#label-management)标签并对其进行了[优先排序](/docs/user/project/label.md#label-priority)以便可以轻松地对问题进行分类
2. 您遇到很多问题(理想情况下是带有标签的)
3. 您访问看板并开始[创建列表](#create-a-new-list)以创建工作流程
4. 您可以在列表中四处移动问题,以便您的团队知道谁应该处理什么问题
5. 当一个团队的工作完成时,可以将问题拖到下一个列表中,以便其他人来接手
6. 最终解决问题后,该问题将移至" **完成"**列表并自动关闭
例如,您可以基于"前端"标签和"后端"标签创建一个列表,设计师可以通过将问题添加到"前端"列表来开始处理问题。这样,每个人都知道设计师现在正在处理该问题。然后,一旦完成,设计师所要做的就是将其拖到下一个列表"后端",后端开发人员最终可以在该列表中进行选择。完成后,将其移至**完成** ,以解决问题。
访问问题时可以清楚地看到此过程,因为每次移动到另一个列表时,标签都会更改,并且会被记录系统。
### 在列表间拖动问题[](#drag-issues-between-lists "Permalink")
在列表之间拖动问题时,根据源列表和目标列表,会发生不同的行为:
|   | 打开 | 要关闭 | 标记`B`列表 | 分配受让人`Bob`清单 |
| --- | --- | --- | --- | --- |
| 从开放 | - | 问题已结案 | `B` added | `Bob` assigned |
| 从关闭 | 问题重新开放 | - | 问题重新开放
`B`添加 | 问题重新开放
`Bob`分配 |
| 从标签`A`列表 | `A` removed | 问题已结案 | `A` removed
`B` added | `Bob` assigned |
| 从受让人`Alice`名单 | `Alice` unassigned | 问题已结案 | `B` added | `Alice` unassigned
`Bob` assigned |
### 选择多个问题卡片[](#multi-select-issue-cards "Permalink")
您可以选择多个问题卡片,然后将组拖动到列表中的另一个位置或另一个列表中。这样可以更快地一次重新排序许多问题。
要选择并移动多张问题卡片:
1. 在 Windows 或 Linux使用`Ctrl`选择每个卡+ `Click`,或者在 MacOS 使用`Cmd` + `Click`
2. 将所选卡中的一张拖到另一个位置或列表,所有所选卡都将移动
### 列表中对问题排序[](#issue-ordering-in-a-list "Permalink")
访问看板时,问题在任何列表中都显示为有序。您可以通过拖放问题来更改顺序,更改后的顺序将保存到系统中,以便以后访问同一板的任何人都可以看到新的排序结果,但也有一些例外:
给定问题首次出现在任何面板中(即用户首次加载包含该问题的面板)时,将根据[优先级顺序](/docs/user/project/label.md#label-priority)对该列表中的其他问题进行[排序](/docs/user/project/label.md#label-priority)
此时,系统会为该问题分配一个相对顺序值,该值代表其相对于列表中其他问题的相对顺序,每当您拖放该问题的重新排序时,其相对顺序值都会相应更改。
同样,当问题由用户加载时,在任何板上出现的任何时间,都会使用更新的相对顺序进行排序(这是第一次出现从上述优先顺序中提取问题的问题)。这意味着,如果您给定板上的任何用户将问题`A`拖放到问题`B`上方的顺序进行了重新排序,每当随后将这两个问题加载到任何板(例如,可以是不同的项目板或不同的组板)中时,都将维持该排序。
此顺序还会影响[问题列表](/docs/user/project/issues/sort.md) ,在看板上更改排序会更改发行列表中的顺序,反之亦然。
## Tips[](#tips "Permalink")
需要记住的几件事:
* 在列表之间移动问题会从其来源列表中删除标签,并从其去往列表中添加标签
* 如果一个问题有多个标签,则它可以存在于多个列表中
* 如果标记了问题,则会自动用问题填充列表
* 单击卡片内的问题标题,将您转到该问题
* 单击卡内的标签可快速筛选整个问题板,并仅显示所有带有该标签的列表中的问题
* 出于性能和可见性的原因,每个列表默认显示前 20 个问题。如果问题超过 20 个,请开始向下滚动,然后出现下 20 个问题
\ No newline at end of file
# 标记[](#label "Permalink")
## 概览[](#overview "Permalink")
随着Issue、合并请求和Epic数量的增长,跟踪这些项目将变得越来越困难,尤其是随着您的组织从只有几个人发展到成百上千人后。这里就出现了标记,它们可以帮助您组织和标记工作,以便您可以跟踪和找到您感兴趣的工作项。
标记是[看板](/docs/user/project/kanban.md)的关键部分,通过使用标记,您可以:
* 使用颜色和描述性标题(例如`bug``feature request``docs`对 Epic,Issue 及合并请求进行分类
* 动态过滤和管理 Epic、 Issue 及合并请求
* [搜索 Issue 列表、合并请求和史诗](/docs/user/search.md#issues-and-merge-requests)以及[看板](/docs/user/search.md#issue-boards)
## 项目标记和组织标记[](#project-labels-and-group-labels "Permalink")
我们有两种类型的标记:
* **项目标记**只能分配给该项目,并且只能合并该项目中的请求
* 可以将**组织标记**分配给选定组或其子组中的任何项目中的 Issue及合并请求
* 也可以将它们分配给所选组或其子组中的 Epic
## 分配/取消分配标记[](#assign-and-unassign-labels "Permalink")
每个 Issue、合并请求和 Epic 都可以分配任意数量的标记,您可以在标记管理中根据需要分配或取消分配标记。
可以通过以下步骤将标记分配给 Issue、请合并请求或 Epic:
1. 在 Issue 的标记部分,点击**编辑** ,然后:
* 在列表中,单击所需的标记,每个标记都带有复选框
* 通过输入搜索查询并单击搜索来查找标记,然后点击它们,您可以反复搜索并添加更多标记
2. 单击**X**或标记部分之外的任何位置,然后将应用标记
您也可以使用[`/assign @username`快速操作](/docs/user/project/quick-actions.md)来分配标记。
## Label management[](#label-management "Permalink")
具有 Reporter 或更高[权限级别](../permissions.html)的用户可以创建和编辑标记。
### 项目标记[](#project-labels "Permalink")
通过转到项目并单击** Issue > 标记**来查看项目标记列表,该列表包括在项目级别定义的所有标记,以及从直接父组继承的所有标记。您可以通过在顶部输入搜索查询并点击搜索。
可以通过以下步骤创建一个新的项目标记:
1. 进入到项目中的" ** Issue ">"标记** "
2. 单击**新建标记**按钮
* 输入标题
* (可选)输入描述
* (可选)通过单击可用颜色来选择背景颜色,或输入特定颜色的十六进制颜色值
3. 单击**创建标记**以创建标记
您也可以从 Issue 或合并请求中创建新的项目标记,在 Issue或合并请求的右侧栏中的标记部分:
1. 单击 **编辑**
2. 单击 **创建项目标记**
* 填写名称字段,请注意,如果以此方式创建标记,则无法指定描述。您可以稍后通过编辑标记来添加描述(请参见下文)
* (可选)通过单击可用颜色来选择颜色,或输入特定颜色的十六进制颜色值
3. 单击 **创建项目标记**
创建标记后,您可以点击编辑,或通过单击三个点旁边的" **订阅"**按钮,然后选择" **删除"**
#### 将项目标记提升为组织标记[](#promote-a-project-label-to-a-group-label "Permalink")
如果您以前创建了项目标记,现在想在同组织中的其他项目也使用这个标记的话,可以将其升级为组标记。
如果同一组中的其他项目具有相同标题的标记,则它们将全部与新的组标记合并;如果存在具有相同标题的组标记,则它也会被合并。
所有 Issue 、合并请求、看板,发行板过滤器以及带有旧标记的标记订阅都将分配给新的组标记.
警告: **警告:**提升标记是永久性的操作,不能撤消.
要将项目标记提升为组标记:
1. 导航到项目中的" **问题">"标记** "
2. 单击**订阅**按钮旁边的三个点,然后选择**升级为组标记**
### 组织标记[](#group-labels "Permalink")
通过转到组织并单击** Issue >标记**来查看组标记列表,该列表包括仅在组级别定义的所有标记。它没有列出项目中定义的任何标记,您可以通过在顶部输入搜索查询并点击搜索。
要创建**组标记**,可以进入到**组织** **组织设置>标记** ,并按照与[创建项目标记](#project-labels)相同的过程进行操作即可。
### 创建默认标记[](#generate-default-labels "Permalink")
如果项目或组织没有标记,则可以从标记列表页面生成一组默认的项目或组织标记。如果列表为空,该页面将显示一个**生成默认标记**按钮,单击该按钮会将以下默认标记添加到项目中:
* `bug`
* `confirmed`
* `critical`
* `discussion`
* `documentation`
* `enhancement`
* `suggestion`
* `support`
## 订阅标记[](#subscribing-to-labels "Permalink")
在项目标记列表页面和组标记列表页面中,您可以单击任何标记右侧的**订阅**以启用该标记的通知。只要将标记分配给 Issue 或合并请求,您就会收到通知。
如果要从项目内订阅组标记,则可以选择仅订阅项目或整个组织的标记通知。
## 标记优先级[](#label-priority "Permalink")
标记可以具有相对优先级,在 Issue 及合并请求列表页面的" **标记优先级"**和" **优先级"**排序顺序中使用。 组标记和项目标记的优先级都在项目级别进行,不能从组标记列表中进行。
在项目标记列表页面上,在标记上加上星号以表明它具有优先级。
[![Labels prioritized](/docs/img/labels_prioritized_v12_1.png)](/docs/img/labels_prioritized_v12_1.png)
在列表中上下拖动已加星标的标记以更改其优先级,列表中位置越高表示优先级较高。
[![Drag to change label priority](/docs/img/labels_drag_priority_v12_1.png)](/docs/img/labels_drag_priority_v12_1.gif)
如果您按`Label priority`排序,将使用以下排序顺序:
1. 具有较高优先级标记的项目
2. 没有优先标记的项目
注意,只会检查优先级最高的标记,而忽略优先级较低的标记。
如果您按`Priority`排序,则将使用以下排序顺序:
1. 具有里程碑的截止日期的项目,最早分配的[里程碑](/docs/user/project/milestone.md)在此列出
2. 具有里程碑的项目,没有截止日期
3. 具有较高优先级标记的项目
4. 没有优先标记的项目
## 故障排除[](#troubleshooting "Permalink")
### 以`_duplicate<number>`结尾的标记[](#some-label-titles-end-with-_duplicatenumber "Permalink")
在特定情况下,可以在同一名称空间中创建具有重复标题的标记,这些重复标记的标题后面会加上`_duplicate<number>` 。如果愿意,可以安全地更改这些标记的标题。
\ No newline at end of file
# 项目成员[](#member "Permalink")
您可以在所有项目中管理组和用户及其访问级别,您还可以个性化为每个项目赋予每个用户的访问级别。
您应该具有 Maintainer 或 Owner[权限](/docs/user/permissions.md),才能将新用户添加或导入到项目中。
要查看,编辑,添加和删除项目的成员,请转到项目的**项目设置>项目成员设置**
## 继承的用户[](#inherited-membership "Permalink")
当您的项目属于某个组织时,组织成员将从该组继承该项目的成员资格和权限级别。
[![Project members page](/docs/img/project_members.png)](/docs/img/project_members.png)
从上图可以得出以下几点:
* 有 3 个成员可以访问该项目
* User0 是记者,并且已从包含当前项目的组`demo`继承了他们的权限
* 对于 User1,没有组的指示,因此它们直接属于我们正在检查的项目
* 管理员是**所有**组的所有者和所有者,所以有提示表明其在父组织和继承的所有者权限
您可以使用右侧的下拉列表过滤此列表:
[![Project members filter](/docs/img/project_members_filter_v12_6.png)](/docs/img/project_members_filter_v12_6.png)
* **仅显示直接成员**仅显示 User1
* **仅显示继承的成员将**显示 User0 和 Administrator
## 添加成员[](#add-a-user "Permalink")
点击 **邀请用户** 按钮,在弹窗中按要求设置好用户、权限及访问过期时间(可选)。
[![Search for people](/docs/img/add_user_search_people.png)](/docs/img/add_user_search_people.png)
选择用户以及您要赋予该用户的[权限级别](/docs/user/permissions.md),您可以选择多个用户。
[![Give user permissions](/docs/img/add_user_give_permissions.png)](/docs/img/add_user_give_permissions.png)
完成后,点击**邀请** ,这些**用户**将立即使用您在上面授予他们的权限添加到您的项目中。
[![List members](/docs/img/add_user_list_members.png)](/docs/img/add_user_list_members.png)
现在,您可以删除现有用户或更改其对项目的访问级别。
## 导入用户[](#import-users-from-another-project "Permalink")
您可以通过单击 **导入**按钮,将另一个项目的用户导入您自己的项目中。
在下拉菜单中,您只能看到您具有 maintainer 权限的项目。
选择需要导入的组织,然后单击**导入项目成员**,将会出现一条简短的消息,通知您导入已成功,并且新成员现在位于项目的成员列表中。请注意,导入的成员将保留他们在原项目中的权限。
## 申请项目权限[](#project-membership-and-requesting-access "Permalink")
项目所有者可以:
* 允许非项目成员请求访问该项目
* 防止非项目成员请求访问
可以进入**项目设置 > 可见性,项目功能,权限**然后单击**允许用户请求访问权限** 启用该设置。
CODEChina 用户可以请求成为项目成员,进入到您要加入的项目,然后单击项目名称右侧的" **申请权限"按钮。
申请权限后:
* 将通过电子邮件向最多十个项目 maintainer 通知该请求,电子邮件被发送给最近活跃的 maintainer
* 任何项目 maintainer 都可以在成员页面上批准或拒绝该请求
**注意:**如果项目没有任何 maintainer,则将通知发送给该项目组的最近活跃的 owner。
如果您在批准请求之前改变主意,只需单击" **撤回访问请求"**按钮。
## 与组共享项目[](#share-project-with-group "Permalink")
此外,您可以[与整个组共享一个项目](/docs/user/project/member/share.md),而不需要一个一个地添加用户。
## 从项目中删除成员[](#remove-a-member-from-the-project "Permalink")
只有[Owner](/docs/user/permissions.md#group-members-permissions)权限的[用户](/docs/user/permissions.md#group-members-permissions)才能管理项目成员。
如果要删除的成员在项目中具有直接成员资格,则可以从项目中删除用户;如果成员资格是从父组继承的,则该成员只能从父组本身中删除。
删除成员时,您可以决定是从所已经分配给当前用户的 Issue 及合并请求中取消分配,还是保留分配。
* 当用户离开私有项目并且您希望撤消他们对所有问题和已分配的合并请求的访问时,从所有问题和合并请求中**取消分配已删除的成员**可能会有所帮助
* **保留问题和合并请求的分配**可能对于接受公共贡献的项目很有帮助,在这些项目中,用户不必成为成员就可以为问题和合并请求做出贡献
通过以下步骤可以在项目中删除一个成员:
1. 在一个项目中,进入到 **项目设置 > 项目成员设置**
2. 点击**删除** 要删除的项目成员旁边的按钮,将出现" **删除成员"**弹窗
3. (可选)选中" **也从相关问题中取消分配此用户并合并请求"**复选框
4. 单击 **删除成员**即可
\ No newline at end of file
# 与组织共享项目[](#share-projects-with-other-groups "Permalink")
您可以与其他组织共享项目,这样就可以通过一个操作将一个组织的全部用户添加到项目中。
## 用户项目集合[](#groups-as-collections-of-users "Permalink")
组织主要用于创建项目集合,但是您还可以利用组织的以下特定:组定义了*用户*集合,即组成员。
## 与组成员共享项目[](#sharing-a-project-with-a-group-of-users "Permalink")
授予某个组织的用户(例如"工程")访问项目(例如" Acme 项目")的主要机制是使"工程"组成为" Project Acme"的所有者,但是,如果" Acme 项目"已经属于另一个组织,比如"开源",这种情况下该怎么办?这里我们就可以使用与组成员共享项目这个功能了。
与"工程"组共享" Acme 项目":
1. 对于" Acme 项目",请点击**项目设置**,进入到**项目成员设置**
2. 点击"邀请组"按钮
3. 添加具有您选择的最大访问权限级别的"工程"组
4. 点击**邀请**按钮
5. 与"工程"共享"项目 Acme"后,该项目将出现在"工程"的组织中
请注意,您只能共享项目给符合以下条件的组织:
* 您具有明确定义的成员资格的组织
* 包含嵌套子组或项目的组织,您在其组织中具有明确定义的角色
## 最大访问权限[](#maximum-access-level "Permalink")
在上面的示例中,"工程"成员的最大" Developer "访问级别意味着"工程"中具有较高访问级别的用户(" Maintainer "或" Owner ")将仅对" Acme 项目"具有"开发者"访问权限'。
## 与私有组织共享项目[](#sharing-public-project-with-private-group "Permalink")
与私有组共享公共项目时,项目的 Owner 和 Maintainer 将在`members`页面上看到该组的名称。 所有者还可以在 Issue 或合并请求中使用@功能时,还可以看到他们无权访问的私人群组的成员。
## 禁用与组织共享项目[](#share-project-with-group-lock "Permalink")
可以禁用与组织共享项目以防止一个组织中的项目与另一个组共享一个项目。
了解更多有关[使用组锁共享的信息](/docs/user/org.md#锁定与组织共享功能)
\ No newline at end of file
# 合并请求[](#merge-request "Permalink")
合并请求使您可以可视化并协作对作为对指定 Git 分支的提交而存在的源代码的建议更改。
合并请求( **MR** )是代码协作和版本控制的基础。顾名思义,它就是一个*将*一个分支*合并*到另一个分支的*请求*
## 用户示例[](#use-cases "Permalink")
第一种情况,假设您是一个团队中的软件开发人员:
1. 您签出新分支,并通过合并请求提交更改
2. 您从团队中收集反馈
3. 您可以使用"代码质量"报告来进行优化代码的实现
4. 您可以在 CI / CD 中使用"JUnit 测试"报告来验证您的更改
5. 通过"许可证合规性"报告,可以避免使用许可证与您的项目不兼容的依赖项
6. 您要求您的经理批准
7. 您的经理:
1. 拉取提交并进行最终审查
2. 批准合并请求
3. 将其设置为在 pipeline 成功时合并
8. 您的更改将通过手动操作 CI / CD 部署到生产中
9. 您的实施已成功交付给客户
第二种情况,假设您是为您公司网站编写网页的 Web 开发人员:
1. 您签出新分支,并通过合并请求提交新页面
2. 您从审稿人那里收集反馈
3. 您的更改将通过 Review Apps 进行预览
4. 您要求您的网页设计师实施
5. 您要求您的经理批准
6. 一旦批准,您的合并请求将被[squash](/docs/user/project/merge-request/squash.md) ,并[部署到暂存中](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
7. 您的生产团队[cherry-pick](/docs/user/project/merge-request/cherry-pick.md)合并提交到生产中
## 概览[](#overview "Permalink")
合并请求(也称为" MR")显示有关建议的更改的大量信息, MR 的主体包含其描述以及其小部件(显示有关 CI / CD 管道的信息,如果存在的话),然后是与该 MR 合作的人员的讨论内容。
MR 还包含导航选项卡,从中可以查看线程上正在进行的讨论,提交列表,代码更改以及内联代码审阅。
## 合并请求导航[](#merge-request-navigation-tabs-at-the-top "Permalink")
在合并请求中将显示" **讨论区"** ," **提交"** 和" **更改"**的导航选项卡。
[![Merge request tab positions](/docs/img/merge_request_tab_position_v12_6.png)](/docs/img/merge_request_tab_position_v12_6.png)
## 新建合并请求[](#creating-merge-requests "Permalink")
点击了解 [如何创建一个新的合并请求](/docs/user/project/merge-request/create-merge-request.md)
## 管理和查看合并请求[](#reviewing-and-managing-merge-requests "Permalink")
查看和管理合并请求
## 在合并请求中测试和报告[](#testing-and-reports-in-merge-requests "Permalink")
有关合并请求中的测试选项和报告更改的信息
## 合并请求认证[](#authorization-for-merge-requests "Permalink")
使用 CODEChina 进行合并请求的主要方法有两种:
1. 在单个存储库中使用[受保护的分支](/docs/user/project/protected-branch.md)
2. 使用权威项目的分支
\ No newline at end of file
# Cherry-pick[](#cherry-pick "Permalink")
Cherry-pick 是 Git 中非常强大的一个功能,通过在合并请求和提交详细信息中引入**Cherry-pick**[挑选任何想要的提交](https://git-scm.com/docs/git-cherry-pick "Git Cherry-Pick 文档")
## Cherry-pick 一个合并请求[](#cherry-picking-a-merge-request "Permalink")
合并请求合并后,将可以使用**Cherry-pick**按钮来选择该合并中需要引入的更改。
[![Cherry-pick Merge Request](/docs/img/cherry_pick_changes_mr.png)](/docs/img/cherry_pick_changes_mr.png)
单击该按钮后,会出现一个弹窗,将显示一个分支过滤器搜索框,您可以在其中选择:
* 将更改直接选择到所选分支中
* 使用经过 Cherry-pick 的更改创建一个新的合并请求
### Cherry-pick 跟踪[](#cherry-pick-tracking "Permalink")
当您选择一个合并提交时,系统会向相关的合并请求讨论中添加系统注释,使新提交与现有合并请求相关联。
每个部署的关联合并请求列表都将包括 Cherry-pick 的合并提交。
## Cherry-pick 一个提交[](#cherry-picking-a-commit "Permalink")
您可以从提交详细信息页面中挑选一个提交:
[![Cherry-pick commit](/docs/img/cherry_pick_changes_commit.png)](/docs/img/cherry_pick_changes_commit.png)
与选择合并请求类似,您可以选择将更改直接选择到目标分支中,也可以选择创建新的合并请求以选择更改。
请注意,在进行 Cherry-pick 合并提交时,主线将始终是第一父级, 如果要使用其他主线,则需要从命令行执行。
这是一个使用第二个父级作为主线来 Cherry-pick 合并提交的示例:
```markdown
git cherry-pick -m 2 7a39eb0
```
\ No newline at end of file
# 创建合并请求[](#创建合并请求 "Permalink")
每个合并请求都从创建一个分支开始,您可以通过[命令行](#new-merge-request-from-your-local-environment) ,Git CLI 应用程序或[CODEChina WEB](#new-merge-request-from-a-new-branch-created-through-the-ui)完成分支的创建。
本文档介绍了创建合并请求的几种方法。
启动新的合并请求时,无论使用哪种方法,都将转到[**新合并请求**](#new-merge-request-page)页面,并在其中添加合并请求相关的信息。
如果将新分支推送到 CODEChina,不论使用哪种方法,都可以单击[**创建合并请求**](#create-merge-request-button)按钮并从此处启动合并请求。
## 新建合并请求[](#new-merge-request-page "Permalink")
在" **新合并请求"**页面上,首先填写**合并请求**的标题和描述,如果分支上已经有提交,则标题将用第一条提交消息的第一行预填充,描述将用提交消息中的任何其他行预填充。在所有情况下,标题都是唯一的必填字段。
在此处,您可以在其中填充信息(标题,描述,指派人,里程碑,标签,批准人),然后点击**创建合并请求**
在初始屏幕上,您还可以查看提交合并请求之前推送到分支的所有提交,管道和文件更改。
**提示:**您可以在创建合并请求之前将一次或多次推送到 CODEChina 中的分支。
## 创建合并请求按钮[](#create-merge-request-button "Permalink")
将新分支推送到 CODEChina 后,请访问 CODEChina 中的代码仓库,并在屏幕顶​​部看到一个提示,您可以从中单击**创建合并请求**按钮。
您还可以在以下页面的右上方看到" **创建合并请求"**按钮:
* 项目页
* **代码>文件**
* **合并请求**
这种情况下,系统将使用您将更改推送到的最新分支作为源分支,并将当前项目中的默认分支用作目标分支。
## 通过添加、编辑和上传文件来新建合并请求[](#new-merge-request-by-adding-editing-and-uploading-a-file "Permalink")
当您选择通过在界面上 编辑,添加或上传文件,在文件末尾,您会看到以下选项:添加**提交消息** ,选择该**提交****目标分支** ,然后选中**开始新建**复选框, **具有这些更改的合并请求**
同样,如果通过 Web IDE 更改文件,则在左侧边栏中导航到" **提交"**时,将看到这些相同的选项。
添加,编辑或上传文件后,请执行以下操作:
1. 在提交消息中描述您的更改
2. 选择一个现有分支以将您的提交添加到其中,或者,如果您想创建一个新分支,请键入新的分支名称(不带空格,大写字母或特殊字符)
3. 保持选中复选框以立即开始新的合并请求,或者取消选中该复选框以在开始合并请求之前向该分支添加更多更改
4. 单击 **提交变更**
如果您选择开始合并请求,则将转到" [**新合并请求"**页面](#new-merge-request-page) ,您可以在其中填写信息并提交合并请求。
合并请求将针对存储库的默认分支,如果要更改它,可以稍后通过编辑合并请求来进行更改。
## 来自新建分支的合并请求[](#new-merge-request-from-a-new-branch-created-through-the-ui "Permalink")
要通过界面快速开始处理文件,请导航至项目的" **代码">"分支"** ,然后单击" **新建分支"** ,将创建一个新分支,您可以开始编辑文件。
提交并推送后,您可以单击" [**创建合并请求"**](#create-merge-request-button)按钮以打开" [**新合并请求"**页面](#new-merge-request-page), 将使用当前分支作为源,并使用当前项目中的默认分支作为目标来启动新的合并请求。
## 从本地新建合并请求[](#new-merge-request-from-your-local-environment "Permalink")
假设您已将代码仓库克隆到计算机中,并且想要开始处理文件更改,请先创建并签出一个新分支:
```markdown
git checkout -b my-new-branch
```
处理文件更改,暂存并提交它们:
```markdown
git add .
git commit -m "My commit message"
```
完成后,将分支推送到 CODEChina :
```markdown
git push origin my-new-branch
```
在输出中,GitLab 将提示您一个直接链接来创建合并请求:
```markdown
...
remote: To create a merge request for docs-new-merge-request, visit:
remote: https://codechina.csdn.net/my-group/my-project/merge_requests/new?merge_request%5Bsource_branch%5D=my-new-branch
```
复制该链接并将其粘贴到浏览器中,将显示" [**新合并请求"页面**](#new-merge-request-page) .
在通过命令行推送时 ,还可以向命令添加一些标志,以减少通过界面手动编辑合并请求的需要。
如果您没有通过命令行将分支推送到 CODEChina(例如,您使用 Git CLI 应用程序来推送更改),则可以通过单击" [**创建合并请求"**](#create-merge-request-button)按钮 [**创建合并请求**](#create-merge-request-button)
## 从 Issue 新建合并请求[](#new-merge-request-from-an-issue "Permalink")
您也可以[直接从 issue 创建一个新的合并请求](/docs/user/project/repo/web-editor.md#create-a-new-branch-from-an-issue)
## 从合并请求列表页新建合并请求[](#new-merge-request-from-the-merge-requests-page "Permalink")
您可以通过在项目中的" **合并请求"**页面上单击" **新建合并请求"**按钮来开始创建新的合并请求,然后选择包含更改的源项目和分支,以及要将更改合并到的目标项目和分支。单击**比较分支,然后继续**转到" [**新合并请求"**页面](#new-merge-request-page)并填写详细信息。
## 从 Fork 项目新建合并请求[](#new-merge-request-from-a-fork "Permalink")
Fork 项目在本地更改后,可以通过以下步骤从 fork 创建一个合并请求以贡献回主项目:
1. 转到**项目>您的项目,**然后选择代码仓库的分支
2. 转到**合并请求** ,然后点击**新建合并请求**
3. 在" **源分支"**下拉列表框中,在分支的存储库中选择您的分支作为源分支
4. 在" **目标分支"**下拉列表框中,从上游存储库中选择分支作为目标分支
5. 输入凭据后,单击" **比较分支",然后继续**将本地更改与上游存储库进行比较
6. 分配用户以查看您的更改,然后点击**提交合并请求**
合并更改后,您的更改将按照规范添加到上游存储库和分支中. 合并工作后,如果您不想对上游项目做出任何其他贡献,则可以通过[删除分支关系](/docs/user/project/settings.md#removing-a-fork-relationship) ,在**项目设置> 高级设置**部分[中将 fork 与](/docs/user/project/settings.md#removing-a-fork-relationship)上游项目断开链接。
### 将补丁添加为电子邮件附件[](#adding-patches-when-creating-a-merge-request-via-e-mail "Permalink")
您可以通过将补丁添加为电子邮件的附件,将提交添加到正在创建的合并请求中。文件名以`.patch`结尾的所有附件都将被视为补丁程序,并将按名称顺序对其进行处理。
补丁的总大小不超过 2MB。
如果主题的源分支不存在,那么将从存储库的 HEAD 或指定的目标分支创建源分支以应用补丁。可以使用[`/target_branch`快速操作](/docs/user/project/quick-actions.md)指定目标分支。如果源分支已经存在,则将在其顶部应用补丁。
## 审查和管理合并请求[](#reviewing-and-managing-merge-requests "Permalink")
提交合并请求后,可以通过 CODEChina 进行[审查和管理](/docs/user/project/merge-request/reviewing.md)
\ No newline at end of file
# Draft[](#draft "Permalink")
如果合并请求尚未准备好进行合并(可能是由于持续的开发或需要开放讨论),则可以将其标记为**Draft**来阻止在合并之前接受该合并请求,**Draft**合并请求的"合并"按钮将会被禁用,从而防止其被合并,并且在删除"**Draft: / WIP:**"标志之前它将一直保持禁用都状态。
[![Blocked Merge Button](/docs/img/draft_blocked_merge_button_v13_2.png)](/docs/img/draft_blocked_merge_button_v13_2.png)
## 给合并请求添加 Draft/WIP 标记[](#adding-the-draft-flag-to-a-merge-request "Permalink")
对在进行中(WIP)合并请求可以添加** Draft: **** WIP: ** 的标记。具体的添加方式如下:
*`[Draft]``Draft:``(Draft)`到合并请求标题的开头,单击标题框下的" **以草稿开始标题:** ",在编辑合并请求的描述时将具有相同的效果
* **不推荐使用**`[WIP]``WIP:`添加到合并请求标题的开头,**WIP**仍然有效,但我们推荐使用**Draft**
* 在合并请求的讨论中添加`/wip` [快速操作](/docs/user/project/quick-actions.md#quick-actions-for-issues-merge-requests-and-epics)注释 ,可以重复进行并切换合并请求的状态。请注意,注释中的任何其他文本都将被丢弃
*`draft:``Draft:`添加到针对合并请求的源分支的提交消息的开头,这不会切换合并请求的状态,并且在另一次提交中再次执行将无效
## 移除合并请求中的 Draft/WIP 标记[](#removing-the-draft-flag-from-a-merge-request "Permalink")
与上述类似,当准备合并请求时,可以通过以下几种方式移除" `Draft`标记:
* 从合并请求标题的开头删除`[Draft]``Draft:``(Draft)` ,在编辑合并请求的描述时,在标题框下单击**从标题中删除草稿:前缀** ,将具有相同的效果
* 在合并请求的讨论中添加`/wip` [快速操作](/docs/user/project/quick-actions.md#quick-actions-for-issues-merge-requests-and-epics) 注释,可以重复进行并切换合并请求的状态。请注意,注释中的任何其他文本都将被丢弃
* 点击靠近合并请求描述底部的*移除 WIP 状态**按钮,该按钮对至少具有 Developer 权限的用户才可见
## 通过 WIP 过滤合并请求[](#includingexcluding-wip-merge-requests-when-searching "Permalink")
查看/搜索合并请求列表时,可以通过在搜索框中添加" WIP"过滤器,然后选择"是"(包括)或"否"(排除)来选择包括或排除 WIP 合并请求
\ No newline at end of file
# 快进合并请求[](#快进合并请求 "Permalink")
有时,工作流策略可能会强制要求没有合并提交的干净的提交记录,在这种情况下,快速合并是一个理想的选择。
使用快进合并请求,您可以保留线性的 Git 历史记录并且无需创建合并请求但仍能实现合并代码提交。
## 概览[](#overview "Permalink")
启用快进合并( [`--ff-only`](https://git-scm.com/docs/git-merge#git-merge---ff-only) )时,将不会创建任何合并请求提交,并且所有合并都将会被设置快进,这也就意味着仅当分支可以被快进时才允许合并。
当无法进行快进合并时,将为用户提供重新设置基准的选项。
## 开启快进合并[](#enabling-fast-forward-merges "Permalink")
1. 导航到项目的**项目设置**,然后点击"合并请求"
2. 在合并方法中选择**快速合并**选项
3. 点击**保存更改**以使更改生效
设置完成后,当您访问合并请求页面时, **只有在可能进行快速**合并的情况下,您才能接受合并请求。
如果无法进行快速合并,但可以进行无冲突的 Rebase,则将提供一个 Rebase 按钮。
如果目标分支位于源分支的前面,并且无法进行无冲突的 Rebase,则需要先在本地对源分支进行 Rebase,然后才能进行快速合并。
\ No newline at end of file
# 允许 Fork 项目协助提交合并请求[](#允许Fork项目协助提交合并请求 "Permalink")
当用户在 Fork 的项目上新建合并请求时,将为他们提供允许上游成员在源分支上与其进行协作的选项,这使得上游项目的成员可以在合并之前进行小规模修复或 Rebase 分支,从而减少了接受外部贡献的来回过程。
此功能适用于可公开访问的项目与 Fork 项目之间的合并请求。
当启用后,对项目目标分支具有合并访问权限的成员将被授予对合并请求的源分支的写权限。
## 启用允许上游项目成员修改提交[](#enabling-commit-edits-from-upstream-members "Permalink")
只有具有对源项目的推送访问权限的用户才能启用该功能,并且只有在合并请求打开时才能持续使用。启用后,上游成员也将能够重试合并请求的管道和作业:
1. 在创建或编辑合并请求时启用允许协助
[![Enable contribution](/docs/img/allow_collaboration.png)](/docs/img/allow_collaboration.png)
2. 创建合并请求后,您将看到允许可以合并到目标分支的成员的提交
[![Check that contribution is enabled](/docs/img/allow_collaboration_after_save.png)](/docs/img/allow_collaboration_after_save.png)
## 上游项目成员推送代码至 Fork 项目[](#pushing-to-the-fork-as-the-upstream-member "Permalink")
如果合并请求的创建者启用了允许上游成员进行协助贡献,则上游项目成员可以直接推送到 Fork 项目代码仓库的分支中。
假设现在有如下所示的 Fork 项目及合并请求分支:
* Fork 的项目 URL 为`git@codechina.csdn.net:codechina/awesome-project.git`
* 合并请求的分支是`update-docs`
流程如下所示:
1. 首先,您需要获取合并请求引入的更改,单击**签出分支**按钮,其中包含可以运行的一些预填充命令
2. 使用复制按钮复制第一个命令并将其粘贴到您的终端中:
```markdown
git fetch git@codechina.csdn.net:codechina update-docs
git checkout -b codechina-awesome-project-update-docs FETCH_HEAD
```
以上命令将获取 Fork 项目的分支,然后基于所获取的分支创建本地分支
3. 在分支中完成你所需要进行的修改
4. 推送到分叉的项目:
```markdown
git push git@codechina.csdn.net:codechina/awesome-project.git codechina-awesome-project-update-docs:update-docs
```
注意两个分支之间需要用冒号( `:`)。上面的命令会将本地分支`codechina-awesome-project-update-docs`推送到`git@codechina.csdn.net:codechina/awesome-project.git`代码仓库的`update-docs`分支。
\ No newline at end of file
# 解决合并冲突[](#resolve-conflicts "Permalink")
当合并请求中的两个分支具有无法自动合并的不同更改时,将导致合并冲突。
在大多数情况下,Git 能够自动合并分支之间的更改,但是在某些情况下,Git 需要您的帮助来手动解决冲突。通常,当人们更改了同一文件的相同部分时,这就需要手动来解决冲突了。
在解决所有冲突之前,系统将阻止合并请求。冲突可以在本地解决,许多情况下在 CODEChina 网页上也可以解决(有关何时可用的信息,请参见可解决的[冲突](#conflicts-available-for-resolution) )。
[![Merge request widget](/docs/img/merge_request_widget.png)](/docs/img/merge_request_widget.png)
**注意:** CODEChina 通过在未自动合并到目标分支的源分支中创建合并提交来解决冲突,这样可以在合并更改之前在源分支对合并提交进行检查和测试,从而在更改进入目标分支前防止没有检查或破坏构建导致的意外。
## 交互模式[](#resolve-conflicts-interactive-mode "Permalink")
单击此按钮将显示有冲突的文件列表,突出显示冲突部分:
[![Conflict section](/docs/img/conflict_section.png)](/docs/img/conflict_section.png)
当所有冲突都标记为使用"我们的"或"他们的"时,则可以解决冲突。这将执行合并请求的目标分支到源分支的合并,并使用选择的选项解决冲突。如果源分支是`feature` ,目标分支是`master` ,则类似于执行`git checkout feature; git merge master` `git checkout feature; git merge master`本地`git checkout feature; git merge master`
## 内联编辑模式[](#resolve-conflicts-inline-editor "Permalink")
合并冲突编辑模式可以让您在 CODEChina 界面中解决更复杂的合并冲突,比如需要用户手动修改文件才能解决的冲突。使用**内联编辑**按钮打开编辑器. 确定更改后,请单击**提交到源分支**按钮。
[![Merge conflict editor](/docs/img/merge_conflict_editor.png)](/docs/img/merge_conflict_editor.png)
## 可解决的冲突[](#conflicts-available-for-resolution "Permalink")
CODEChina 界面只允许解决以下所有条件均成立的文件中的冲突:
* 该文件是文本,不是二进制
* 该文件采用 UTF-8 兼容编码
* 该文件尚未包含冲突标记
* 添加了冲突标记的文件大小不超过 200 KB
* 该文件在两个分支中位于相同路径下
如果该合并请求中有冲突的任何文件均不满足所有这些条件,则无法在界面中解决该合并请求的冲突。
此外,系统不会在路径之外的重命名中检测到冲突。例如,以下这些情况将不会造成冲突:在分支`a`执行`git mv file1 file2` ; 在分支`b` ,执行`git mv file1 file3` 。相反的,合并后,两个文件都将出现在分支中。
\ No newline at end of file
# Revert[](#revert "Permalink")
您可以使用 Git 的强大功能,通过在合并请求和提交详细信息中单击 **Revert**按钮来[还原任何提交](https://git-scm.com/docs/git-revert "Git 恢复文档")
## Reverting 合并请求[](#reverting-a-merge-request "Permalink")
**注意:**仅对使用合并方法"合并提交"的项目显示 **Revert** 按钮,该方法可以在项目的**"项目设置">"常规">"合并请求"****设置**,无法通过 合并请求视图还原[快进提交](fast_forward_merge.html)
合并请求合并后,将有一个**还原**按钮可用于还原该合并请求引入的更改.
[![Revert Merge Request](/docs/img/cherry_pick_changes_mr.png)](/docs//docs/img/cherry_pick_changes_mr.png)
单击该按钮后,将出现一个弹窗,您可以在其中选择将更改直接还原到所选分支中,也可以选择使用还原更改创建新的合并请求。
合并请求 Revert 后,**Revert**按钮将不再可用。
## Reverting 提及[](#reverting-a-commit "Permalink")
您可以从提交详细信息页面 Revert 提交:
[![Revert commit](/docs/img/cherry_pick_changes_commit_revert.png)](/docs/img/cherry_pick_changes_commit_revert.png)
与 Revert 合并请求类似,您可以选择将更改直接还原到目标分支中,也可以选择创建新的合并请求以还原更改。
提交 Revert 后,** Revert **按钮将不再可用。
请注意,Revert 合并提交时,主线将始终是第一父级,如果要使用其他主线,则需要从 git 客户端行执行。
这是一个使用第二个父级作为主线还原合并提交的快速示例:
```markdown
git revert -m 2 7a39eb0
```
\ No newline at end of file
# 评审及管理合并请求[](#评审及管理合并请求 "Permalink")
合并请求是在项目中更改文件的主要方法,通过[创建并提交合并请求](/docs/user/project/merge-request/create-merge-request.md)来提出更改,然后将其审核并接受(或拒绝)。
## 评审合并请求[](#view-project-merge-requests "Permalink")
打开 **项目>合并请求**列表,可以查看项目中的所有**合并请求**,并且您可以快速按打开和关闭可用的选项卡来进行过滤,您还可以[搜索和过滤结果](/docs/user/search.md#filtering-issue-and-merge-request-lists)
[![Project merge requests list view](/docs/img/project_merge_requests_list_view.png)](/docs/img/project_merge_requests_list_view.png)
## 半线性历史合并请求[](#semi-linear-history-merge-requests "Permalink")
每个合并创建一个合并提交,但是只有在可能进行快速合并的情况下才合并分支。这样可以确保如果合并请求构建成功,则合并后目标分支构建也将成功。
进入到项目设置页,在 **合并请求:合并方法**下选择 **使用半线性历史** **合并合并**选项,然后保存更改。
## 查看不同版本文件变更[](#view-changes-between-file-versions "Permalink")
**更改**选项卡位于主要合并请求详细信息下方,并且在讨论选项卡旁边,显示了分支或提交之间文件的更改。这种对文件更改的视图也称为**diff** ,默认情况下,差异视图将合并请求分支中的文件与目标分支中的文件进行比较。
Diff 视图包含以下内容:
* 文件的名称和路径
* 添加和删​​除的行数
* 用于以下选项的按钮:
* 文件讨论显示/隐藏开关,在查看用于内联评论时非常有用
* 在合并请求的分支中编辑文件
* 显示完整文件,方便您要查看上下文中文件其余部分的更改
* 查看当前提交时的文件
* 对于有更改的行,将突出显示详细的更改内容
[![Example screenshot of a source code diff](/docs/img/merge_request_diff_v13_2.png)](/docs/img/merge_request_diff_v13_2.png)
### 合并请求 diff 导航[](#merge-request-diff-file-navigation "Permalink")
**更改**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异。 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件。
[![Merge request diff file navigation](/docs/img/merge_request_diff_file_navigation.png)](/docs/img/merge_request_diff_file_navigation.png)
### 逐个文件查看 diff[](#file-by-file-diff-navigation "Permalink")
对于较大的合并请求,有时一次查看单个文件可能会很有用。要启用单个文件 diff 导航时,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"偏好设置"** , 向下滚动到" **个性化"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用.
从那里,在查看合并请求的" **更改"**选项卡时,一次只能看到一个文件. 然后,您可以单击按钮上**一个****下一个**以查看其他已更改的文件.
[![File-by-file diff navigation](/docs/img/file_by_file_v13_2.png)](/docs/img/file_by_file_v13_2.png)
### 合并请求提交导航[](#merge-requests-commit-navigation "Permalink")
要在合并请求中的**提交**之间无缝导航,请从 **提交**选项卡中,单击其中一个提交以打开单提交视图,之后您可以通过单击页面右上角的**Prev****Next**按钮或使用`X``C`键盘快捷键在提交之间进行切换。
### 合并请求 diff 时展开[](#incrementally-expand-merge-request-diffs "Permalink")
默认情况下,差异仅显示文件中已更改的部分。要查看更改上方或下方的更多未更改行,请单击" **向上** **扩展"**或" **向下扩展"**图标,您也可以单击**显示未更改的行**以展开整个文件。
当查看合并请求的**更改**选项卡时,如果仅重命名了某个文件,则可以通过单击**显示文件内容**展开它以查看全部**内容**
### 隐藏空白更改[](#ignore-whitespace-changes-in-merge-request-diff-view "Permalink")
如果单击**隐藏空白更改**按钮,则可以看到没有空白更改的差异(如果有的话),在查看某个提交的页面上也支持这个功能。
> **提示:**您可以在合并请求的差异页面上附加`?w=1` ,以忽略任何空格更改。
## 行内代码评审[](#perform-inline-code-reviews "Permalink")
我们提供了一种在合并请求中更改文件的任何部分中进行注释讨论的方法,可以在"合并请求"差异页面左侧单击**评论**按钮以展开差异行并留下评论,就像更改行一样。
[![Comment on any diff file line](/docs/img/comment-on-any-diff-line.png)](/docs/img/comment-on-any-diff-line.png)
## 关联功能[](#associated-features "Permalink")
还有大量与合并请求关联的功能:
| 功能 | 描述 |
| --- | --- |
| [批量编辑合并请求](/docs/user/project/bulk-edit.md) | 同时更新多个合并请求的属性 |
| [Cherry-pick 变更](/docs/user/project/merge-request/cherry-pick.md) | 只需在合并的合并请求或提交中单击**Cherry-pick**按钮,即可在页面中 Cherry-pick 任何**选择** |
| [快进合并](/docs/user/project/merge-request/fast-forward.md) | 有关线性 Git 历史记录以及接受合并请求而不创建合并提交的方法 |
| [合并请求版本](/docs/user/project/merge-request/versions.md) | 选择并比较合并请求差异的不同版本 |
| [解决冲突](/docs/user/project/merge-request/resolve-conflicts.md) |可以在界面中来解决某些合并请求冲突 |
| [Revert 更改](/docs/user/project/merge-request/revert.md) | 从合并请求中的任何提交还原更改 |
## Tips[](#tips "Permalink")
以下是一些可帮助您在命令行中更有效地处理合并请求的 Tips:
### 本地合并合并请求[](#checkout-merge-requests-locally "Permalink")
合并请求包含来自代码仓库的所有历史记录,以及添加到与合并请求关联的分支的其他提交。以下是一些在本地检出合并请求的技巧。
请注意,即使源项目是目标项目的分支(甚至是私有分支),也可以在本地签出合并请求。
#### 通过别名设置签出合并请求[](#checkout-locally-by-adding-a-git-alias "Permalink")
将以下别名添加到`~/.gitconfig`
```markdown
[alias]
mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -
```
现在,您可以从任何代码仓库和任何远程签出特定的合并请求,例如,执行以下操作可以从`origin`远程服务器签出 ID 为 5 的合并请求请:
```markdown
git mr origin 5
```
这会将合并请求提取到本地`mr-origin-5`分支中,并检出它。
#### 通过在 config 文件中添加代码仓库签出[](#checkout-locally-by-modifying-gitconfig-for-a-given-repository "Permalink")
`.git/config`文件中找到适用于 remote 的部分,找到类似下面的这段配置:
```markdown
[remote "origin"]
url = https://codechina.csdn.net/codechina/awsome-project.git
fetch = +refs/heads/*:refs/remotes/origin/*
```
您可以使用以下方式打开文件:
```markdown
git config -e
```
现在,将以下行添加到上面的部分:
```markdown
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
```
最后,它应如下所示:
```markdown
[remote "origin"]
url = https://codechina.csdn.net/codechina/awsome-project.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
```
现在,您可以获取所有合并请求:
```markdown
git fetch origin
...
From https://codechina.csdn.net/codechina/awsome-project.git
* [new ref] refs/merge-requests/1/head -> origin/merge-requests/1
* [new ref] refs/merge-requests/2/head -> origin/merge-requests/2
...
```
并检查特定的合并请求:
```markdown
git checkout origin/merge-requests/1
```
以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成。
\ No newline at end of file
# Squash合并[](#Squash合并 "Permalink")
使用 squash 合并,您可以将所有合并请求的提交合并为一个并保留干净的历史记录。
## 概览[](#overview "Permalink")
通过 squash,您可以在接受合并请求时整理分支的提交历史记录,它将合并请求中的所有更改作为单个提交,然后使用为项目设置的合并方法合并该提交。
换句话说,squash 合并后将会变成一长串提交:
[![List of commits from a merge request](/docs/img/squash_mr_commits.png)](/docs/img/squash_mr_commits.png)
合并为单个提交:
[![A squashed commit followed by a merge commit](/docs/img/squash_squashed_commit.png)](/docs/img/squash_squashed_commit.png)
压缩的提交的提交消息将是:
* 取自合并中的第一条多行提交消息
* 如果找不到多行提交消息,则合并请求的标题
**注意:**仅在至少 2 次提交时,此选项才生效。由于没有什么可压缩的,因此如果只有 1 次提交,则提交消息不会更改。
可以在合并合并请求之前对其进行自定义。
**注意:**在此示例中,压缩的提交之后是合并提交,因为此示例代码仓库的合并方法使用了合并提交。
Squash 也适用于快进合并策略,有关更多详细信息,请参见[压缩和快进合并](#squash-and-fast-forward-merge)
## 示例[](#use-cases "Permalink")
在功能分支上工作时,有时您想提交当前进度,但实际上并不关心提交消息。 这些"进行中的提交"不一定包含重要的信息,因此,您不想将其包含在目标分支中。
使用 squash 合并,当准备好要合并的合并请求时,您要做的就是在按下合并之前将 Squash 启用,以将合并请求中的提交加入到单个提交中。
这样,您的基本分支的历史记录将保留有意义的提交消息,并且:
* 在有需要的情况下, [Revert](revert.md)更为简单
* 合并的分支将保留完整的提交历史记录
## 合并时启用 Squash[](#enabling-squash-for-a-merge-request "Permalink")
可以创建或编辑合并请求的任何人都可以选择将其压缩在合并请求表单上:
[![Squash commits checkbox on edit form](/docs/img/squash_edit_form.png)](/docs/img/squash_edit_form.png)
然后可以在接受合并请求时覆盖它:
[![Squash commits checkbox on accept merge request form](/docs/img/squash_mr_widget.png)](/docs/img/squash_mr_widget.png)
## Squash 提交的元数据[](#commit-metadata-for-squashed-commits "Permalink")
Squash 的提交具有以下元数据:
* 消息: Squash 提交消息或自定义消息
* 作者:合并请求的作者
* 提交者:发起 Squash 的用户
## Squash 和快进合并[](#squash-and-fast-forward-merge "Permalink")
当项目[启用](fast_forward.md#enabling-fast-forward-merges)[快进合并设置时](fast_forward.md#enabling-fast-forward-merges) ,合并请求必须能够不 Squash 而进行快速转发以进行 Squash,这是因为 Squash 仅在接受合并请求时可用,因此即使 Squash 本身可以被认为等同于重新 Rebase,也可能需要在 Squash 之前对合并请求进行重新基准化。
\ No newline at end of file
# 合并请求版本[](#versions "Permalink")
每次您推送到与合并请求绑定的分支时,都会创建新版本的合并请求 diff. 当您访问包含多个推送的合并请求时,可以选择并比较那些合并请求差异的版本.
[![Merge request versions](/docs/img/versions.png)](/docs/img/versions.png)
## 选择版本[](#selecting-a-version "Permalink")
默认情况下,显示更改的最新版本。 但是,您可以从版本下拉列表中选择一个较旧的版本:
[![Merge request versions dropdown](/docs/img/versions_dropdown.png)](/docs/img/versions_dropdown.png)
合并请求版本基于推送而不是提交,因此,如果您单次推送了5次提交,那么下拉菜单中的选项就是一个;如果您推送了5次,则会有5个选项。
您还可以将合并请求版本与旧版本进行比较,以查看此后发生了什么变化。在查看过时的合并版本或与基本版本以外的版本进行比较时,将禁用注释。
每次将新更改推送到分支时,系统都会显示一个用于比较最后更改的链接。
## 查找合并请求引入的更改[](#find-the-merge-request-that-introduced-a-change "Permalink")
在查看提交详情页面时,会链接到包含该提交的合并请求(或多个合并请求)。
这仅适用于最新版本的合并请求中的提交,如果某个提交位于合并请求中,然后根据该合并请求 rebase 的,则不会链接它们。
[![Find the merge request that introduced a change](/docs/img/find-the-merge-request-that-introduced-a-change.png)](/docs/img/find-the-merge-request-that-introduced-a-change.png)
## `HEAD` 对比模式[](#head-comparison-mode-for-merge-requests "Permalink")
合并请求(尤其是 **更改**选项卡)是查看和讨论源代码的地方,在目标分支被合并到合并请求的源分支的情况下,源分支和目标分支中的更改可以显示为混合在一起,这使得很难理解目标分支中正在添加哪些更改以及已经存在哪些更改。
为此我们添加了一个比较模式,该模式显示了通过模拟合并后的差异计算出的差异可以更准确地表示更改,而不是使用两个分支的基础。 通过选择**master(HEAD),**可以从比较目标下拉列表中使用新模式。
[![Merge request versions compare HEAD](/docs/img/versions_compare_head_v12_10.png)](/docs/img/versions_compare_head_v12_10.png)
\ No newline at end of file
# 里程碑[](#milestone "Permalink")
## 概览[](#overview "Permalink")
CODEChina 中的里程碑是一种跟踪 Issue 及合并请求并在一定时期内实现更广泛目标的方法。
里程碑使您可以将 Isuue 及合并请求组织到一个紧密联系的组中,并带有一个可选的开始日期和一个可选的截止日期。
## 用户敏捷 Sprint[](#milestones-as-agile-sprints "Permalink")
里程碑可用作敏捷 Sprint,因此您可以跟踪所有问题并合并与特定冲刺有关的请求. 为此:
1. 设置里程碑的开始日期和截止日期,以代表敏捷冲刺的开始和结束
2. 将里程碑标题设置为敏捷 sprint 的名称,例如`November 2018 sprint`
3. 通过将问题的右侧边栏关联到所需的里程碑,将问题添加到敏捷 Sprint中
## 用里程碑来 Release[](#milestones-as-releases "Permalink")
同样,里程碑可以用作 Release,为此:
1. 设置里程碑到期日期以表示发布的发布日期,并将里程碑开始日期保留为空白
2. 将里程碑标题设置为您的发行版,例如`Version 9.4`
3. 通过关联问题右侧的期望里程碑,将问题添加到您的发行中
此外,您可以将里程碑与 CODEChina 的[Releases 功能](/docs/user/project/releases.md#associate-milestones-with-a-release)集成.
## 项目里程碑和组织里程碑[](#project-milestones-and-group-milestones "Permalink")
您可以将**项目里程碑**分配给问题或仅合并该项目中的请求,要查看项目里程碑列表,请在项目中转到 **问题>里程碑**
您可以将**组里程碑**分配给该**组**中任何项目的任何发行或合并请求,要查看组里程碑列表,请在组中转到 **组织设置>里程碑**
## 新建里程碑[](#creating-milestones "Permalink")
**注意:**创建里程碑需要[ Developer 或更高](/docs/user/permissions.md)级别的权限。
### 新建项目里程碑[](#new-project-milestone "Permalink")
可以通过以下步骤创建**项目里程碑**
1. 在一个项目中,转到 ** Issue >里程碑**
2. 单击 **新里程碑**
3. 输入标题,可选描述,可选开始日期和可选截止日期
4. 单击 **新建里程碑**
### 新建组织里程碑[](#new-group-milestone "Permalink")
可以通过以下步骤创建**组织里程碑**
1. 在一个小组中,进入到 **组织设置>里程碑**
2. 单击 **新里程碑**
3. 输入标题,可选描述,可选开始日期和可选截止日期
4. 单击 **新建里程碑**
## 编辑里程碑[](#editing-milestones "Permalink")
**注意:**编辑里程碑需要[ Developer 或更高的](/docs/user/permissions.md)权限级别。
可以通过以下步骤编辑里程碑:
1. 在项目中进入** Issue > 里程碑** ,或在组织中进入**组织设置 > 里程碑**
2. 单击里程碑标题
3. 单击**编辑**按钮
您可以通过单击" **删除"**按钮来删除里程碑。
### 将项目里程碑提升为组织里程碑[](#promoting-project-milestones-to-group-milestones "Permalink")
如果要在同一个组织中将里程碑从几个项目扩展到更多项目,则可能需要在同一组中的多个项目中共享里程碑。如果以前创建了一个项目里程碑,现在要使其可用于同一组中的其他项目,则可以将其升级为组里程碑。
在项目里程碑列表页面,您可以将项目里程碑升级为组里程碑。这会将具有相同名称的该组中所有项目中的所有项目里程碑合并为一个组里程碑,以前已分配给这些项目里程碑之一的所有问题和合并请求现在都将分配给新的组里程碑。注意:此操作不能撤消,更改是永久的。
**警告:**将项目里程碑提升为组里程碑时,某些信息会丢失。组里程碑视图上并非项目里程碑视图上的所有功能都可用,如果将项目里程碑升级为组里程碑,则将失去这些功能。请参阅" [里程碑"](#milestone-view)视图以查看组里程碑视图中缺少哪些功能。
## 设置里程碑[](#assigning-milestones-from-the-sidebar "Permalink")
可以为每个 Issue 及合并请求分配一个里程碑,里程碑在边栏中的每个 Issue 及合并请求页面上可见,它们在看板上也可见。您可以在页面右侧为对象分配或取消里程碑。您也可以在讨论中[快速](/docs/user/project/quick-actions.md)执行此操作。 [如前所述](#project-milestones-and-group-milestones) ,对于给定的发布或合并请求,可以选择项目里程碑和组里程碑并将其分配给对象。
## 按里程碑过滤 Issue 及合并请求[](#filtering-issues-and-merge-requests-by-milestone "Permalink")
### 在列表页过滤[](#filtering-in-list-pages "Permalink")
在项目 Issue、合并请求列表页面和用户的 Issue 及合并请求列表页面中,可以按组里程碑和项目里程碑进行[筛选](/docs/user/search.md#issues-and-merge-requests) .
### 在看板上过滤[](#filtering-in-issue-boards "Permalink")
*[项目看板上](/docs/user/project/kanban.md) ,您可以在[搜索和过滤器栏中](/docs/user/search.md#issue-boards)按组里程碑和项目里程碑进行[筛选](/docs/user/search.md#issue-boards)
### 特殊里程碑过滤[](#special-milestone-filters "Permalink")
在按里程碑进行筛选时,除了选择特定的项目里程碑或组里程碑之外,还可以选择特殊的里程碑筛选器:
* **无** :显示问题或没有分配里程碑的合并请求
* **任何** :显示问题或合并具有指定里程碑的请求
* **即将到来的** :显示已分配的公开里程碑的问题或合并请求,该里程碑具有下一个即将到来的到期日(即将来的最近到期日)
* **已开始** :显示具有打开的指定里程碑且开始日期在今天之前的问题或合并请求
## 认识里程碑[](#milestone-view "Permalink")
里程碑视图显示标题和描述,这些标签下面还包含显示以下内容的标签:
* **Issue** :显示分配给里程碑的所有问题, 这些内容显示在名为:
* 未开始的问题(未解决和未分配)
* 进行中的问题(未解决和已分配)
* 已完成的问题(已关闭)
* **合并请求** :显示分配给里程碑的所有合并请求. 这些将显示在名为:
* 进行中的工作(开放且未分配)
* 等待合并(打开和未分配)
* 拒绝(关闭)
* 合并后
* **参与者** :显示分配给该里程碑的所有问题的指派人
* **标记**: 显示分配给该里程碑的所有问题包含的标记
\ No newline at end of file
# 保护分支[](#protected-branch "Permalink")
[权限](/docs/user/permissions.md)基本上是围绕对代码仓库和分支具有读或写权限的想法定义的,为了对某些分支机加进一步的限制,可以对其进行保护。
## 概览[](#overview "Permalink")
默认情况下,受保护的分支将执行以下四个简单的操作:
* 它会阻止除具有 maintainer 权限的用户之外的所有用户创建它(如果尚未创建)
* 它可以防止除具有**允许的**权限的用户以外的其他任何人推送
* 它可以防止**任何人**强行推送分支
* 它可以防止**任何人**删除分支
## 配置保护分支[](#configuring-protected-branches "Permalink")
要保护分支,您需要至少具有 maintainer 权限级别,请注意,默认情况下`master`分支是受保护的。
1. 导航到项目的**"项目设置"➔"仓库"**
2. 滚动查找" **受保护的分支"**部分并展开
3. 从" **分支"**下拉菜单中,选择要保护的分支,然后单击" **保护"**
4. 完成后,受保护的分支将出现在"受保护的分支"列表中
## 启用允许合并及允许推送设置[](#using-the-allowed-to-merge-and-allowed-to-push-settings "Permalink")
使用"允许推送"和"允许合并"设置,您可以控制不同角色可以在受保护分支中执行的操作。例如,您可以将"允许推送"设置为" None ",将"允许合并"设置为" developer + maintainer ",以要求*每个人都*提交合并请求,以请求更改进入受保护分支。
但是,有些工作流程不需要这样做,只有防止强行推动和移除分支才有用。对于这些工作流程,您可以通过将"允许推送"设置为" developer + maintainer "来允许具有写访问权的每个人推送到受保护的分支。
您可以在创建受保护的分支时设置"允许推送"和"允许合并"选项,也可以在之后通过从"已保护"区域的下拉列表中选择所需的选项来设置。
如果在创建受保护的分支时未选择任何这些选项,则默认情况下会将它们设置为" maintainer "。
## 通配保护分支[](#wildcard-protected-branches "Permalink")
您可以指定一个通配符保护的分支,该分支将保护所有与通配符匹配的分支。 例如:
| 通配符保护的分支 | 匹配分支 |
| --- | --- |
| `*-stable` | `production-stable`, `staging-stable` |
| `production/*` | `production/app-server`, `production/load-balancer` |
| `*gitlab*` | `gitlab`, `gitlab/staging`, `master/gitlab/production` |
受保护的分支设置(如" developer 可以推送")适用于所有匹配的分支。
两个不同的通配符可能会匹配同一分支。例如, `*-stable` `production-stable``production-*`都将与`production-stable`分支匹配,在这种情况下,如果*这些*受保护的分支有这样一个设定"允许推送",然后`production-stable`也将继承这一设置。
如果单击受保护分支的名称,将显示所有匹配分支的列表。
## 新建保护分支[](#creating-a-protected-branch "Permalink")
当受保护的分支或通配符受保护的分支设置为" [**不允许任何人** **推送"时**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,只要允许 developer(和具有较高[权限级别的](/docs/user/permissions.md)用户)[**合并**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,就可以创建新的受保护分支。
可以通过用户界面创建新分支:
1. 打开**代码>分支**
2. 单击**新建分支**
3. 填写分支名称,然后选择一个现有的分支,新分支将基于该分支。仅接受现有的受保护分支和已经在受保护分支中的提交。
## 删除保护分支[](#deleting-a-protected-branch "Permalink")
有时可能需要删除或清理受保护的分支,具有[ maintainer ](/docs/user/permissions.md)并具有[ maintainer ](/docs/user/permissions.md)用户可以通过 Web 界面手动删除受保护的分支:
1. 打开**代码>分支**
2. 单击您要删除的分支旁边的删除图标
3. 为了防止意外删除,需要额外的确认
[![Delete protected branches](/docs/img/protected_branches_delete.png)](/docs/img/protected_branches_delete.png)
只能通过 Web 界面而不是 Git 删除受保护的分支,这意味着您不能从命令行或 Git 客户端应用程序中意外删除受保护的分支。
\ No newline at end of file
# 保护Tag[](#protected-tag "Permalink")
受保护的标签可控制谁有权创建标签,并防止创建后意外更新或删除。每个规则都允许您匹配单个标签名称,或使用通配符一次控制多个标签。
此功能从[受保护的分支](/docs/user/project/protected-branch.md)演变而来。
## 概览[](#overview "Permalink")
受保护的标签将阻止任何人更新或删除标签,并且将根据您选择的权限阻止创建匹配的标签。默认情况下,任何未经维护者许可的人都将无法创建标签。
## 配置保护 Tag[](#configuring-protected-tags "Permalink")
为了保护标签,您需要至少具有 maintainer 权限级别
1. 导航到项目的**"项目设置">"仓库"**
2.**标签**下拉菜单中,选择要保护或输入的标签,然后点击**创建通配符** . 在下面的屏幕截图中,我们选择保护所有与`v*`匹配的标签:
[![Protected tags page](/docs/img/protected_tags_page_v12_3.png)](/docs/img/protected_tags_page_v12_3.png)
3. 从" **允许创建"**下拉列表中,选择谁有权创建匹配的标签,然后单击" **保护"**
4. 完成后,受保护的标签将显示在" **受保护的标签"**列表中:
## 通配保护 Tag[](#wildcard-protected-tags "Permalink")
您可以指定一个通配符保护的标记,它将保护所有与通配符匹配的标记。例如:
| 通配符保护标签 | 匹配标签 |
| --- | --- |
| `v*` | `v1.0.0`, `version-9.1` |
| `*-deploy` | `march-deploy`, `1.0-deploy` |
| `*gitlab*` | `gitlab`, `gitlab/v1` |
| `*` | `v1.0.1rc2`, `accidental-tag` |
两个不同的通配符可以潜在地匹配同一标签,例如, `*-stable` `production-stable``production-*`都将与`production-stable`标签匹配。 在这种情况下,如果*这些*受保护的标签都像**允许创建**一个设定,然后`production-stable`也将沿用此设置。
如果单击受保护标签的名称,将显示所有匹配标签的列表。
\ No newline at end of file
# 快速操作[](#quick-actions "Permalink")
快速操作是针对 Issue 、Epic、合并请求和提交的常见操作的文本快捷方式,通常可通过在 CODEChina 用户界面中单击按钮或下拉菜单来完成。您可以在 Issue、史诗、合并请求和提交的说明中或讨论中输入这些命令,每个命令应放在单独的行上,以便正确检测和执行。
## Issue、合并请求及 Epic 的快速操作[](#quick-actions-for-issues-merge-requests-and-epics "Permalink")
以下快速操作适用于其中的描述,讨论和评论部分:
* Issues
* 合并请求
* Epics
| 命令 | Issue | 合并请求 | Epic | Action |
| --- | --- | --- | --- | --- |
| `/assign @user` | ✓ | ✓ |   | 分配一个用户|
| `/assign me` | ✓ | ✓ |   | 分配自己|
| `/award :emoji:` | ✓ | ✓ | ✓ | 切换表情符号奖|
| `/close` | ✓ | ✓ | ✓ | Close|
| `/confidential` | ✓ |   |   | 保密|
| `/copy_metadata <!merge_request>` | ✓ | ✓ |   | 从项目中的另一个合并请求中复制标签和里程碑|
| `/copy_metadata <#issue>` | ✓ | ✓ |   | Copy labels and milestone from another issue in the project|
| `/create_merge_request <branch name>` | ✓ |   |   | 从当前问题开始创建一个新的合并请求|
| `/done` | ✓ | ✓ | ✓ | 将待办事项标记为已完成|
| `/due <date>` | ✓ |   |   | 设置截止日期有效的`<date>`示例包括`in 2 days``this Friday``December 31st` |
| `/estimate <<W>w <DD>d <hh>h <mm>m>` | ✓ | ✓ |   | 设置时间估计例如, `/estimate 1w 3d 2h 14m` |
| `/label ~label1 ~label2` | ✓ | ✓ | ✓ | 添加一个或多个标签标签名称也可以不使用波浪号( `~` )开头,但是不支持混合语法|
| `/lock` | ✓ | ✓ |   | 锁定螺纹|
| `/merge` |   | ✓ |   | 合并更改根据项目设置,这可能是管道成功时|
| `/milestone %milestone` | ✓ | ✓ |   | 设定里程碑|
| `/move <path/to/project>` | ✓ |   |   | 将此问题移到另一个项目|
| `/relabel ~label1 ~label2` | ✓ | ✓ | ✓ | 用指定的标签替换现有的标签|
| `/remove_due_date` | ✓ |   |   | 删除到期日|
| `/remove_estimate` | ✓ | ✓ |   | 删除时间估计|
| `/remove_iteration` | ✓ |   |   | 删除迭代( [在 GitLab 13.1 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/196795) ) |
| `/remove_milestone` | ✓ | ✓ |   | 删除里程碑|
| `/remove_time_spent` | ✓ | ✓ |   | 消除花费的时间|
| `/remove_zoom` | ✓ |   |   | 从此问题中删除 Zoom 会议( [在 GitLab 12.4 中引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609) )|
| `/reopen` | ✓ | ✓ | ✓ | Reopen|
| `/shrug <comment>` | ✓ | ✓ | ✓ | 将注释附加到`¯\_(ツ)_/¯` |
| `/spend <time(-<h>h <mm>m)> <date(<YYYY-MM-DD>)>` | ✓ | ✓ |   | 减去花费的时间(可选)指定花费时间的日期例如`/spend time(-1h 30m)``/spend time(-1h 30m) date(2018-08-26)` |
| `/spend <time(<h>h <mm>m)> <date(<YYYY-MM-DD>)>` | ✓ | ✓ |   | 增加花费的时间(可选)指定花费时间的日期例如`/spend time(1h 30m)``/spend time(1h 30m) date(2018-08-26)` |
| `/subscribe` | ✓ | ✓ | ✓ | 订阅通知|
| `/tableflip <comment>` | ✓ | ✓ | ✓ | 在`(╯°□°)╯︵ ┻━┻`添加注释|
| `/target_branch <local branch name>` |   | ✓ |   | 设置目标分支|
| `/title <new title>` | ✓ | ✓ | ✓ | 更改标题|
| `/todo` | ✓ | ✓ | ✓ | 添加待办事项|
| `/unassign` | ✓ | ✓ |   | 删除所有受让人|
| `/unlabel ~label1 ~label2` or `/remove_label ~label1 ~label2` | ✓ | ✓ | ✓ | 删除所有或特定标签|
| `/unlock` | ✓ | ✓ |   | 解锁线程|
| `/unsubscribe` | ✓ | ✓ | ✓ | 退订通知|
| `/wip` |   | ✓ |   | 切换"进行中"状态|
## 自动补全字符[](#autocomplete-characters "Permalink")
许多快速操作都需要一个参数,例如:用户名,里程碑和标签。与从列表中选择项目相比, [自动完成字符](/docs/user/project/autofill.md)可以使输入参数更加容易。
## 快速操作参数[](#quick-actions-parameters "Permalink")
设置快速操作参数的最简单方法是使用自动完成功能,如果您手动输入参数,则该参数必须用双引号( `"` )括起来,除非它仅包含以下字符:
1 ASCII 字母
2 数字(0-9)
3 下划线( `_` ),连字符( `-` ),问号( `?` ),点( `.` )或`&``&`
参数也区分大小写,自动完成功能会自动处理此问题,并自动插入引号。
## 提交消息的快速操作[](#quick-actions-for-commit-messages "Permalink")
以下快速操作适用于提交消息:
| 命令 | Action |
| --- | --- |
| `/tag v1.2.3 <message>` | 使用可选消息标记此提交 |
\ No newline at end of file
# Releases[](#releases "Permalink")
要在源代码历史记录中引入检查点,可以在发布时分配[Git 标签](https://git-scm.com/book/en/v2/Git-Basics-Tagging) 。但是,在大多数情况下,您的用户不仅需要原始源代码,他们需要 CI / CD 系统输出的已编译对象或其他资产。
*Release*是与代码的发行版本相关联的源代码,构建输出,工件和其他元数据的快照。
您可以在任何分支上创建一个 Release,创建时:
* 系统将自动归档源代码,并将其与 release 关联
* 系统会自动创建一个 JSON 文件,其中列出了发行版中的所有内容,因此您可以比较和审核发行版。该文件称为[发布证据](#release-evidence)
* 您可以添加发行说明以及与发行版关联的标签的消息
创建发行版后,您可以将[里程碑与其关联](#associate-milestones-with-a-release) ,并附加[发行附件](#release-assets) ,例如运行手册或软件包。
## 查看 Release[](#view-releases "Permalink")
要查看版本列表:
* 转到**项目> 项目简介**,在下方有发行版本信息
* 在项目的概述页面上,如果存在至少一个版本,请单击版本数
* 在公共项目上,此数字对所有用户可见
* 在私有项目上,具有 Reporter [权限](/docs/user/permissions.md)或更高权限的用户可以看到此数字
## 创建 Release[](#create-a-release "Permalink")
可以在 CODEChina 界面中直接创建发布。
**注意:**只有具有 developer 权限或更高权限的用户才能创建发行版。
可以通过以下步骤创建新版本:
1. 转到**项目> 项目简介** ,然后单击**创建发行版**;或在发行列表中右上角单击**新建发布**按钮
2.[**标签名称**](#tag-name)框中,输入一个名称
3. 单击**从创建列表**,并选择需要创建发行版的分支
4. 在" **消息"**框中,输入与标签关联的消息
5. (可选)在" [**发行说明"**](#release-notes-description)字段中,输入发行说明。您可以使用 Markdown 并将文件拖放到此字段
* 如果将此字段留空,则只会创建一个标签
* 如果您填充它,将同时创建标签和发行版
6. 单击 **创建标签**
如果创建了发行​​版,则可以在**项目> 项目简介** 对其进行查看。如果创建了标签,则可以在**仓库>标签**查看它。
现在,您可以编辑发布以[添加里程碑](#associate-milestones-with-a-release)[发布附件](#release-assets)
## 编辑 Release[](#edit-a-release "Permalink")
**注意:**只有具有 developer 权限或更高权限的用户才能编辑发行版。
可以通过以下步骤编辑发行版:
1. 转到**项目> 项目简介**,点击 发行版本旁边的数字并进入到 发行版本列表
2. 在您要修改的发行版的右上角,单击" **编辑此发布"** 按钮
3. 在" **编辑版本"**页面上,更改版本的详细信息
4. 单击 **保存更改**
您可以编辑发行标题,注释,关联的里程碑和资产链接。
## 在 Tag 上添加发行信息[](#add-release-notes-to-git-tags "Permalink")
如果你有一个已经存在的 Tag,你可以在这个 Tag 上添加发行信息,您可以在用户界面中来执行此操作。
在界面中,您可以通过以下步骤向新的 Git 标签添加发行说明:
1. 导航到您项目的**代码> Tags**
2. 单击 **新建标记**
3.**发行说明**字段中,输入发行说明。您可以使用 Markdown 并将文件拖放到此字段
4. 单击 **创建标签**
在界面中,您可以通过以下步骤将发行说明添加到现有的 Git 标签:
1. 导航到您项目的**代码> Tags**
2. 单击**编辑发行说明**
3.**发行说明**字段中,输入发行说明。您可以在此字段中使用 Markdown,并将文件拖放到该字段中
4. 单击 **保存更改**
## 关联发行与里程碑[](#associate-milestones-with-a-release "Permalink")
您可以将一个版本与一个或多个项目里程碑相关联。
您可以在用户界面中执行此操作,具体的步骤如下:
1. 转到**项目> 项目简介**,点击 发行版本旁边的数字并进入到 发行版本列表
2. 在您要修改的发行版的右上角,单击" **编辑此发行版"**
3. 从" **里程碑"**列表中,选择要关联的每个里程碑,您可以选择多个里程碑
4. 单击 **保存更改**
## 当发布时通知我[](#get-notified-when-a-release-is-created "Permalink")
当您的项目创建新版本时,将通过电子邮件通知您。
可以通过以下步骤订阅发布通知:
1. 进入项目页面
2. 单击**通知设置**
3. 在列表中,点击**自定义**
4. 勾选 **新发布** 复选框
5. 关闭对话框并保存
## 认识发行[](#release-fields "Permalink")
创建或编辑发行版时,以下字段可用:
### Tag 名称[](#tag-name "Permalink")
发行标签名称应包括发行版本,我们建议您在发行版中使用[语义版本控制](https://semver.org/)。 使用`(Major).(Minor).(Patch)`
例如,对于 GitLab 版本`10.5.7`
* `10`代表主要版本. 主要版本是`10.0.0` ,但通常称为`10.0` .
* `5`代表次要版本. 次要版本为`10.5.0` ,但通常称为`10.5` .
* `7`代表补丁号码.
版本号的任何部分都可以是多个数字,例如`13.10.11` .
### 发行描述[](#release-notes-description "Permalink")
每个版本都有说明,您可以添加任何您喜欢的文本,但是我们建议您添加一个变更日志来描述发行版本的内容。这可以帮助用户快速扫描您发布的每个版本之间的差异。
**注意:** [Git 的标记消息](https://git-scm.com/book/en/v2/Git-Basics-Tagging)和发行说明描述无关;说明支持[Markdown](/docs/user/markdown.md)
### 发布资产[](#release-assets "Permalink")
当前,您可以将以下类型的资产添加到每个版本:
* [Source code](#source-code)
* [Links](#links)
我们将在未来支持更多的资产类型,包括诸如预装包,合规性/安全证据或容器图像之类的对象等。
### 源代码[](#source-code "Permalink")
我们会根据给定的 Git 标签自动生成`zip``tar.gz``tar.bz2``tar`归档的源代码, 这些是只读资产。
### 链接[](#links "Permalink")
链接是任何可以指向您喜欢的任何内容的URL:文档、构建的二进制文件或其他相关材料。这些可以是来自 CODEChina 的内部或外部链接。
链接的四种类型是" Runbook"," Package"," Image"和" Other"。
## 发布证据[](#release-evidence "Permalink")
每次创建发行版时,CODEChina 都会拍摄与之相关的数据快照。此数据保存在 JSON 文件中,称为*发布证据* , 它包括链接的里程碑和问题,并且可以促进内部流程,例如外部审核。
要访问发布证据,请在"发布"页面上,单击" **证据集合"**标题下列出的 JSON 文件的链接。
**注意:**禁用问题跟踪器后,将无法下载发布证据。
这是发行证据的一个示例:
```markdown
{ "release": { "id": 5, "tag_name": "v4.0", "name": "New release", "project": { "id": 20, "name": "Project name", "created_at": "2019-04-14T11:12:13.940Z", "description": "Project description" }, "created_at": "2019-06-28 13:23:40 UTC", "description": "Release description", "milestones": [ { "id": 11, "title": "v4.0-rc1", "state": "closed", "due_date": "2019-05-12 12:00:00 UTC", "created_at": "2019-04-17 15:45:12 UTC", "issues": [ { "id": 82, "title": "The top-right popup is broken", "author_name": "John Doe", "author_email": "john@doe.com", "state": "closed", "due_date": "2019-05-10 12:00:00 UTC" }, { "id": 89, "title": "The title of this page is misleading", "author_name": "Jane Smith", "author_email": "jane@smith.com", "state": "closed", "due_date": "nil" } ] }, { "id": 12, "title": "v4.0-rc2", "state": "closed", "due_date": "2019-05-30 18:30:00 UTC", "created_at": "2019-04-17 15:45:12 UTC", "issues": [] } ], "report_artifacts": [ { "url":"https://gitlab.example.com/root/project-name/-/jobs/111/artifacts/download" } ] } }
```
### 收集发布证据[](#collect-release-evidence-premium-only "Permalink")
创建发布后,将自动收集发布证据。在"发布"页面上可以看到证据收集快照,以及收集证据的时间戳。
# 代码仓库[](#repository "Permalink")
[代码仓库](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)是用于将代码库存储在 CODEChina 中并通过版本控制对其进行更改的存储库。代码仓库是[项目](/docs/user/project.md)的一部分,它具有许多其他功能。
## 新建一个代码仓库[](#create-a-repository "Permalink")
要创建一个新的代码仓库,您需要做的就是[创建一个新项目](/docs/basic/create-project.md)或 fork 一个现有项目。
创建新项目后,您可以通过界面或通过命令行添加新文件, 要从命令行添加文件,请遵循创建新项目时在屏幕上显示的说明。
> **重要提示:**出于安全原因,强烈建议您在使用命令行时[通过 SSH 与 CODEChina 连接](/docs/ssh.md) 。
## 文件[](#files "Permalink")
在 CODEChina 上我们使用代码仓库来存储您的文件,您将在代码仓库的文件树中在文件名旁边看到一个与其扩展名称想对应的图标。
### 新建和编辑文件[](#create-and-edit-files "Permalink")
通过将文件推送到 CODEChina,您就可以将代码库托管在代码仓库中。您可以使用用户界面也可以通过命令行将本地计算机与我们相连。
**从用户界面:**
用户界面允许您执行许多 Git 命令,而无在命令行中执行命令。您可以通过用户界面很容易的实现以下操作:
* [新建文件](/docs/user/project/repo/web-editor.md#create-a-file)
* [上传文件](/docs/user/project/repo/web-editor.md#upload-a-file)
* [文件模板](/docs/user/project/repo/web-editor.md#template-dropdowns)
* [新建目录](/docs/user/project/repo/web-editor.md#create-a-directory)
* [新建合并请求](/docs/user/project/repo/web-editor.md#tips)
* [查找文件](/docs/user/project/repo/file-find.md)
* [blame](/docs/user/project/repo/blame.md))
### 查找文件[](#find-files "Permalink")
使用[文件查找器](/docs/user/project/repo/file-find.md)在代码仓库中搜索文件。
### 支持的语言标记[](#supported-markup-languages-and-extensions "Permalink")
我们支持多种标记语言(有时称为[轻量标记语言](https://en.wikipedia.org/wiki/Lightweight_markup_language) ),您可以将其用于存储库中文件的内容,它们主要用于文档目的。
只需为文件选择正确的扩展名,系统就会根据标记语言来渲染它们。
| 标记语言 | 扩展名 |
| --- | --- |
| 纯文本 | `txt` |
| [Markdown](/docs/user/markdown.md) | `mdown`, `mkd`, `mkdn`, `md`, `markdown` |
| [reStructuredText](https://docutils.sourceforge.io/rst.html) | `rst` |
| AsciiDoc | `adoc`, `ad`, `asciidoc` |
| [Textile](https://textile-lang.com/) | `textile` |
| [rdoc](http://rdoc.sourceforge.net/doc/index.html) | `rdoc` |
| [Org mode](https://orgmode.org/) | `org` |
| [creole](http://www.wikicreole.org/) | `creole` |
| [MediaWiki](https://www.mediawiki.org/wiki/MediaWiki) | `wiki`, `mediawiki` |
### 项目 Readme 和 Index 文件[](#repository-readme-and-index-files "Permalink")
当代码仓库中存在`README``index`文件时,我们将自动渲染他们的内容,用户无需打开它。
它们可以是纯文本,也可以具有[受支持的标记语言](#supported-markup-languages-and-extensions)的扩展名:
有关优先级的一些注意事项:
1.`README`文件和`index`文件同时存在时, `README`文件将始终优先
2. 如果存在多个具有不同扩展名的文件,则按字母顺序排列,但不带扩展名的文件例外,该扩展名始终优先。例如, `README.adoc`将优先于`README.md` ,而`README.rst`将优先于`README`
### Jupyter Notebook files[](#jupyter-notebook-files "Permalink")
[Jupyter](https://jupyter.org/) Notebook(以前的 IPython Notebook)文件用于许多领域的交互式计算,并且包含用户会话的完整记录,并包括代码,叙述性文本,方程式和丰富的输出。
### OpenAPI viewer[](#openapi-viewer "Permalink")
如果文件名包含`openapi``swagger`且扩展名为`yaml``yml``json` ,就可以使用其文件查看器呈现 OpenAPI 规范文件。以下示例都是正确的:
* `openapi.yml`
* `openapi.yaml`
* `openapi.json`
* `swagger.yml`
* `swagger.yaml`
* `swagger.json`
* `gitlab_swagger.yml`
* `openapi_gitlab.yml`
* `OpenAPI.YML`
* `openapi.Yaml`
* `openapi.JSON`
* `openapi.gitlab.yml`
* `gitlab.openapi.yml`
然后,渲染它们:
1. 用户界面中导航至存储库中的 OpenAPI 文件.
2. 单击位于"显示源"和"编辑"按钮之间的"显示 OpenAPI"按钮(找到 OpenAPI 文件后,它将替换"显示渲染的文件"按钮).
## 分支[](#branches "Permalink")
有关详细信息,请参见[分支](/docs/user/project/repo/branches.md)
## 提交[](#commits "Permalink")
[提交更改时](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository) ,您会将这些更改引入分支机构。通过命令行,您可以在提交之前多次提交。
* **提交消息:**提交消息对于标识正在更改的内容以及更重要的原因至关重要. 在 GitLab 中,您可以将关键字添加到提交消息中,以执行以下操作之一:
* **交叉链接问题和合并请求:** [交叉链接](/docs/user/project/issues/crosslinking.md#from-commit-messages)非常适合跟踪工作流程中与之相关的内容. 如果您在提交消息中提到问题或合并请求,它们将显示在各自的线程上
* ** Cherry-pick 提交:**您可以直接从界面 [cherry-pick](/docs/user/project/merge-request/cherry-pick.md)
* **Revert 提交:**可以将提交从界面[还原](/docs/user/project/merge-request/revert.md#reverting-a-commit)到所选分支
* **签署提交:**使用 GPG [签署您的提交](/docs/user/project/repo/gpg-sign.md)
## 项目和仓库大小[](#project-and-repository-size "Permalink")
在项目的**详细信息**页面上报告项目的大小 报告的大小最多每 15 分钟更新一次,因此可能无法反映最近的活动。显示的文件大小包括存储库文件,工件和 LFS。
由于压缩,内务处理和其他因素,每个项目的项目规模可能会略有不同。
## 贡献者[](#contributors "Permalink")
代码库的所有贡献者都显示在项目的**代码>贡献者下**,按照协作者中的提交次数从多到少排序。
## 分析[](#repository-graph "Permalink")
代码仓库分析以可视方式显示存储网络的历史记录,包括分支和合并。这可以帮助您可视化存储库中使用的 Git 流策略:
在您项目的**分析**下找到它。
## 代码语言[](#repository-languages "Permalink")
对于每个代码仓库的默认分支,系统将确定使用了哪些编程语言,并将其显示在项目页面上。如果缺少此信息,将在更新项目上的默认分支后添加,此过程最多可能需要 5 分钟。
并非所有文件都被检测到,比如文档、供应商代码和大多数标记语言都不会被检测。可以通过重写默认值来调整此行为。例如,为了能够检测到“.proto”文件,请在存储库根目录下的“.gittributes”中添加以下内容:
```markdown
*.proto linguist-detectable=true
```
## 锁定文件[](#locked-files-premium "Permalink")
使用文件锁定来锁定文件,以防止发生任何冲突的更改.
## Repository’s API[](#repositorys-api "Permalink")
您可以通过存储库 API访问您的存储库。
## 下载源码[](#download-source-code "Permalink")
可以从界面下载存储在代码仓库中的源代码,单击下载图标,将打开一个下拉列表,其中包含下载以下内容的链接:
* **源代码:**允许用户在他们当前正在查看的分支上下载源代码。 可用扩展名: `zip``tar``tar.gz``tar.bz2`
* **目录:**仅在查看子目录时显示, 这使用户可以下载他们当前正在查看的特定目录, 也可以在`zip``tar``tar.gz``tar.bz2`
* **工件:**允许用户下载最新 CI 构建的工件
\ No newline at end of file
# balme[](#balme "Permalink")
[Git blame](https://git-scm.com/docs/git-blame)提供有关文件中每一行的更多信息,包括最后修改时间,作者和提交哈希。
您可以在项目中的每个文件中找到 **blame**按钮。
[![File blame button](/docs/img/file_blame_button_v12_6.png "Blame button")](/docs/img/file_blame_button_v12_6.png)
选择 **blame**按钮时,您会看到一个带有说明信息的文件页面:
[![Git blame output](/docs/img/file_blame_output_v12_6.png "Blame button output")](/docs/img/file_blame_output_v12_6.png)
如果将鼠标悬停在中的提交上,您将看到该提交的确切日期和时间。
## 历史提交 Blame[](#blame-previous-commit "Permalink")
要查看特定行的早期修订,请**在此更改**之前单击" **查看责备",**直到找到您有兴趣查看的**更改**为止:
[![Blame previous commit](/docs/img/file_blame_previous_commit_v12_7.png "Blame previous commit")](/docs/img/file_blame_previous_commit_v12_7.png)
## 与 git 协作[](#associated-git-command "Permalink")
`git`的命令行中,文件的`blame`则等效命令为`git blame <filename>`。例如,如果你想找到`README.md`在本地目录中的文件`blame`有关信息,可以运行以下命令:
```markdown
git blame README.md
```
您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间:
```markdown
fb0fc7d6 (Someone 2019-11-07 22:21:22 +0100 1)
^764ca75 (Someone else 2019-10-05 23:40:24 -0600 2) # CODEChina Documentation
^764ca75 (Someone else 2019-10-05 23:40:24 -0600 3)
0e62ed6d (Someone 2019-11-26 21:44:53 +0000 4) This project hosts the repository used to generate the CODEChina
0e62ed6d (Someone else 2019-11-26 21:44:53 +0000 5) documentation website
```
\ No newline at end of file
# 分支[](#branches "Permalink")
分支是项目工作树的版本,您做的每组相关更改都将创建一个分支。这样可以使每组更改彼此独立,从而可以并行进行更改,而不会互相影响。
将更改推送到新分支后,您可以:
* 创建[合并请求](/docs/user/project/merge-request.md)
* 执行内联代码审查
* 与团队[讨论](/docs/user/discussions.md)实施情况
有关使用 CODEChina 管理分支的更多信息,请参见:
- [默认分支](#default-branch)
- [对比](#compare)
- [删除已合并的分支](#delete-merged-branches)
- [分支过滤搜索框](#branch-filter-search-box)
您也可以使用命令行管理分支。
## 默认分支[](#default-branch "Permalink")
创建新项目时 ,系统会将`master`设置为代码仓库的默认分支。您可以在项目的**项目设置>仓库>默认分支**下选择另一个分支作为项目的默认分支。
通过[ Issue 关闭模式](/docs/user/project/issues/manage.md#closing-issues-automatically)直接从合并请求中[关闭 Issue](/docs/user/project/issues/manage.md#closing-issues-automatically)时,目标是项目的**默认分支**
项目初始化时还对默认分支进行了[保护](/docs/user/project/protected-branch.md#protected-branches),以防止意外删除和强制推送。
## 对比[](#compare "Permalink")
可以通过以下步骤对分支进行对比:
1. 进入项目页面
2. 在项目导航中选择**代码>Diff**
3. 使用[分支过滤搜索框](#branch-filter-search-box)选择要比较的[分支](#branch-filter-search-box)
4. 单击**比较**以内联查看更改
[![compare branches](/docs/img/compare_branches.png)](/docs/img/compare_branches.png)
## 删除已合并的分支[](#delete-merged-branches "Permalink")
[![Delete merged branches](/docs/img/delete_merged_branches.png)](/docs/img/delete_merged_branches.png)
此功能允许合并的分支被批量删除,作为此操作的一部分,只有已合并[但未受保护的](/docs/user/project/protected-branch.md)分支才会被删除。
这在清理那些合并请求时未自动删除的旧分支时非常好用。
## 分支过滤搜索框[](#branch-filter-search-box "Permalink")
[![Branch filter search box](/docs/img/branch_filter_search_box.png)](/docs/img/branch_filter_search_box.png)
此功能使您可以快速搜索和选择分支, 搜索结果按以下顺序显示:
* 名称与搜索字词完全匹配的分支
* 名称包含搜索词的其他分支,按字母顺序排序
当您有数百个分支时,可能需要更灵活的匹配模式。在这种情况下,您可以使用以下方法:
* `^feature`将仅匹配以'feature'开头的分支名称
* `feature$`将仅匹配以‘feature’结尾的分支名称
\ No newline at end of file
# 文件查找[](#file-finder "Permalink")
文件查找器功能使您可以使用 CODEChina 在代码仓库中搜索文件。
您可以在项目的**文件**部分中找到**查找文件**按钮。
[![Find file button](/docs/img/file_finder_find_button_v12_10.png)](/docs/img/file_finder_find_button_v12_10.png)
如果您喜欢使用快捷键,我们还支持[键盘快捷键](/docs/user/shortcutkey.md) ,您可以从项目中的*任何地方*调用它。
** Issue ****合并请求****里程碑**甚至项目设置中,按`t`键启动文件搜索功能。
开始输入您要搜索的内容,就会看到系统的搜索结果。您可以使用向上/向下箭头向上和向下搜索结果,使用`Esc`可以关闭搜索并返回 **文件**
## 实现原理[](#how-it-works "Permalink")
文件查找器功能由[模糊过滤器](https://github.com/jeancroy/fuzz-aldrin-plus)库提供支持。
它通过突出显示来实现模糊搜索,并试图通过识别人们在搜索时使用的模式来提供直观的结果。
例如,假设有[Awesome-project]https://codechina.csdn.net/codechina/awesome-project/-/tree/master ,并且我们要打开`app/models/model.rb`文件。
使用模糊搜索,我们首先输入使我们更接近文件的字母。
**提示:**要缩小搜索范围,请在搜索词中包含`/` .
[![Find file button](/docs/img/file_finder_find_file_v12_10.png)](/docs/img/file_finder_find_file_v12_10.png)
\ No newline at end of file
# GPG签名提交[](#gpg-sign "Permalink")
您可以使用 GPG 密钥对在 CODEChina 代码仓库中的 Git 提交进行签名。 如果可以验证提交者的身份,则已签名的提交将标记为 **已验证**,为了验证提交者的身份,CODEChina 需要他们的公共 GPG 密钥。
目前尚不支持通过 GPG 验证标签。
## GPG 签名[](#how-we-handles-gpg "Permalink")
CODEChina 使用其自己的密钥环来验证 GPG 签名,它不访问任何公钥服务器。
对于要由 CODEChina 验证的提交:
* 提交者必须具有 GPG 公钥/私钥对
* 提交者的公钥必须已上传到其 CODEChina 帐户
* GPG 密钥中的一封电子邮件必须与提交者在 CODEChina 中使用的**经过验证的**电子邮件地址匹配
* 提交者的电子邮件地址必须与 GPG 密钥中验证的电子邮件地址匹配
## 生成 GPG 密钥[](#generating-a-gpg-key "Permalink")
如果您还没有 GPG 密钥,建议您参考以下步骤生成您的 GPG 密钥:
1. 为您的操作系统[安装 GPG](https://www.gnupg.org/download/index.html)。如果您的操作系统安装了`gpg2`,在下面的命令中用`gpg2`替换`gpg`即可。
2. 使用以下命令生成私钥/公钥对,并根据系统引导一步步设置:
```markdown
gpg --full-gen-key
```
**注意:**在某些情况下,例如 Windows 和其他 macOS 版本上的 Gpg4win,此处的命令可能是`gpg --gen-key` .
3. 第一步需要选择使用哪种算法,选择所需的类型或按`Enter 键`选择默认类型(RSA 和 RSA):
```markdown
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
```
4. 下一步是密钥长度,我们建议您选择`4096`
```markdown
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
```
5. 接下来指定密钥的有效期,由您自己设置,您也可以使用永远不会过期的默认值:
```markdown
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
```
6. 接下来通过输入`y`确认您给出的答案是正确的:
```markdown
Is this correct? (y/N) y
```
7. 接下来输入您的真实姓名,与此密钥关联的电子邮件地址(应与您在 CODEChina 中使用的经过验证的电子邮件地址匹配)和可选注释(按`Enter`跳过):
```markdown
GnuPG needs to construct a user ID to identify your key.
Real name: Mr. Robot
Email address: <your_email>
Comment:
You selected this USER-ID:
"Mr. Robot <your_email>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
```
8. 接下来设置一个强密码,然后输入两次以确认
9. 到这一步您的 GPG 密钥已经生成,您可以使用以下命令列出刚刚创建好的私密 GPG 密钥:
```markdown
gpg --list-secret-keys --keyid-format LONG <your_email>
```
将`<your_email>`替换为您在上面输入的电子邮件地址。
10. 复制以`sec`开头的 GPG 密钥 ID, 在以下示例中,即`30F2B65B9246B6CA`
```markdown
sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid [ultimate] Mr. Robot <your_email>
ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
```
11. 导出该 ID 的公共密钥(替换上一步中的密钥 ID):
```markdown
gpg --armor --export 30F2B65B9246B6CA
```
12. 最后一步,复制公钥并将其[添加到您的个人资料设置中](#adding-a-gpg-key-to-your-account)即可
## 在您的账号中添加 GPG 密钥[](#adding-a-gpg-key-to-your-account "Permalink")
**注意:**添加密钥后,就无法对其进行编辑,只能将其删除。如果粘贴无效,则必须删除有问题的密钥并重新添加。
您可以在个人资料的设置中添加 GPG 密钥:
1. 点击右上角的头像,然后转到**"设置"**
2. 点击**GPG 密钥**,然后将您的*公共*密钥粘贴到"密钥"框中
3. 最后,单击**添加键**将其添加到 CODEChina,您将能够看到其指纹,相应的电子邮件地址和创建日期
## 在 Git 中使用 GPG 密钥[](#associating-your-gpg-key-with-git "Permalink")
[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,就可以开始在 git 中开始使用您的 GPG 密钥了。
1. 使用以下命令列出您刚刚创建的私密 GPG 密钥:
```markdown
gpg --list-secret-keys --keyid-format LONG <your_email>
```
将`<your_email>`替换为您在上面输入的电子邮件地址
2. 复制以`sec`开头的 GPG 密钥 ID,在以下示例中,即`30F2B65B9246B6CA`
```markdown
sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid [ultimate] Mr. Robot <your_email>
ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
```
3. 告诉 Git 使用该密钥对提交进行签名:
```markdown
git config --global user.signingkey 30F2B65B9246B6CA
```
不要忘了用您的 GPG 密钥 ID 替换`30F2B65B9246B6CA`
4. (可选)如果 Git 使用`gpg`并且出现诸如`secret key not available``gpg: signing failed: secret key not available` ,请运行以下命令更改为`gpg2`
```
git config --global gpg.program gpg2
```
## GPG 签名提交[](#signing-commits "Permalink")
[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,您可以开始对提交进行签名:
1. 像以前一样提交,唯一的区别是添加了`-S`标志:
```markdown
git commit -S -m "My commit msg"
```
2. 按提示输入 GPG 密钥的密码
3. 推送至 CODEChina 并检查您的提交[是否已通过验证](#verifying-commits)
如果您不想在每次提交时都键入`-S`标志,则可以告诉 Git 自动签名您的提交:
```markdown
git config --global commit.gpgsign true
```
## 验证提交[](#verifying-commits "Permalink")
1. 在项目或[合并请求](/docs/user/project/merge-request.md)中,切换到" **提交"**选项卡,签名的提交将显示包含" Verified"或" Unverified"的徽章,具体取决于 GPG 签名的验证状态
[![Signed and unsigned commits](/docs/img/project_signed_and_unsigned_commits.png)](/docs/img/project_signed_and_unsigned_commits.png)
2. 通过单击 GPG 徽章,将显示签名的详细信息
[![Signed commit with verified signature](/docs/img/project_signed_commit_unverified_signature.png)](/docs/img/project_signed_commit_unverified_signature.png)
## 撤销 GPG 密钥[](#revoking-a-gpg-key "Permalink")
撤消密钥将**取消验证**已签名的提交,使用此密钥验证的提交将变为未验证状态。撤销此密钥后,将来的提交也将保持不变. 如果您的密钥已被盗用,则应使用此操作。
撤销 GPG 密钥:
1. 点击右上角的头像,然后转到**"设置"**
2. 点击**GPG 键**标签
3. 单击您要删除的 GPG 键旁边**的撤消**
## 删除 GPG 密钥[](#removing-a-gpg-key "Permalink")
删除密钥**不会**取消已提交签名的**验证**状态,使用此密钥验证的提交将保持验证状态。删除此密钥后,只有未提交的才会保持未验证状态。要取消验证已签名的提交,您需要从您的帐户中[撤销关联的 GPG 密钥](#revoking-a-gpg-key)
要从您的帐户中删除 GPG 密钥,请执行以下操作:
1. 点击右上角的头像,然后转到**"设置"**
2. 点击**GPG 键**标签
3. 单击您要删除的 GPG 密钥旁边的删除图标
## 拒绝未签名的提交[](#rejecting-commits-that-are-not-signed-premium "Permalink")
您可以将您的项目配置为拒绝不是通过[推送规则进行](/docs/user/project/push-rules.md) GPG 签名的提交
# 文件历史记录[](#file-history "Permalink")
Git 文件历史记录提供与文件关联的提交历史记录的信息,您可以在项目中的每个文件中找到**历史记录**按钮。
[![File history button](/docs/img/file_history_button_v12_6.png "History button")](/docs/img/file_history_button_v12_6.png)
当选择**历史记录**按钮时,您将看到提交列表,如果将鼠标悬停在提交时间上,您将看到上次修改提交的确切日期和时间。
## 在 git 中使用[](#associated-git-command "Permalink")
如果要从`git`查看文件历史记录,则可以使用`git log <filename>`命令。例如,如果要在本地目录中找到有关`README.md`文件的`history`信息,请运行以下命令:
```markdown
git log README.md
```
您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间:
```markdown
commit 0e62ed6d9f39fa9bedf7efc6edd628b137fa781a
Author: Someone <someone@codechina.csdn.net>
Date: Tue Nov 26 21:44:53 2019 +0000
Deemphasize GDK as a doc build tool
commit 418879420b1e3a4662067bd07b64bb6988654697
Author: Marcin Sedlak-Jakubowski <someone_else@codechina.csdn.net>
Date: Mon Nov 4 19:58:27 2019 +0100
Fix typo
commit 21cc1fef11349417ed515557748369cfb235fc81
Author: Jacques Erasmus <someone_else@codechina.csdn.net>
Date: Mon Oct 14 22:13:40 2019 +0000
Add support for modern JS
Added rollup to the project
commit 2f5e895aebfa5678e51db303b97de56c51e3cebe
Author: Achilleas Pipinellis <codechina@codechina.csdn.net>
Date: Fri Sep 13 14:03:01 2019 +0000
Remove gitlab-foss Git URLs as we don't need them anymore
[ci skip]
```
\ No newline at end of file
# 减少仓库大小[](#reduce-repo-size "Permalink")
代码仓库会随着时间变得越来越大,将大文件加到 Git 代码仓库后:
* 由于每个人都必须下载文件,因此获取存储库的速度变慢
* 它们占用服务器上的大量存储空间
*[达到](#storage-limits) Git 仓库的存储限制
重写代码仓库可能会删除不需要的历史记录,从而使代码仓库变得更小。[`git filter-repo`](https://github.com/newren/git-filter-repo)是用于快速重写 Git 存储库历史记录的工具,建议同时使用以下两种工具:
* [`git filter-branch`](https://git-scm.com/docs/git-filter-branch).
* [BFG](https://rtyley.github.io/bfg-repo-cleaner/).
**危险:**重写代码仓库历史记录是一种破坏性操作,在开始之前,请确保备份您的代码仓库。备份存储库的最佳方法是[导出项目](/docs/user/project/import.md#exporting-a-project-and-its-data)
## 在从代码仓库历史记录中净化文件[](#purge-files-from-repository-history "Permalink")
为了使克隆项目更快,建议重写分支和标签以删除不需要的文件。
1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md)
2. 使用`--bare`克隆代码仓库的新副本:
```markdown
git clone --bare https://example.gitlab.com/my/project.git
```
3. 使用`git filter-repo` ,从代码仓库的历史记录中清除所有文件
要清除大文件,可以使用`--strip-blobs-bigger-than`选项:
```markdown
git filter-repo --strip-blobs-bigger-than 10M
```
要清除使用 Git LFS 存储的大文件,可以使用`--blob--callback`选项. 下面的示例使用回调从 Git LFS 指针读取文件大小,并删除大于 10MB 的文件
```markdown
git filter-repo --blob-callback '
if blob.data.startswith(b"version https://git-lfs.github.com/spec/v1"):
size_in_bytes = int.from_bytes(blob.data[124:], byteorder="big")
if size_in_bytes > 10*1000:
blob.skip()
'
```
要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项:
```markdown
git filter-repo --path path/to/big/file.m4v --invert-paths
```
有关更多示例和完整文档,请参见[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文档。
4. 运行`git filter-repo`会删除所有 remote,要为您的项目还原 remote,请运行:
```markdown
git remote add origin https://codechina.csdn.net/<namespace>/<project_name>.git
```
5. 强制推送更改以覆盖 CODEChina 上的所有分支:
```markdown
git push origin --force --all
```
[受保护的分支](/docs/user/project/protected-branch.md)将导致此操作失败。要继续的话,您必须删除分支保护,推送,然后重新启用受保护的分支。
6. 要从标记的 Release 中删除大文件,请强制将更改推送到CODEChina上的所有标记:
```markdown
git push origin --force --tags
```
[受保护的标签](/docs/user/project/protected-tag.md)将导致此操作失败. 要继续,您必须删除标签保护,推送,然后重新启用受保护的标签.
7. 手动执行项目整理
**注意:**为提高性能我们缓存了项目统计信息,您可能需要等待 5 到 10 分钟才能看到存储利用率下降。
## 在代码仓库中净化文件[](#purge-files-from-repo-storage "Permalink")
要减少代码仓库的大小,必须删除 CODEChina 内部引用包含大文件的提交。在完成这些步骤之前,请[从存储库历史记录中清除文件](#purge-files-from-repository-history) .
除了[分支](/docs/user/project/repo/branches.md)和标签(这是一种 Git 引用)之外,系统还会自动创建其他引用,[代码仓库清理](#repository-cleanup)可用于从 CODEChina 中删除它们.
以下为内部参考文献:
* `refs/merge-requests/*`用于合并请求
* `refs/pipelines/*` 用于 pipelines
* `refs/environments/*`用于环境
这意味着在获取时通常不包含它们,这使得获取速度更快。另外, `refs/keep-around/*`是隐藏的 refs,以防止与讨论相关的提交被删除并且根本无法被获取。但是,可以从项目导出内的 Git 捆绑包访问这些引用:
1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md)
2. [从项目中](/docs/user/project/import.md#exporting-a-project-and-its-data)生成一个新的[导出](/docs/user/project/import.md#exporting-a-project-and-its-data)并下载
3. 使用`tar`解压缩备份:
```markdown
tar xzf project-backup.tar.gz
```
这将包含一个由[`git bundle`](https://git-scm.com/docs/git-bundle)创建的`project.bundle`文件
4. 从包中克隆存储库的新副本:
```markdown
git clone --bare --mirror /path/to/project.bundle
```
5. 使用`git filter-repo` ,从代码仓库的历史记录中清除所有文件。因为我们正在尝试删除内部引用,所以我们将依靠每次运行生成的`commit-map`来告诉我们要删除哪些内部引用。
**注意:** `git filter-repo`每次运行都会创建一个新的`commit-map`文件,并覆盖前一次运行的`commit-map`
**每次**运行都将需要此文件,每次运行`git filter-repo`都要执行下一步
要清除所有大文件,可以使用`--strip-blobs-bigger-than`选项:
```markdown
git filter-repo --strip-blobs-bigger-than 10M
```
要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项
```markdown
git filter-repo --path path/to/big/file.m4v --invert-paths
```
有关更多示例和完整文档,请参见[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文档
6. 运行[代码仓库清理](#repository-cleanup)
## 代码仓库清理[](#repository-cleanup "Permalink")
代码仓库清理允许您上传对象的文本文件,并且 CODEChina 将删除对这些对象的内部 Git 引用。您可以使用[`git filter-repo`](https://github.com/newren/git-filter-repo)生成对象列表(在`commit-map`文件中),该对象列表可与存储库清理一起使用。
要清理代码仓库:
1. 转到项目的代码仓库
2. 进入 **项目设置>仓库>仓库清理**
3. 上载对象列表,例如,一个`commit-map`文件
4. 点击**开始清理**
这将:
* 删除所有对旧提交的内部 Git 引用
* 针对存储库运行`git gc`
完成后,您将收到一封电子邮件。
当在使用代码仓库清理时,需要注意:
* 项目统计信息已缓存,您可能需要等待 5 到 10 分钟才能看到存储利用率下降
* Housekeeping 会精简2周以上的松散物品,这意味着在最近 2 周内添加的对象将不会被立即删除
* 此过程将从 CODEChina 的缓存和数据库中删除一些重写提交的副本,但是覆盖范围仍然存在许多空白,并且某些副本可能会无限期地存在
## 仓库大小限制[](#storage-limits "Permalink")
仓库大小限制由管理员在实例上设置。
当项目达到其大小限制时,您不能:
* 推送到项目
* 创建一个新的合并请求
* 合并现有的合并请求
* 上载 LFS 对象
您仍然可以:
* 创造新问题
* 克隆项目
如果超出存储库大小限制,则可以尝试:
1. 删除一些数据
2. 进行新的提交
3. 推回代码仓库
也许您还可以:
* 将一些 blob 移到 LFS
* 从历史记录中删除一些旧的依赖项更新
实际上,在提交中删除文件并不会减小存储库的大小,因为早期的提交和 Blob 仍然存在。
您需要做的是重写历史记录,我们建议使用开源社区维护的工具[`git filter-repo`](https://github.com/newren/git-filter-repo)
\ No newline at end of file
# 文件编辑[](#文件编辑 "Permalink")
有时,直接从 CODEChina 界面进行快速更改要比克隆项目并使用 Gi​​t 命令行工具更容易。接下来,我们重点介绍如何从文件浏览器创建新文件,目录,分支或标记,以上所有这些操作都可以通过一个下拉菜单获得。
## 创建文件[](#create-a-file "Permalink")
在项目的文件页面中,单击分支下拉列表右侧的" +"按钮,从下拉列表中选择**新文件**
[![New file dropdown menu](/docs/img/web_editor_new_file_dropdown.png)](/docs/img/web_editor_new_file_dropdown.png)
**文件名**框中输入文件名,然后在编辑器区域中添加文件内容;添加描述性提交消息并选择一个分支,分支字段将默认为您在文件浏览器中查看的分支;如果输入新的分支名称,将出现一个复选框,允许您在提交更改后启动新的合并请求。
当您完成新文件的内容后,请单击底部的" **提交更改** "。
### 文件模板[](#template-dropdowns "Permalink")
启动新项目时,新项目可能也需要一些通用文件,CODEChina 将在仓库中提示您新建这些文件。
[![First file for your project](/docs/img/web_editor_template_dropdown_first_file.png)](/docs/img/web_editor_template_dropdown_first_file.png)
当单击`LICENSE``.gitignore`等时,将显示一个下拉列表,为您提供适合您的项目的模板。
[![MuLan license selected](/docs/img/web_editor_template_dropdown_mulan_license.png)](/docs/img/web_editor_template_dropdown_mulan_license.png)
许可证,更新日志,贡献指南等文件也都可以通过项目页面上的按钮添加。
## 上传文件[](#upload-a-file "Permalink")
当内容为文本时,创建文件将十分方便。但是,这不适用于二进制数据,例如图像,PDF 或其他文件类型,在这种情况下,您可以选择上传文件。
在项目的文件页面中,单击分支下拉列表右侧的" +"按钮,从下拉菜单中选择**上传文件**
弹出上传对话框后,有两种方法可以上传文件:可以在弹出窗口中拖放文件;也可以使用**点击上传**链接,选择要上传的文件后,将显示文件预览。
输入提交消息,选择一个分支,并在准备好后单击**上传文件**
## 新建目录[](#create-a-directory "Permalink")
为了使代码仓库中的文件井井有条,您可以创建一个目录将相关的文件都归类到同一个目录中。
在项目的文件页面中,单击分支下拉列表右侧的" + "号,从下拉菜单中选择 **新建目录**
在新目录对话框中,输入目录名称,提交消息并选择目标分支,单击**创建目录**完成新建目录操作。
## 新建分支[](#create-a-new-branch "Permalink")
有多种方法可从 CODEChina 的界面创建分支。
### 从 Issue 创建一个新分支[](#create-a-new-branch-from-an-issue "Permalink")
如果您的开发工作流程要求每个合并请求都存在 Issue,则可以直接从该 Issue 快速创建分支,以加快流程。新分支及其以后的合并请求将被标记为与此问题相关,合并后将自动关闭 Issue。您可以在 Issue 说明下方看到 **创建合并请求**下拉列表。
**注意:**如果已经有一个具有相同名称的分支或一个引用的合并请求,或者您的项目具有活动的 Fork 关系,则不会看到 **创建合并请求**按钮。如果您想显示此按钮,则可能的解决方法是删除项目的 fork 关系,删除后,Fork 关系将无法恢复,您将不再能够将合并请求发送到源仓库。
该下拉列表包含选项**创建合并请求和分支**以及**创建分支**
[![New Branch Button](/docs/img/web_editor_new_branch_from_issue_v_12_6.png)](/docs/img/web_editor_new_branch_from_issue_v_12_6.png)
选择这些选项之一后,将基于项目的默认分支(默认为`master`创建新的分支或分支与合并请求. 分支名称将基于 Issue 的标题,并作为前缀具有其内部 ID。因此,上面的示例屏幕快照将创建一个名为`1-webpack`的分支。
当您在一个空的项目中单击**创建分支**按钮时,CODEChina 会自动创建一个`master`分支, `README.md`提交一个空白的`README.md`文件,并根据 Issue 标题创建并将您重定向到新分支(如果您的项目已经配置了)。
创建分支后,您可以编辑代码仓库中的文件以解决此 Issue。当基于新创建的分支创建合并请求时,描述字段将自动显示[ Issue 关闭模式](/docs/user/project/issues/manage.md#closing-issues-automatically) `Closes #ID` ,其中`ID`为 Issue 的 ID,一旦合并请求被合并, Issue 将自动关闭。
### 从项目页新建分支[](#create-a-new-branch-from-a-projects-dashboard "Permalink")
如果要在创建新的合并请求之前对多个文件进行更改,则可以预先创建一个新的分支。在项目页的" + "号下拉列表中选择 **新建分支** "。
[![New branch dropdown](/docs/img/web_editor_new_branch_dropdown.png)](/docs/img/web_editor_new_branch_dropdown.png)
输入新的**分支名称** ,更改**从模板创建**字段以选择该新分支将来自哪个分支、标记或提交 SHA(可选)。如果您开始键入现有的分支或标签,则此字段将自动完成。单击**创建分支** ,您将返回到该新分支上的文件列表页。
[![New branch page](/docs/img/web_editor_new_branch_page.png)](/docs/img/web_editor_new_branch_page.png)
现在,您可以根据需要更改任何文件。当您准备好将更改合并回 master 分支时,可以使用页面顶部的"创建合并请求"按钮,在创建分支或修改文件后,该按钮将会在页面显示一段时间。
## 新建 Tag[](#create-a-new-tag "Permalink")
Tag 可用于标记主要的里程碑,例如 Release 版本,候选版本等等。您可以从分支或提交 SHA 创建 Tag,在项目的文件页面上,从下拉列表中选择" **新建标签** "。
给标签起一个名字,例如`v1.0.0` 。选择您要从中创建此新标签的分支或 SHA,您可以选择添加一条消息及 Release说明(可选),发行说明支持 Markdown 格式,您也可以上传附件。单击**创建标签** ,创建成功后将返回标签列表页。
## 提示[](#tips "Permalink")
创建或上传新文件或创建新目录时,均可触发新的合并请求,而不是直接提交给 master。在**目标分支**字段中输入新的分支名称,您会注意到出现一个复选框,标有**通过这些更改启动新的合并请求** ,提交更改后,您将进入新的合并请求表单。
如果你*不*希望使用您的主电子邮件地址通过 Web 编辑器创建的提交,您可以从**用户设置>编辑个人资料**页面选择使用其他的链接的电子邮件地址。
\ No newline at end of file
# 项目设置[](#settings "Permalink")
**注意:**只有项目 maintainer [有权](/docs/user/permissions.md)访问项目设置。
您可以通过导航到项目的主页并点击**设置**来调整[项目](/docs/user/project.md)设置。
## 常规设置[](#general-settings "Permalink")
在项目的常规设置下,您可以找到与项目功能有关的所有内容。
### General project settings[](#general-project-settings "Permalink")
调整项目的名称,描述,头像,默认分支和主题:
项目描述还部分支持[标准 Markdown](/docs/user/markdown.md#standard-markdown-and-extensions-in-gitlab) ,您可以使用[强调](/docs/user/markdown.md#emphasis)[链接](/docs/user/markdown.md#links)[换行符](/docs/user/markdown.md#line-breaks)为项目描述添加更多上下文。
#### 合规性框架[](#compliance-framework-premium "Permalink")
您可以选择一个框架标签来标识您的项目具有某些合规性要求或需要其他监督. 可用的标签包括:
* GDPR - General Data Protection Regulation
* HIPAA - Health Insurance Portability and Accountability Act
* PCI-DSS - Payment Card Industry-Data Security Standard
* SOC 2 - Service Organization Control 2
* SOX - Sarbanes-Oxley
### 共享和权限[](#sharing-and-permissions "Permalink")
对于您的代码仓库,您可以设置例如公共访问,存储库功能,文档,访问权限等等。要从您的项目中执行此操作,请转到**"项目设置"** >" **常规设置"** ,然后展开" **可见性","项目功能","权限"**部分。
现在,您可以更改项目可见性,如果将" **项目可见性"**设置为公开,则可以将某些功能的访问权限限制为" **仅项目成员"** 。 此外,您可以选择[允许用户请求访问权限](/docs/user/project/member.md#project-membership-and-requesting-access)的选项。
**警告:**如果降低项目的可见性级别,则该操作将取消该项目的所有分支的链接。
使用开关启用或禁用以下功能:
| Option | 更多访问限制选项 | Description |
| --- | --- | --- |
| **Issues** | ✓ | 激活 GitLab 问题跟踪器 |
| **Repository** | ✓ | 启用 [仓库](/docs/user/project/repo.md) 功能 |
| **合并请求** | ✓ | 启用[合并请求](/docs/user/project/merge-request.md)功能; 另请参阅[合并请求设置](#merge-request-settings) |
| **Forks** | ✓ | 允许 fork 项目 |
| **Git 大文件存储** |   | 允许使用大文件 |
| **Packages** |   | Supports configuration of a package registry functionality |
| **Wiki** | ✓ | 启用单独的[文档](/docs/user/project/wiki.md)系统 |
| **指标仪表板** | ✓ | 控制对指标仪表板的访问 |
一些功能取决于其他功能:
* 如果禁用" ** Issue "**选项,则还将删除以下功能:
* **看板**
* [**服务台**](#service-desk-starter)**注意:**禁用" ** Issue "**选项后,您仍然可以从合并请求访问**里程碑** .
* 此外,如果您同时禁用**Issues****合并请求** ,则将无法再访问:
* **标签**
* **大事记**
* 如果禁用**代码仓库**功能,还将为您的项目禁用以下功能:
* **合并请求**
* **pipeline**
* **docker**
* **Git 大文件存储**
* **environment**
* 指标仪表板访问要求同时阅读项目环境和部署,有权访问指标仪表板的用户还可以访问环境和部署。
#### 禁用邮件通知[](#disabling-email-notifications "Permalink")
项目 Owner 可以通过选中" **禁用电子邮件通知"**复选框来**禁用**与项目相关的所有[电子邮件通知](/docs/user/account/email-notify.md#gitlab-notification-emails)
### 合并请求设置[](#merge-request-settings "Permalink")
设置项目的合并请求设置:
* 设置合并请求方法(合并提交, [快速合并](/docs/user/project/merge-request/fast-forward.md)
* 添加合并请求[描述模板](/docs/user/project/description-template.md#description-templates)
* 启用合并请求批准
* 启用 [只有全部讨论内容解决后才允许合并](/docs/user/discussions.md#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved)
* 默认启用`合并后删除分支`
* 配置建议的更改提交信息
### 服务台[](#service-desk-starter "Permalink")
为您的项目启用服务台以提供客户支持
### 导出项目[](#export-project "Permalink")
可以在 CODEChina 中导出您的项目
### 高级设置[](#advanced-settings "Permalink")
在这里,您可以运行内部管理,存档,重命名,传输, [删除派生关系](#removing-a-fork-relationship)或删除项目。
#### 归档项目[](#archiving-a-project "Permalink")
归档项目后,所有用户都将其设为只读,并表明该项目已不再处于主动维护状态。也可以取消归档已归档的项目,只有项目 Owner 才[有权](/docs/user/permissions.md)归档项目。
归档项目后,存储库,问题,合并请求和所有其他功能均为只读,归档的项目也隐藏在项目列表中。
可以通过以下步骤归档一个项目:
1. 进入到您项目的 **项目设置>常规设置**
2. 在" **高级"下** ,单击" **展开"**
3. 在" **存档项目"**部分中,单击" **存档项目"**按钮
4. 根据要求确认操作
#### 取消项目归档[](#unarchiving-a-project "Permalink")
取消归档项目会删除对项目的只读限制,并使其在项目列表中可用。只有项目 Owner 才[有权](/docs/user/permissions.md)取消归档项目。
要查找已归档的项目:
1. 以具有项目 Owner 的用户身份登录到 CODEChina
2. 如果你:
* 拥有项目的 URL,在浏览器中打开项目的页面.
* 没有项目的 URL:1.单击**项目>浏览项目** ;1.在" **排序项目"**下拉框中,选择" **显示存档的项目"** ;1.在**按名称过滤**字段中,提供项目的名称;1.单击指向项目的链接以打开其" **详细信息"**页面
接下来,要取消归档项目:
1. 进入到您项目的 **项目设置>常规设置** .
2.**归档项目**, 点击 **展开**.
3. 在" **取消存档项目"**部分中,单击" **取消存档项目"**按钮
4. 根据要求确认操作
#### 重命名一个项目[](#renaming-a-repository "Permalink")
**注意:**只有项目维护者才[有权](/docs/user/permissions.md#project-members-permissions)重命名代码仓库。不要与项目名称混淆,也可以从[常规项目设置中](#general-project-settings)进行更改。
项目的存储库名称定义其 URL(您用于通过浏览器访问该项目的 URL)及其在安装服务器的文件磁盘上的位置。
要重命名存储库:
1. 进入到您项目的 **项目设置>常规设置**
2. 在" **高级"下** ,单击" **展开"**
3. 在"重命名存储库"下,根据您的喜好更改"路径"
4. Hit **重命名项目**
请记住,这可能会带来意想不到的副作用,因为使用旧网址的每个人都无法推送或拉动。
#### 转移项目[](#transferring-an-existing-project-into-another-namespace "Permalink")
**注意:**只有项目 Owner 才[有权](/docs/user/permissions.md)转移项目。
在以下情况下,您可以将现有项目转移到[组织中](/docs/user/org.md)
* 您至少对该组具有** maintainer ** [权限](/docs/user/permissions.md#project-members-permissions)
* 您至少是要转让的项目的** Owner **
* 将项目转移到的组必须允许创建新项目
开源通过以下操作进行项目的转移操作:
1. 进入到您项目的 **项目设置>常规设置**
2. 在" **高级"下** ,单击" **展开"**
3. 在"传输项目"下,选择要将项目传输到的命名空间
4. 按照说明键入项目路径,以确认传输
完成后,您将被带到新项目的命名空间。
#### 删除项目[](#remove-a-project "Permalink")
**注意:**只有项目所有者和管理员才[有权](/docs/user/permissions.md#project-members-permissions)删除项目.
删除项目:
1. 进入到您项目的 **项目设置>常规设置>高级**
2. 在"删除项目"部分中,单击" **删除项目"**按钮
3. 根据要求确认操作
这个动作:
* 删除包含所有相关资源(问题,合并请求等)的项目
#### 删除 fork 项目关系[](#removing-a-fork-relationship "Permalink")
Fork 是为您不是项目成员的项目做贡献的好方法,如果您想自己使用 fork,而无需将[合并请求](/docs/user/project/merge-request.md)发送到上游项目,则可以安全地删除 fork 关系。
**注意:**删除后,将无法恢复 fork 关系。您将不再能够将合并请求发送到源,并且如果有人 fork 了您的项目,他们的分支也将失去关系。
您可以通过以下操作来删除 fork 项目关系:
1. 进入到您项目的**项目设置>常规设置>高级** .
2. 在" **删除 fork 关系"下** ,单击删除按钮
3. 按照说明键入项目的路径,以确认删除操作
**注意:**只有项目 Owner [有权](/docs/user/permissions.md#project-members-permissions)删除 fork 关系。
\ No newline at end of file
# 时间跟踪[](#time-track "Permalink")
时间跟踪允许您跟踪估计和花费在问题上的时间以及在 CODEChina 中合并请求。
## 概览[](#overview "Permalink")
时间跟踪使您能够:
* 记录处理 Issue 或合并请求所花费的时间
* 添加完成 Issue 或合并请求所需时间的估计
您不必输入估算值即可输入花费的时间,反之亦然。
有关时间跟踪的数据显示在 Issue 及合并请求侧栏上。
## 如何更新数据[](#how-to-enter-data "Permalink")
时间跟踪可以如下两个[快速操作](/docs/user/project/quick-actions.md)`/spend``/estimate`
快速操作既可以用于 Issue 或合并请求的正文中,也可以用于 Issue 或合并请求的注释中。
添加时间条目(花费的时间或估计的时间)仅限于项目成员。
### 预估[](#estimates "Permalink")
要输入估算值,请输入`/estimate` ,然后输入时间。例如,如果您需要输入 3 天 5 小时 10 分钟的估算值,则可以输入`/estimate 3d 5h 10m` ,我们支持的时间单位列在此帮助页面的底部。
每次输入新的时间估算值时,任何先前的时间估算值都将被该新值覆盖, 在发布或合并请求中应该只有一个有效的预估值。
要完全删除估算,请使用`/remove_estimate`
### 花费时间[](#time-spent "Permalink")
要输入花费的时间,请使用`/spend 3d 5h 10m`
每个新花费的时间条目将被添加到当前 Issue 或合并请求的总时间中。
您可以通过输入负数来减少时间: `/spend -3d`将从总花费时间中删除 3 天,您所花费的时间不能少于 0 分钟,因此,如果您删除的时间量与已输入的时间相比更长,则系统将自动重置所花费的时间。
要删除一次花费的所有时间,请使用`/remove_time_spent`
## 配置[](#configuration "Permalink")
以下时间单位可用:
* 月(mo)
* 周(w)
* Days (d)
* 小时(h)
* 分钟(m)
默认转换率是 1mo = 4w,1w = 5d 和 1d = 8h。
\ No newline at end of file
# Web IDE[](#web-ide "Permalink")
Web IDE 编辑器通过提供具有提交阶段的高级编辑器,可以更快,更轻松地为项目贡献更改。
## 打开 WebIDE[](#open-the-web-ide "Permalink")
您可以从代码仓库文件列表和合并请求中查看文件时打开 Web IDE。
[![Open Web IDE](/docs/img/open_web_ide.png)](/docs/img/open_web_ide.png)
## 查找文件[](#file-finder "Permalink")
通过文件查找器,您可以通过搜索快速打开当前分支中的文件. 使用键盘快捷键`Command-p``Control-p``t` (当编辑器不在焦点时)启动文件查找器. 输入文件名或文件路径片段以开始查看结果。
## 语法高亮[](#syntax-highlighting "Permalink")
正如 IDE 所期望的那样,Web IDE 中多种语言的语法突出显示将使您的直接编辑更加容易。
Web IDE 当前提供:
* 基本语法着色,适用于各种编程,脚本和标记语言,例如 XML,PHP,C#,C ++,Markdown,Java,VB,Batch,Python,Ruby 和 Objective-C
* 某些语言的 IntelliSense 和验证支持(显示错误和警告,提供智能补全,格式设置和概述). 例如:TypeScript,JavaScript,CSS,LESS,SCSS,JSON 和 HTML
因为 Web IDE 基于[Monaco Editor](https://microsoft.github.io/monaco-editor/) ,所以您可以在[Monaco 语言](https://github.com/Microsoft/monaco-languages)存储库中找到更完整的受支持语言列表。 Monaco 在底层上使用[Monarch](https://microsoft.github.io/monaco-editor/monarch.html)库来突出显示语法。
**注意:**单个文件编辑基于[Ace 编辑器](https://ace.c9.io)
### 主题[](#themes "Permalink")
我们支持的语法突出显示的所有主题都添加到了 Web IDE 的代码编辑器中,您可以从个人资料首选项中选择一个主题。
主题仅在 Web IDE 文件编辑器中可用, [深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/209808)[日光化深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)除外,它们适用于整个 Web IDE 屏幕。
| 日光灯主题 | 日晒黑暗主题 | 黑暗主题 |
| --- | --- | --- |
| [![Solarized Light Theme](/docs/img/solarized_light_theme_v13_0.png)](/docs/img/solarized_light_theme_v13_0.png) | [![Solarized Dark Theme](/docs/img/solarized_dark_theme_v13_1.png)](/docs/img/solarized_dark_theme_v13_1.png) | [![Dark Theme](/docs/img/dark_theme_v13_0.png)](/docs/img/dark_theme_v13_0.png) |
## 配置 WebIDE[](#configure-the-web-ide "Permalink")
Web IDE 支持使用[`.editorconfig`文件](https://editorconfig.org/)配置某些编辑器设置,打开文件时,Web IDE 将在当前目录和所有父目录中查找名为`.editorconfig`的文件,如果找到配置文件并且其设置与文件的路径匹配,则将在打开的文件上强制执行这些设置。
Web IDE 当前支持以下`.editorconfig`设置:
* `indent_style`
* `indent_size`
* `end_of_line`
* `trim_trailing_whitespace`
* `tab_width`
* `insert_final_newline`
## 提交更改[](#commit-changes "Permalink")
进行更改后,单击左下角的" **提交"**按钮以查看已更改文件的列表。
完成更改后,可以添加提交消息,提交更改并直接创建合并请求。如果您没有对所选分支的写访问权,则会看到警告,但仍然可以创建新分支并启动合并请求。
要放弃特定文件中的更改,请在"更改"选项卡中单击该文件上的" **放弃更改"**按钮;要放弃所有更改,请单击更改侧栏右上角的删除图标。
## 查看更改[](#reviewing-changes "Permalink")
提交更改之前,可以通过切换到查看模式或从更改列表中选择文件来将它们与上一次提交进行比较。
当您打开合并请求时,还可以使用其他查看模式,如果您提交更改,该模式将向您显示合并请求 diff 的预览。
## 切换合并请求[](#switching-merge-requests "Permalink")
要在创作的和分配的合并请求之间切换,请单击侧栏顶部的下拉列表以打开合并请求列表。在切换到其他合并请求之前,您将需要提交或放弃所有更改。
## 切换分支[](#switching-branches "Permalink")
要在当前项目存储库的分支之间切换,请单击侧栏顶部的下拉列表以打开分支列表。在切换到其他分支之前,您需要提交或放弃所有更改。
## 编辑Markdown[](#markdown-editing "Permalink")
在 Web IDE 中编辑 Markdown 文件时,可以通过单击文件编辑器上方的" **预览 Markdown"**选项卡来预览更改. Markdown 预览支持[GFM](/docs/user/markdown.md#gitlab-flavored-markdown-gfm)
您还可以通过将任何本地图像直接粘贴到 Markdown 文件中来上传它们,该图像将上传到同一目录,默认情况下命名为`image.png` 。 如果已经存在相同名称的另一个文件,则将数字后缀自动添加到文件名。
## 预览[](#live-preview "Permalink")
您可以使用 Web IDE 在浏览器中预览 JavaScript 项目,此功能使用 CodeSandbox 编译和捆绑用于预览 Web 应用程序的 JavaScript。
此外,对于公共项目,**在 CodeSandbox 打开**按钮可用于将项目内容转移到公共代码沙盒项目中,以便与其他人快速共享您的项目。
### WebIDE 配置文件[](#web-ide-configuration-file "Permalink")
为了启用 Web IDE 终端,您需要在存储库根目录内创建文件`.gitlab/.gitlab-webide.yml` . 该文件与 CI 配置文件的语法非常相似,但有一些限制:
* 无法定义全局块(即: `before_script``after_script`
* 只能将一个名为`terminal`作业添加到该文件中.
* 仅允许使用关键字`image``services``tags``before_script``script``variables`来配置作业
* 要连接到交互式终端, `terminal`作业必须仍然处于活动状态并且正在运行,否则终端将无法连接到作业的会话。默认情况下, `script`关键字的值是`sleep 60`以防止作业结束并为 Web IDE 提供足够的连接时间。 这意味着,如果您覆盖默认`script`值,则必须添加一个使作业保持运行`sleep`的命令,例如`sleep`
\ No newline at end of file
# Wiki[](#wiki "Permalink")
每个项目都内置了一个称为 Wiki 的独立文档系统。 默认情况下,所有新项目都启用此功能,您可以在项目的**Wiki**下找到它。
如果您不想将文档保留在代码仓库中,但确实希望将其保留在代码所在的项目中,则 Wiki 非常方便。
您可以在 Web 界面中或[使用 Git 在本地](#adding-and-editing-wiki-pages-locally)创建 Wiki 页面,因为每个 Wiki 都是单独的 Git 存储库。
## 创建 Home [](#first-time-creating-the-home-page "Permalink")
首次访问 Wiki 时,系统将指示您创建主页 Home 。它是查看 Wiki 时的默认页面,没有 Home 页的话您将看到的是 Wiki 的文件列表。您只需要填写**内容**部分,然后单击**创建页面** ,您以后可以随时对其进行编辑,因此继续写欢迎信息。
## 新建 Wiki [](#creating-a-new-wiki-page "Permalink")
**注意:**需要 developer [权限](/docs/user/permissions.md)
通过单击可在所有 Wiki 页面中找到的" **新页面"**按钮来创建新页面。
系统将要求您为新的 Wiki 页面填写标题。
您可以通过在标题中使用" /"指示子目录来为 Wiki 页面指定完整路径,任何丢失的目录将自动创建。例如, `docs/my-page`的标题将创建一个 Wiki 页面,其路径为`/wikis/docs/my-page`
输入页面名称后,就该填写其内容了. Wiki 支持 Markdown,RDoc,AsciiDoc 和 Org。对于基于 Markdown 的页面,所有[Markdown 功能](/docs/user/markdown.md)均受支持,对于链接,则存在一些[特定](/docs/user/markdown.md#wiki-specific-markdown)[Wiki 的](/docs/user/markdown.md#wiki-specific-markdown)行为。
在 Web 界面中,提交消息是可选的,但是 Wiki 是基于 Git 的,并且需要提交消息,因此如果您不输入消息,则会为您创建一条。
当你都准备好了后,点击**建立页面** 就可以完成新页面的新建操作。
### 附件存储大小[](#attachment-storage "Permalink")
通过界面上传到 Wiki 的任何文件都将存储在 Wiki Git 存储库中,如果您在本地克隆 Wiki 存储库,该文件将可用。
### 页面标题中的特殊字符[](#special-characters-in-page-titles "Permalink")
Wiki 页面作为文件存储在 Git 代码仓库中,因此某些字符具有特殊含义:
* 存储页面时,空格会转换为连字符
* 显示页面时,连字符( `-` )转换回空格
* 不能使用斜杠( `/` ),因为它们用作路径分隔符
### 文件及目录的长度限制[](#length-restrictions-for-file-and-directory-names "Permalink")
许多常见的文件系统[的文件名和目录名限制为 255 个字节](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits) ,尽管 Git 和 CODEChina 都支持超出这些限制的路径,但是它们的存在使这些文件系统上的用户无法在本地检出 Wiki 存储库。
为了避免这种情况,通过界面和 API 编辑页面时会强制执行以下限制:
* 页面标题为 245 个字节(文件扩展名保留 10 个字节)
* 255 个字节的目录名称
请注意:
* 非 ASCII 字符占用多个字节
* 仍然可以通过 Git 在本地创建超出限制的文件和目录,但这可能会在其他人的计算机上中断.
## 编辑 Wiki [](#editing-a-wiki-page "Permalink")
**注意:**需要 developer [权限](/docs/user/permissions.md)
要编辑页面,只需单击" **编辑"**按钮,然后您可以更改其内容;完成后,单击" **保存更改"**以使更改生效。
### 添加目录[](#adding-a-table-of-contents "Permalink")
要从 Wiki 页面中的标题生成目录,请使用`[[_TOC_]]`标签。
## 删除 Wiki [](#deleting-a-wiki-page "Permalink")
**注意:**需要 maintainer [权限](/docs/user/permissions.md)
仅在编辑页面时才能找到" **删除"**按钮,单击它并确认您要删除页面。
## 移动 Wiki [](#moving-a-wiki-page "Permalink")
通过在[编辑](#editing-a-wiki-page)表单的 Wiki 页面标题中指定完整路径,可以将 Wiki 页面从一个目录移动到另一个目录。
为了将 Wiki 页面移动到根目录,必须在 Wiki 页面标题前加上斜杠( `/` )字符。
## 查看 Wiki 列表[](#viewing-a-list-of-all-created-wiki-pages "Permalink")
每个 Wiki 都有一个侧边栏,从中可以找到所创建页面的简短列表,该列表按字母顺序排列。
如果页面很多,则不会在侧边栏中列出所有页面, 单击**查看所有页面****查看所有页面**
## 查看 Wiki 历史[](#viewing-the-history-of-a-wiki-page "Permalink")
Wiki 页面随时间的变化记录在 Wiki 的 Git 存储库中,您可以通过单击**页面历史**按钮来查看它们。
从历史记录页面中,您可以看到页面的修订版(Git commit SHA)、作者、提交消息以及上次更新时间,要查看页面的先前版本的外观,请在" **页面版本"**列中单击修订号。
### 查看 Wiki 版本差异[](#viewing-the-changes-between-page-versions "Permalink")
类似于版本化的差异文件视图,您可以看到在给定的 Wiki 页面版本中所做的更改:
1. 进入到您感兴趣的 Wiki 页面
2. 单击**页面历史记录**以查看所有页面版本
3. 单击" **更改"**列中的提交消息以获取您感兴趣的版本
## 本地添加和编辑 Wiki[](#adding-and-editing-wiki-pages-locally "Permalink")
由于 Wiki 基于 Git 存储库,因此您可以像在其他所有 Git 存储库中一样在本地克隆它们并进行编辑。
在右侧栏上,单击" **克隆存储库",**然后按照屏幕上的说明进行操作。
根据您要使用的标记语言,您在本地添加到 Wiki 的文件必须具有以下受支持的扩展名之一,否则当推送到 CODEChina 时将不会显示这些文件:
* Markdown 扩展名: `.mdown``.mkd``.mkdn``.md``.markdown`
* AsciiDoc 扩展名: `.adoc``.ad``.asciidoc`
* 其他标记扩展名: `.textile``.rdoc``.org``.creole``.wiki``.mediawiki``.rst`
## 自定义侧边栏[](#customizing-sidebar "Permalink")
在项目的 Wiki 页面上,有一个右侧导航,默认情况下呈现带有层次结构的完整 Wiki 页面列表。
您可以创建一个名为`_sidebar`的文件以完全替换默认导航,进行自定义设置。
`_sidebar`示例(使用 Markdown 格式):
```markdown
### [Home](home)
- [Hello World](hello)
- [Foo](foo)
- [Bar](bar)
---
- [Sidebar](_sidebar)
```
\ No newline at end of file
# 预留命名空间[](#预留命名空间 "Permalink")
出于系统安全、商标及知识保护等方面的考虑,在设置用户或组织的命名空间时并非所有的名称都会被允许。
有关不允许用作组名或项目名的单词的列表,请参阅`TOP_LEVEL_ROUTES``PROJECT_WILDCARD_ROUTES``GROUP_ROUTES`列表下的[`path_regex.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/path_regex.rb)文件:
* `TOP_LEVEL_ROUTES` :是为用户名或顶级组织保留的名称
* `PROJECT_WILDCARD_ROUTES` :是为子组或项目保留的名称
* `GROUP_ROUTES` :是为所有组或项目保留的名称
## 预留的项目名[](#reserved-project-names "Permalink")
当前无法创建具有以下名称的项目:
* `\-`
* `badges`
* `blame`
* `blob`
* `builds`
* `commits`
* `create`
* `create_dir`
* `edit`
* `environments/folders`
* `files`
* `find_file`
* `gitlab-lfs/objects`
* `info/lfs/objects`
* `new`
* `preview`
* `raw`
* `refs`
* `tree`
* `update`
* `wikis`
## 预留的组织名[](#reserved-group-names "Permalink")
当前,以下是顶级组织的预留名称:
* `\-`
* `.well-known`
* `404.html`
* `422.html`
* `500.html`
* `502.html`
* `503.html`
* `abuse_reports`
* `admin`
* `api`
* `apple-touch-icon-precomposed.png`
* `apple-touch-icon.png`
* `assets`
* `autocomplete`
* `dashboard`
* `deploy.html`
* `explore`
* `favicon.ico`
* `favicon.png`
* `files`
* `groups`
* `health_check`
* `help`
* `import`
* `invites`
* `jwt`
* `login`
* `oauth`
* `profile`
* `projects`
* `public`
* `robots.txt`
* `s`
* `search`
* `sent_notifications`
* `slash-command-logo.png`
* `snippets`
* `unsubscribes`
* `uploads`
* `users`
* `v2`
这些组名不能用作子组名:
* `\-`
\ No newline at end of file
# 搜索[](#搜索 "Permalink")
## Issues 及合并请求[](#issues-and-merge-requests "Permalink")
如果要在多个项目的 Issue 或合并请求中搜索的话,可以使用屏幕左上角的" **Issue"**或" **合并请求"**链接(需要登录)。
由于 Issue 及合并请求的工作方式基本一致,因此以下说明两者均适用。
点击**Issue**时 ,您会立即看到分配给您的未解决 Issue:
[![Issues assigned to you](/docs/img/issues_assigned_to_you.png)](/docs/img/issues_assigned_to_you.png)
您可以浏览 **开放中**, **已关闭**, 或 **全部** issues。
您还可以使用搜索、过滤器字段对结果进行过滤,如下面的[过滤 Issue 及合并请求列表中所述](#filtering-issue-and-merge-request-lists) .
### 由您创建或分配给您的 Issue 及合并请求[](#issues-and-mrs-assigned-to-you-or-created-by-you "Permalink")
您还可以在屏幕上方的搜索框中找到由您创建或分配给您的 Issue 及合并请求的快捷入口:
[![shortcut to your issues and mrs](/docs/img/issues_mrs_shortcut.png)](/docs/img/issues_mrs_shortcut.png)
### Issue 或合并请求列表过滤[](#filtering-issue-and-merge-request-lists "Permalink")
请可以参考下步骤对项目和组织中的" **Issue****合并请求"**列表进行过滤筛选:
1. 单击字段**搜索或过滤结果…**
2. 在出现的下拉菜单中,选择您要过滤的属性:
* 作者
* 指派人
* [里程碑](/docs/user/project/milestone.md)
* Release
* [标签](/docs/user/project/label.md)
* 我的反应
* 机密
* Epic
* 关键词
3. 选择或键入用于过滤属性的运算符, 可以使用以下运算符:
* `=` :是
* `!=` :不是
4. 输入文本以按[过滤属性](#filters-autocomplete)
5. 重复此过程以按多个属性对结果进行过滤筛选, 可通过逻辑`AND` 添加多个属性
例如,按作者`=` Jane 和 Milestone `!=` 12.6 进行过滤,以解决 Jane 是作者而里程碑不是 12.6 的问题.
[![filter issues in a project](/docs/img/issue_search_filter_v12_7.png)](/docs/img/issue_search_filter_v12_7.png)
### 按 **无** / **任何**过滤[](#filtering-by-none--any "Permalink")
一些过滤字段(例如里程碑和指派人)允许您按**无****任何**进行过滤。
[![filter by none any](/docs/img/issues_filter_none_any.png)](/docs/img/issues_filter_none_any.png)
选择" **无"**将返回该字段为空值的结果,即没有里程碑或没有指派人;
选择" **任意** "则相反,它返回该字段具有非空值的结果。
### 搜索特定内容[](#searching-for-specific-terms "Permalink")
您可以按标题或说明中包含的特定内容过滤 Issue 及合并请求。
* 语法
* 以任何顺序搜索查找的单词,例如:搜索 Issue 以寻找`display bug` ,将以任何顺序返回匹配这两个单词的所有 Issue;
* 要精确的查找内容,请使用双引号: `"display bug"`
* 限制
* 出于性能原因考虑,少于 3 个字符的单词将被忽略。 例如:在 Issue 中搜索`included in titles`与搜索`included titles`是一样的;
* 每个查询只能搜索 4096 个字符或 64 个字词
### 按序号过滤[](#filtering-by-id "Permalink")
您可以按 ID 将" **问题"**列表过滤到单个实例。例如,输入过滤器`#10`仅返回问题#10;这同样适用于" **合并请求"**列表, 输入过滤器`#30`仅返回合并请求#30.
## 自动填充[](#filters-autocomplete "Permalink")
在许多页面(如 Issue,合并请求,Epic等)中提供了许多过滤器,您可以使用它们来缩小搜索范围。使用过滤器功能时,可以开始键入字符以显示相关用户或其他属性。
为了优化性能,至少需要三个字符才能开始搜索。例如,如果您要搜索指派人为" Simone Presley"的 Issue,则您需要至少输入" Sim",然后系统才能自动完成并给出相关结果。
## 搜索历史记录[](#search-history "Permalink")
您可以通过单击搜索条左侧的下拉框来查看最近的搜索,单击搜索条目可以再次进行该搜索。此功能可用于 Issue 及合并请求,搜索结果存储在本地浏览器中。
[![search history](/docs/img/search_history.gif)](/docs/img/search_history.gif)
## 移除过滤条件[](#removing-search-filters "Permalink")
单击过滤器的(x)按钮或敲入退格键可以删除单个过滤器,整个搜索过滤器可以通过点击搜索框的(X)按钮,或通过`⌘``(Mac)+⌫`来清除。
如果要一次删除一个过滤条件,可以使用`⌥` (Mac)/ `Ctrl` + `⌫`键盘组合.
## 重复使用同一过滤条件[](#filtering-with-multiple-filters-of-the-same-type "Permalink")
某些过滤条件可以多次添加,包括但不限于指派人和标签。相同类型的多个过滤条件在使用通过"与"逻辑连接。例如,如果您要过滤`assignee:@sam assignee:@sarah` ,那么您的结果将仅包含分配给 Sam 和 Sarah 的内容。
## 快捷搜索入口[](#shortcut "Permalink")
您还可以在项目仪表板上方的搜索框中找到搜索的快捷入口,以快速访问在该项目的 Issue 或合并请求中由您创建或分配给您的内容:
## 待办事项[](#to-do-list "Permalink")
可以通过"待办事项"和"完成"来搜索您的[待办事项列表](/docs/user/todo.md) 。您可以按项目,作者,类型和操作[过滤](/docs/user/todo.md#filtering-your-to-do-list)它们。另外,您可以按[**标签优先级**](/docs/user/project/label.md#label-priority)**最后创建****最早创建**对其进行排序。
## 项目[](#projects "Permalink")
您可以从导航中项目菜单栏去搜索和发现项目,方法是依次点击**项目>浏览项目** , 在" **按名称过滤** "字段上,输入要查找的项目或组织名称即可。
你也可以去找你的项目[ Star ](/docs/basic/create-project.md#star-a-project)**加星标的项目** ),并**探索**所有的公共和内部项目 GitLab.com 可用,从中你可以通过可视性筛选,通过**趋势** ,最好与**大多数明星**评分,或他们的**全部** .
您还可以按**名称****最后创建****最旧创建****最后更新****最新更新****所有者**对搜索结果中的项目进行排序,并选择隐藏或显示**已归档的项目**
## 组织[](#org "Permalink")
[项目搜索](#projects)类似,你可以通过导航中组织菜单栏去搜索和发现组织。
在" **按名称过滤** "字段上,输入要查找的组名,在您键入时为您过滤它们。
您也可以**浏览**所有的公共组织,您可以按照**最新创建的****最早建立****最后更新** ,或**最早的更新** 进行筛选过滤。
## 看板[](#issue-boards "Permalink")
[看板](/docs/user/project/kanban.md) 中,您可以按**作者****指派人****里程碑****标签**过滤 Issue。您还可以从键入时加载的字段中**按名称过滤**
当您要添加**Issue**到看板中以便在看板中搜索时,请点击屏幕右上角的**添加 Issue**按钮,除了按**名称**过滤它们之外,您还可以从中找到一个模式窗口**作者****受让人****里程碑****标签** ,选择多个问题以添加到您选择的列表中。
## 高级全局搜索[](#advanced-global-search-starter "Permalink")
利用 Elasticsearch 进行更快,更高级的代码搜索。
## 高级语法搜索[](#advanced-syntax-search-starter "Permalink")
使用高级语法搜索可获得更具针对性的搜索结果。
# 快捷键[](#快捷键 "Permalink")
通过我们支持的快捷键可以让您更轻松地访问不同的功能,您可以通过按`?`查看我们所支持的快捷键,或单击右上角头像菜单中的"快捷键" 。此外,您也可以通过设置弹窗中的" **启用** / **禁用"**切换来禁用键盘快捷键。
[全局快捷键](#global-shortcuts)可在 CODEChina 的任何区域使用,但是您必须在特定页面中才能使用其他快捷方式,具体的参考以下文档说明。
## 全局快捷键[](#global-shortcuts "Permalink")
在 CODEChina 的大多数区域中都可以使用以下这些快捷方式:
| 快捷键 | 说明 |
| --- | --- |
| `?` | 显示/隐藏快捷方式列表 |
| `Shift` + `p` | 转到您的项目页面 |
| `Shift` + `g` | 转到您的组织页面 |
| `Shift` + `a` | 转到"活动"页面|
| `Shift` + `l` | 转到您的里程碑页面|
| `s` | 将光标放在 Issue /合并请求搜索中|
| `Shift` + `i` | 转到您的 Issue 页面|
| `Shift` + `m` | 转到"合并请求"页面|
| `Shift` + `t` | 转到待办事项列表页面 |
此外,在文本字段中编辑文本时,可以使用以下快捷方式,例如,评论,回复,Issue 描述及合并请求描述:
| 快捷键 | 说明 |
| --- | --- |
| `↑` | 编辑您的最后评论。您必须在话题下方的空白文本字段中,并且该话题中必须已经至少有一个注释|
| `⌘` (Mac)/ `Ctrl` + `Shift` + `p` | 在顶部具有" **编写"**和" **预览"**选项卡的文本字段中编辑文本时,切换 Markdown 预览|
## 项目[](#project "Permalink")
在项目的任何页面您都可以使用以下这些快捷键,您必须相对快速地敲下它们,然后它们会将您带到项目中的另一个页面。
| 快捷键 | 说明 |
| --- | --- |
| `g` + `p` | 转到项目主页( **项目>详细信息** )|
| `g` + `r` | 转到项目发布列表(**项目>Release** )|
| `g` + `f` | 转到[项目文件](#project-files)列表(**代码>文件** )|
| `t` | 转到项目文件搜索页面(**代码>文件** ,单击 **查找文件** )|
| `g` + `c` | 转到项目提交列表( **代码>提交** ) |
| `g` + `n` | 转到[分支图](#repository-graph)页面( **代码> 分支图** )|
| `g` + `d` | 转到仓库分析 (**仓库分析**)|
| `g` + `i` | 转到项目 Issue 列表( **Issue** )|
| `i` | 转到"新建 Issue "页面( **Issue** ,单击 **新建 Issue** )|
| `g` + `b` | 转到项目 Issue 看板( **Issue >看板** )|
| `g` + `m` | 转到项目合并请求列表( **合并请求** )|
| `g` + `s` | 转到项目片段列表( **片段** ) |
| `g` + `w` | 转到项目 Wiki( **Wiki** )(如果已启用) |
### Issues 及合并请求[](#issues-and-merge-requests "Permalink")
以下快捷键在 Issue 及合并请求相关页面可用:
| 快捷键 | 说明 |
| --- | --- |
| `e` | 编辑 |
| `a` | 更改指派人 |
| `m` | 更改里程碑 |
| `l` | 更改标签|
| `r` | 开始写评论,如果选择了任何文本,它将在注释中引用。 不能用于在话题讨论内回复。|
| `n` | 移至下一个未解决的讨论(仅合并请求) |
| `p` | 移至上一个未解决的讨论(仅合并请求) |
| `]` or `j` | 移至下一个文件(仅合并请求) |
| `[` or `k` | 移至上一个文件(仅合并请求) |
| `b` | 复制源分支名称(仅合并请求) |
### 项目文件[](#project-files "Permalink")
以下快捷键在浏览项目中的文件时可用(导航至**代码** > **文件** ):
| 快捷键 | 说明 |
| --- | --- |
| `↑` | 向上移动选择|
| `↓` | 向下移动选择 |
| `enter` | 打开选择|
| `esc` | 返回文件列表屏幕(仅在搜索文件时可用," **代码">"文件",**然后单击" **查找文件"** ) |
| `y` | 转到文件永久链接(仅在查看文件时) |
### Web IDE[](#web-ide "Permalink")
使用[Web IDE](/docs/user/project/webide.md)编辑文件时,可以使用以下快捷方式:
| 快捷键 | 说明 |
| --- | --- |
| `⌘` (Mac)/ `Ctrl` + `p` | 搜索,然后打开另一个文件进行编辑 |
| `⌘` (Mac)/ `Ctrl` + `Enter` | 提交(在编辑提交消息时) |
### 分支图[](#repository-graph "Permalink")
以下快捷键在查看项目[分支图](/docs/user/project/repo.md#repository-graph)页面时可用(导航至**代码> 分支图** ):
| 快捷键 | 说明 |
| --- | --- |
| `←` or `h` | 向左滚动 |
| `→` or `l` | 向右滚动 |
| `↑` or `k` | 向上滚动 |
| `↓` or `j` | 向下滚动 |
| `Shift` + `↑` or `Shift` + `k` | 滚动到顶部|
| `Shift` + `↓` or `Shift` + `j` | 滚动到底部|
### Wiki[](#wiki-pages "Permalink")
在查看[Wiki](/docs/user/project/wiki.md)时,可以使用以下快捷键:
| 快捷键 | 说明 |
| --- | --- |
| `e` | 编辑 Wiki 页面 |
### 搜索过滤[](#filtered-search "Permalink")
以下快捷键在使用[搜索过滤](/docs/user/search.md))时可用:
| 快捷键 | 说明 |
| --- | --- |
| `⌘` (Mac)+ `⌫` | 清除整个搜索过滤器|
| `⌥` (Mac)/ `Ctrl` + `⌫` | 一次清除一个过滤条件 |
## Epics[](#epics-ultimate "Permalink")
以下快捷键在查看 Epics 时可用:
| 快捷键 | 说明 |
| --- | --- |
| `r` | 开始写评论,如果选择了任何文本,它将在注释中引用。不能用于在话题讨论内回复 |
| `e` | 编辑说明 |
| `l` | 更改标签 |
\ No newline at end of file
# 待办事项[](#待办事项 "Permalink")
当您登录到 CODEChina 时,通常需要看一下哪些内容需要花费较多时间、开始干活或知道需要注意的是哪些,而无需理会大量的电子邮件通知。这里是您工作的地方,因此能够快速下手开展工作尤为重要。待办事项就是这样一个工具,它在一个简单的仪表板中按时间顺序列出了等待您处理的内容。
[![To Do screenshot showing a list of items to check on](/docs/img/todos_index.png)](/docs/img/todos_index.png)
通过单击顶部导航右上角的对勾图标,可以快速访问待办事项列表. 如果计数为:
* 小于 100 的蓝色数字是待办事项的数量
* 大于或等于 100,则数字显示为 99+, 确切的数字显示在"任务列表"上
[![To Do icon](/docs/img/todos_icon.png)](/docs/img/todos_icon.png)
## 待办事项类型[](#what-triggers-a-to-do "Permalink")
在以下情况下,待办事项会显示在您的待办事项列表中:
* 分配给您的 Issue 或合并请求
* 在以下内容的描述或评论中`@到您`
* Issue
* 合并请求
* Epic
* 在以下评论中`@到您`
* 提交
* 设计
* 您的合并请求的 CI/CD pipeline 失败
* 当一个打开的合并请求冲突了,并且满足以下条件之一:
* 你是作者
* 是由您将其设置为在 pipeline 成功后自动合并的
待办事项触发器不受[通知电子邮件设置的影响](/docs/user/account/email-notify.md)
**注意:**当用户不再有权访问与待办事项相关的资源(例如 Issue,合并请求,项目或组织)时,出于安全原因,相关的待办事项将在一小时内删除。为了防止用户的权限被错误地收回导致数据丢失,删除操作会延迟处理。
### 直接处理[](#directly-addressing-a-to-do "Permalink")
如果在一行的开头直接@您,则您收到的待办事项将列为"直接处理"。比如在下面的这个评论内容中:
```
@alice What do you think? cc: @bob
- @carol can you please have a look?
>>>
@dan what do you think?
>>>
@erin @frank thank you!
```
接收直接处理的待办事项的人是`@alice``@erin``@frank` 。直接处理的待办事项仅在过滤的时候会有所不同,其他时候在显示上并无差异。
### 手动新建待办事项[](#manually-creating-a-to-do "Permalink")
您还可以通过在以下位置单击" **添加待办事项"**按钮,将以下内容添加到"待办事项列表"中:
* Issue
* 合并请求
[![Adding a To Do from the issuable sidebar](/docs/img/todos_add_todo_sidebar.png)](/docs/img/todos_add_todo_sidebar.png)
## 标记已完成[](#marking-a-to-do-as-done "Permalink")
针对下面任务采取的任何措施都会将相应的待办事项标记为已完成:
* Issue
* 合并请求
取消待办事项的动作包括:
* 更换指派人
* 更改里程碑
* 添加/删除标签
* 对 Issue 发表评论
您的待办事项列表只有自己能看到,只有您自己的行为才会将其标记为已完成。如果您关闭了 Issue 或合并请求,那么您的待办事项也会自动标记为已完成。
为防止其他用户在不通知您的情况下关闭问题,当其他人关闭 Issue、合并或对以下任何一项采取了措施,则您的待办事项将保持待处理状态:
* Issue
* 合并要求
每种任务只会产生一个待办事项,因此即使在一个问题中提到用户一百次也只会触发一个待办事项。
如果不需要做任何处理,您可以通过单击相应的**完成**按钮来手动将"待办事项"标记为已完成,它也将从您的"待办事项列表"中消失。
[![A To Do in the To-Do List](/docs/img/todos_todo_list_item.png)](/docs/img/todos_todo_list_item.png)
您还可以通过单击以下边栏中的" **标记为已完成**按钮将"待办事项" **标记为已完成**
* Issue
* 合并请求
[![Mark as done from the issuable sidebar](/docs/img/todos_mark_done_sidebar.png)](/docs/img/todos_mark_done_sidebar.png)
您可以通过单击**全部标记为已完成**按钮将所有待办事项**标记为已完成**
## 过滤待办事项[](#filtering-your-to-do-list "Permalink")
您可以在待办事项列表中使用以下四种过滤器:
| 过滤条件 | 描述 |
| --- | --- |
| 按项目 | 按项目筛选 |
| 按组织 | 按组织筛选 |
| 按作者 | 按触发待办事项的作者过滤 |
| 按类型 | 按 Issue,合并请求,设计 |
| 按动作 | 按触发待办事项的动作过滤 |
您还可以同时按多个过滤条件之一进行过滤,[上面描述了](#what-triggers-a-to-do)可能的操作,包括:
* 任何行动
* 被指派
* 被@
* 添加
* Pipelines
* 直接处理
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册