提交 b7666685 编写于 作者: M miykael

empty

上级 a0479f0b

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
无法预览此类型文件
# 关于CODEChina
欢迎使用CodeChina代码托管平台,本产品基于 Gitlab CE 版本 (13.2 stable) 开发并,目前版本提供了代码仓库管理、组织管理等基本功能,欢迎体验使用。
体验使用过程中如果遇到任何问题,请与我们联系。
## 联系我们
- [点此向 CODEChina 产品提交 issue](https://codechina.csdn.net/codechina/beta/~/issues)
- CODEChina微信群(1)
- CODEChina微信群(2)
- CODEChina观察员(1) Wechat / QQ
- CODEChina观察员(2) Wechat / QQ
\ No newline at end of file
# Summary
* [首页](README.md)
* [概览](docs/002.md)
* [组织](docs/033.md)
* [子组织](docs/046.md)
{
"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"
],
"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
# 帮助文档
*访问[codechina.csdn.net/docs,](codechina.csdn.net/docs)以获得优化的导航,可发现性和可读性。*
## 概览[](#概览 "Permalink")
欢迎您使用CODEChina,如果您是 Github 或 GitLab 的初级用户,我们建议您从查看本文档开始学习如何使用 CODEChina。如果您熟悉以上两个产品中的一个或多个,您可以直接开始 CODEChina 产品,在产品中我们也会为您设置帮助提示,您可以随时回来查看我们的产品文档。
| 基础入门 | 基本入门 |
| --- | --- |
| [**用户文件**](user/index.html)熟悉CODEChina 中的功能和概念. | [**管理员文件**](administration/index.html)管理员入门 |
| [**为 CODEChina 做贡献**](#为codechina开源做贡献)为CODEChina开源贡献力量! | [**是 Git 和 GitLab/GitHub 的新手吗?**](#刚开始使用git吗)我们有资源可以帮助您入门 |
| [**从另一个平台进入 CODEChina?**](#从另一个平台进入到codechina)请查阅我们的便捷指南 |  |
## 热门话题[](#热门话题 "Permalink")
以下是我们推荐的一些主题:
### 计划[](#计划 "Permalink")
无论您使用 Waterfall,敏捷还是会话开发,CODEChina 均可简化您的协作工作流程。
使用 CODEChina 灵活的项目管理工具可视化,确定优先级,协调和跟踪进度。
以下文档与 DevOps **计划**阶段有关:
| 计划主题 | 描述 |
| --- | --- |
| [Burndown Charts](user/project/milestones/burndown_charts.html) | 在特定的里程碑中观察项目的进度 |
| [讨论](user/discussions/index.html) | 问题,提交和合并请求中的线程,注释和可解决线程 |
| [截止日期](user/project/issues/due_dates.html) | 跟踪发行期限|
| [Epics](user/group/epics/index.html) | 跟踪共享主题的问题组|
| [问题](user/project/issues/index.html) ,包括[机密问题](user/project/issues/confidential_issues.html)[发布和合并请求模板](user/project/description_templates.html) ,和[移动的问题](user/project/issues/managing_issues.html#moving-issues) | 项目问题并限制对问题的访问,并创建用于提交新问题和合并请求的模板。 此外,在项目之间转移问题。|
| [标签](user/project/labels.html) | 分类问题或使用描述性标签合并请求|
| [里程碑](user/project/milestones/index.html) | 设置发布问题和合并请求的里程碑,并带有可选的截止日期|
| [看板](user/project/issue_board.html) | 在 Scrum 或看板上显示问题|
| [快捷方式](user/project/quick_actions.html) | 针对问题或合并请求的常见操作的快捷方式,而无需单击按钮或在WEB界面中使用下拉菜单。 |
| [关联 Issue](user/project/issues/related_issues.html) | 在问题之间建立关系. |
| [Roadmap](user/group/roadmap/index.html) | 可视化史诗般的时间表 |
| [时间跟踪](user/project/time_tracking.html) | 跟踪花费在问题和合并请求上的时间 |
| [代办事项](user/todos.html) | 通过在简单仪表板上显示的时间顺序列表,跟踪需要注意的工作。 |
[返回概览](#概览)
### 新建[](#新建 "Permalink")
将源代码整合到一个易于管理和控制的[分布式版本控制系统中](https://en.wikipedia.org/wiki/Distributed_version_control) ,而不会中断您的工作流程。
CODEChina 存储库随附分支工具和访问控制,可为项目和代码的协作提供可扩展的单一事实来源。
以下文档与 DevOps **新建**阶段有关:
#### 项目和组织[](#项目和组织 "Permalink")
| 创建主题-项目和组 | 描述 |
| --- | --- |
| [全局搜索](user/search/advanced_global_search.html) | 利用 Elasticsearch 在整个 CODEChina 实例上进行更快,更高级的代码搜索|
| [语法检索](user/search/advanced_search_syntax.html) | 使用高级查询获得更具针对性的搜索结果|
| [Contribution analytics](user/group/contribution_analytics/index.html) | 请参阅小组贡献者的详细统计信息|
| [创建](basics/create-project.html)[fork](basics/fork-project.html)项目,以及[导入项目](user/project/settings/import_export.html) [](user/project/settings/import_export.html) [实例之间](user/project/settings/import_export.html) | 创建,复制和移动项目 |
| [锁定文件](user/project/file_lock.html) | 锁定文件以避免合并冲突 |
| [组织](user/group/index.html) and [子组织](user/group/subgroups/index.html) | 分组组织您的项目 |
| [Issue 分析](user/group/issues_analytics/index.html) | 检查每月创建了多少个问题|
| [项目](user/project/index.html) ,包括[项目访问](public_access/public_access.html)[设置](user/project/settings/index.html) | 托管源代码,并控制项目的可见性和设置配置。|
| [Search through CODEChina](user/search/index.html) | 搜索问题,合并请求,项目,组和待办事项。|
| [Web IDE](user/project/web_ide/index.html) | 在 WebIDE 中编辑文件|
| [Wikis](user/project/wiki/index.html) | 使用内置的 Wiki 来管理您的文档|
[返回概览](#概览)
#### 代码仓库[](#代码仓库 "Permalink")
| 创建主题-代码仓库 | 描述 |
| --- | --- |
| [分支](user/project/repository/branches/index.html)[默认分支](user/project/repository/branches/index.html#default-branch) | 如何在 CODEChina 中使用分支 |
| [提交](user/project/repository/index.html#commits) and [署名提交](user/project/repository/gpg_signed_commits/index.html) | 处理提交,并使用 GPG 对您的提交进行签名。 |
| [创建分支](user/project/repository/web_editor.html#create-a-new-branch)[创建](user/project/repository/web_editor.html#create-a-file)[上传](user/project/repository/web_editor.html#upload-a-file)文件,并[创建目录](user/project/repository/web_editor.html#create-a-directory) | 创建分支,创建和上传文件以及创建目录。|
| [删除已合并的分支](user/project/repository/branches/index.html#delete-merged-branches) | 合并更改后的批量删除分支|
| [文件模板](user/project/repository/web_editor.html#template-dropdowns) | 通用文件的文件模板 |
| [文件](user/project/repository/index.html#files) | 文件管理 |
| [Jupyter Notebook 文件](user/project/repository/jupyter_notebooks/index.html#jupyter-notebook-files) | 对`.ipynb`文件的支持 |
| [保护分支](user/project/protected_branches.html) | 使用受保护的分支 |
| [推送规则](push_rules/push_rules.html) | 对项目推送的附加控制 |
| [代码仓库](user/project/repository/index.html) | 在网页中管理源代码仓库 |
| [镜像代码仓库](user/project/repository/repository_mirroring.html) | 推入或拉出外部的代码仓库 |
| [处理合并请求](user/project/repository/web_editor.html#tips) | 在提交时启动合并请求 |
[返回概览](#概览)
#### 合并请求[](#合并请求 "Permalink")
| 创建主题-合并请求 | 描述 |
| --- | --- |
| [在本地处理合并请求](user/project/merge_requests/reviewing_and_managing_merge_requests.html#checkout-merge-requests-locally) | 在本地处理合并请求的提示|
| [Cherry-pick](user/project/merge_requests/cherry_pick_changes.html) | 对更改进行 Cherry Pick |
| [Merge request thread resolution](user/discussions/index.html#moving-a-single-thread-to-a-new-issue) | 解析线程,将合并请求中的线程移至问题,并且仅在解决所有线程后才允许合并请求。 |
| [合并请求](user/project/merge_requests/index.html) | 合并请求管理 |
| [草稿合并请求](user/project/merge_requests/work_in_progress_merge_requests.html) | 防止合并草稿合并请求 |
[返回概览](#概览)
## 刚开始使用Git/CODEChina/GitLab/Github?[](#刚开始使用git吗 "Permalink")
使用新系统可能让您觉得难以入手,我们有以下文档可快速提升您的相关知识:
| 主题 | 描述 |
| --- | --- |
| [Basics guides](basics/README.html) | 开始在命令行和 CODEChina 上工作 |
| [Workflow overview]() | 利用最佳的工作流程增强您的工作流程 |
| [Markdown](user/markdown.html) | 高级格式化系统(Markdown) |
[返回概览](#概览)
### 账户管理[](#账户管理 "Permalink")
了解有关帐户管理的更多信息:
| 主题 | 描述 |
| --- | --- |
| [用户账号](user/profile/index.html) | 管理您的帐户 |
| [账号验证](topics/authentication/index.html) | 具有两因素身份验证的帐户安全性,设置您的 SSH 密钥,并部署密钥以安全地访问您的项目。 |
| [用户权限](user/permissions.html) | 了解项目中的每个角色可以做什么 |
[返回概览](#概览)
### Git 和 CODEChina[](#Git和CODEChina "Permalink")
了解有关使用 Git 以及将 Git 与 CODEChina 结合使用的更多信息:
| 主题 | 描述 |
| --- | --- |
| [Git](topics/git/index.html) | Git 入门,分支策略,Git LFS 和高级用法 |
| [Git cheat sheet](https://about.gitlab.com/images/press/git-cheat-sheet.pdf) | 下载描述最常用的 Git 操作的 PDF|
| [Work Flow](topics/flow.html) | 使用 Work Flow 策略探索 Git 的精华 |
[返回概览](#概览)
## 从另一个平台进入到 CODEChina?[](#从另一个平台进入到 codechina "Permalink")
如果您是从另一个平台进入 CODEChina,您会发现以下有用信息:
| 主题 | 描述 |
| --- | --- |
| [导入项目](user/project/import/index.html) | 从 GitHub,Bitbucket,GitLab.com,FogBugz 和 SVN 导入项目 |
| [从SVN迁移](user/project/import/svn.html) | 将 SVN 存储库转换为 Git 和 CODEChina |
[返回概览](#概览)
## 为CODEChina开源做贡献[](#为codehina开源做贡献 "Permalink")
CODEChina 是开源的,您可以通过以下方式为我们的开源社区做出贡献:
| 主题 | 描述 |
| --- | --- |
| [开发](development/README.html) | 如何在开发上做贡献 |
| [协议](legal/README.html) | 贡献者许可协议 |
| [文档](development/documentation/index.html) | 如何在文档上做贡献|
[返回概览](#概览)
\ No newline at end of file
# 组织[](#组织 "Permalink")
通过 CODEChina 的组织,您可以:
* 将相关项目组装在一起
* 授予成员一次访问多个项目的权限
~~有关 组的视频介绍,请参见[GitLab 大学:存储库,项目和组](https://www.youtube.com/watch?v=4TWfh1aKHHw)~~
组也可以嵌套在[子组织中](subgroups/index.html)
通过单击顶部导航中的**组织>您的组织**来找到您的组织。
[![GitLab Groups](img/53bcd8c2d2c69aceb7db6677802be6b1.png)](img/groups.png)
" **组织"**页面显示:
* 选择**您的组织**后, 将会显示**您**所属的全部组织(包括子组织)
* 选中" **浏览组织"**时将显示所有公开的组织列表
" **组织"**页面上的每个组都列出了:
* 它有多少个子组
* 它包含多少个项目
* 该组织有多少个成员,注意这里面不包括从父组织继承的成员
* 如果您具有足够的权限,还将显示组织设置的按钮
* 如果您是成员,也会看到退出该组的按钮
## 用户示例[](#用户示例 "Permalink")
您可以出于多种原因创建组织,例如:
* 通过在同一[命名空间](#命名空间)下组织相关项目并将成员添加到顶级组,可以以较少的步骤授予对多个项目和多个团队成员的访问权限。
* 通过创建小组并包括适当的成员,可以轻松地`@mention`所有团队中的问题并合并请求。
例如,您可以为公司成员创建一个[组织](subgroups/index.html) ,并为每个单独的团队创建一个[子组织](subgroups/index.html). 假设您创建了一个名为`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](../project/issues/index.html#issues-list),也可以查看组织中所有项目的[请求合并](../project/merge_requests/reviewing_and_managing_merge_requests.html#view-merge-requests-for-all-projects-in-a-group)
### 批量编辑Issue及合并请求[](#批量编辑Issue及合并请求 "Permalink")
有关详细信息,请参考[批量编辑Issue及合并请求](../group/bulk_editing/index.html)
## 新建一个组织[](#新建一个组织 "Permalink")
> 有关不允许用作组名的单词列表,请参见[保留名称](../reserved_names.html) .
通过以下方式,您可以创建一个新的组织:
* 在顶部菜单中,依次单击" **组织"**和" **您的组织"** ,然后单击绿色按钮" **新建组织"**
[![new group from groups page](img/7e5039b0d8fb74c5ea813e354f23493e.png)](img/new_group_from_groups.png)
* 或者,在顶部菜单中,展开`+`号并选择**新建组织**
[![new group from elsewhere](img/ee8ead7652026dd03a75e2551122350f.png)](img/new_group_from_other_pages.png)
添加以下信息:
[![new group information](img/ad2cdacdd36348cddf7d5c19d8940d5b.png)](img/create_new_group_info.png)
1. **组织名称**将自动填充 URL(自动填充不支持中文的组织名称)。(可选)您可以修改它,这是在组视图中显示的名称,该名称只能包含:
* 字母数字字符
* 中文
* 下划线
* 连接符`-`和点
* 空格
2. **组 URL**是将托管项目的名称空间. 该网址只能包含:
* 字母数字字符
* 下划线
* 连接符`-`和点(不能以连接符`-`开头或以点结尾)
3. (可选)可以为新建的组织添加一段简单介绍,以便其他用户了解该组织
4. (可选)可以为新建的组织上传一个头像
5. 选择新建的组织 [是否公开可见](../../public_access/public_access.html)
## 为组织添加一个用户[](#为组织添加一个用户 "Permalink")
将多个项目放在一个组织中的好处是,您可以通过一个操作就授予某个用户访问该组织中所有项目的权限。
**组织设置-组织成员设置**中将成员添加到组织,可以通过用户名或者注册邮箱来添加组织成员。
[![add members to group](img/ece990045e1a7ae1237b5f2912a2df3e.png)](img/add_new_members.png)
选择[权限级别](../permissions.html#permissions) ,然后添加新成员。您还可以设置该用户的到期日期。
假设一个有两个项目的组织:
***组织设置-组织成员设置**页面上,可以将新用户添加到组织中;
* 当将新用户设置为组织的**开发人员**成员时,他们将获得**开发人员**对该组内**所有项目的**访问权限。
如果要提高特定项目的现有用户的访问权限,请将其作为新成员再次添加到特定项目中,并为其添加相应的项目成员角色。
## 申请加入组织[](#申请加入组织 "Permalink")
作为组织所有者,您可以启用或禁用非组织成员请求访问组织的功能。该功能可以通过再**组织设置-常规设置-权限,LFS,2FS**中单击**允许用户请求访问(如果可见性是公开或内部的)**进行开启,该功能默认为启用状态。
如果组织启用了该设置,则非组织成员用户可以请求成为组织的成员。在您要加入的组织页中,单击组织名称后面的**申请权限**按钮即可。
[![Request access button](img/aa2dd1694d7e1573bbd49200ed1ccb04.png)](img/request_access_button.png)
申请访问权限后:
* 通过电子邮件将您的申请告知给组织的所有者(电子邮件将发送给最近活跃的组织所有者)
* 任何组织所有者都可以在组组织成员设置页面上批准或拒绝您的申请
[![Manage access requests](img/fd0991d7941fed77c4d82bd219ec713b.png)](img/access_requests_management.png)
如果您在申请权限被批准之前改变了主意,只需单击" **撤回访问请求"**按钮即可。
[![Withdraw access request button](img/a6d5e94df0d5d50038a0909603d69933.png)](img/withdraw_access_request_button.png)
## 变更组织的所有者[](#变更组织的所有者 "Permalink")
组织的所有关系是指至少有一个组织成员拥有组织的 [所有者权限](../permissions.html#group-members-permissions),一个组织至少需要一名所有者。
只有拥有一个所有者的组织可以变更组织的所有者。 可以通过以下方式变更组织唯一所有者:
1. 前往组织的 **组织设置-组织成员设置**选项卡;
2. 赋予其他成员**所有者**权限;
3. 让新的所有者删除您的**所有者**权限。
## 移除组织成员[](#移除组织成员 "Permalink")
只有[拥有所有者](../permissions.html#group-members-permissions)权限的[用户](../permissions.html#group-members-permissions)才能管理组织成员。
如果要移除的成员在该组中具有直接成员资格,则可以从该组织中移除该成员; 如果成员资格是从父组继承的,则该成员只能从父组中进行移除。
移除成员时,您可以决定是否取消已经指派给该成员的 Issue 及合并请求。
* **取消分配给已移除的成员的 Issue及合并请求**可以将已经分配给当前要移除用户的 Issue 及合并请求重新进行分配
* **保留Issue和合并请求的分配**可能对于接受公开贡献的组织很有帮助,用户可以不必是组织成员就可以为 Issue 及合并请求做出贡献
可以通过以下操作将成员从组织中移除:
1. 在一个组织中,进入 **组织设置-组织成员设置**
2. 找到要移除的成员,并点击**移除**按钮,这时会弹出 **移除成员** 的弹窗
3. (可选)选中 **取消分配给已移除的成员的 Issue及合并请求** 的复选框
4. 点击**移除成员**按钮
## 变更组织的默认保护分支[](#变更组织的默认保护分支 "Permalink")
默认情况下,每个组织都会继承全局级别的分支保护。
您可以通过以下操作为特定组织变更此项设置:
1. 打开组织的 **组织设置-常规设置**页面
2. 展开 **权限,LFS,2FA**部分
3.**默认分支保护**下拉列表中选择所需的选项
4. 点击 **保存修改**
## 在组织中新建项目[](#在组织中新建项目 "Permalink")
有两种方法可以在组织中新建项目:
* 选择一个组,单击**新建项目**按钮 。 然后,您可以继续[创建您的项目](../../basics/create-project.html) .
[![New project](img/ef67d77909a856277f9f2821fa0c18ea.png)](img/create_new_project_from_group.png)
* 在创建项目时,从下拉菜单中选择已经创建的组名称空间
[![Select group](img/674c1579957cca4a644bc90fb8fbb2f3.png)](img/select_group_dropdown.png)
### 项目创建权限[](#项目创建权限 "Permalink")
默认情况下, [开发人员和维护人员](../permissions.html#group-members-permissions)可以在一个组下创建项目。
可以通过以下操作为特定组更改此项设置:
1. 进入组织的**组织设置>常规设置**页面
2. 展开 **权限,LFS,2FA**部分
3.**允许创建项目**下拉列表中选择所需的选项
4. 点击 **保存修改**
## 查看组织详情[](#查看组织详情 "Permalink")
组织的 **详细信息**页面包含以下内容:
* 组织的基本信息和介绍
* 组织的项目
* 组织已存档的项目
* 组织的成员
## 将项目移到组织中[](#将项目移到组织中 "Permalink")
了解如何[将项目转移到组织中](../project/settings/index.html#transferring-an-existing-project-into-another-namespace) .
## 与组织共享一个项目[](#与组织共享一个项目 "Permalink")
您可以[与组织共享您的项目](../project/members/share_project_with_groups.html),并向所有组织成员立即授予对该项目的访问权限。
或者,您可以[锁定与组织共享功能](#锁定与组织共享功能)
## 与组织共享另一个组织[](#与组织共享另一个组织 "Permalink")
[与组织共享项目](#与组织共享一个项目)类似,您可以与一个组织共享另一个组织,以使组织成员可以直接访问共享的组织(注:这对于继承的成员无效)。
要将给定的组(例如"前端")与另一个组(例如"工程")共享:
1. 进入到"前端"组织页面,然后进入**组织设置-组织成员设置**页面
2. 单击 **邀请组织** 按钮
3. 选择您要共享的组织"工程",并设置访问权限
4. 点击 **邀请**
"工程"的所有成员将被添加到"前端"组织中。
## 转移组织[](#转移组织 "Permalink")
您可以通过以下方式转移组织:
* 将子组织转移到新的父组织
* 通过将顶级组织转移到所需的组织,并将其转换为子组织
* 通过将子组织转移到顶级组织,可以将一个子组织转换为组织
转移组织时,请注意:
* 更改组织的父组织可能会产生一些副作用,具体的请参阅[更改存储库路径时的重定向](../project/index.html#redirects-when-changing-repository-paths)
* 您只能将组织/子组织转移到您管理的组织/子组织中;
* 您必须手动更新本地存储库以指向新位置;
* 如果将要转移的父组织的公开可见性设置低于当前父组织,那么待转移组织机器项目的公开可见性将会与即将要转移到的父组织保持一致;
* 转移组织时,只有组织直接成员会被转移,从之前父组织集成的成员不会被转移。如果待转移组织的所有者是继承的身份成员,则该组织转移过去后将不会设有所有者,转移组的用户将会自动成为该组的所有者。
## 组织设置[](#组织设置 "Permalink")
创建组织后,在组织详情页您可以进入**组织设置**来对组织进行设置及管理:
[![group settings](img/b98f1bb6205ce5c692946b81e8c78003.png)](img/group_settings.png)
### 常规设置[](#常规设置 "Permalink")
除了编辑您在[创建组织](#新建一个组织)时预先设置的内容外,您还可以对该组织的其他内容进行设置。
#### 变更组织的路径[](#变更组织的路径 "Permalink")
变更组织的路径也可能会产生一些副作用,具体的请参考[重定向的行为](../project/index.html#redirects-when-changing-repository-paths)
如果您要腾出路径,以便其他组织或用户可以使用该路径,由于名称和路径都必须是唯一的,因此您在变更路径的同时也可能需要重命名该组织。
您可以通过以下操作更改组织的路径:
1. 进入到组织的**组织设置>常规设置**页面
2. 展开**高级**部分
3.**更改组织路径**下输入新的路径
4. 点击 **变更组织路径**
> **注意:**如果命名空间包含带有[Container Registry](../packages/container_registry/index.html)标记的项目,则无法重命名该空间,因为该项目无法移动。
> **提示:**如果要保留对原始名称空间的所有权并保护 URL 重定向,我们建议您新建一个群组并向其转移项目,而无需更改组织的路径或重命名用户名。
### 删除一个组织[](#删除一个组织 "Permalink")
您可以通过以下删除组织及其内容:
1. 打开 **组织设置>常规设置**页面
2. 展开**高级**部分
3. 在"删除组织"部分中,单击**删除组织**按钮
4. 根据提示的内容确认删除操作
这个操作将会导致:
* 删除组织,并且将后台作业排队以删除该组织中的所有项目(注:删除行为默认在删除确认后的7天后进行)
### 恢复已删除组织[](#恢复已删除组织 "Permalink")
您可以通过以下操作恢复已经标记为删除的组织:
1. 打开 **组织设置>常规设置**页面.
2. 展开**高级**部分.
3. 在"恢复组织"部分中,单击**恢复组织**按钮.
#### 锁定与组织共享功能[](#锁定与组织共享功能 "Permalink")
该功能可防止一个组织中的[项目与另一个组共享项目](../project/members/share_project_with_groups.html),以便对项目访问进行更严格的控制。
例如,假设您有两个不同的团队(A 组和 B 组)在一个项目中一起工作,并且要继承该组成员身份,您可以在 A 组和 B 组之间设置共享项目。**使用组锁共享**可以防止其中的任何项目群组与其他群组共享,从而确保只有合适的群组成员才能访问这些项目。
要启用此功能,请打开组织设置页面, 选择 **禁止与其他组织共享项目**并点击**保存修改**
[![Checkbox for share with group lock](img/788efc08015bf62f608d47f16b49b4d7.png)](img/share_with_group_lock.png)
#### 禁用电子邮件通知[](#禁用电子邮件通知 "Permalink")
您可以禁用与该组织相关的所有电子邮件通知,其中包括其子组织和项目:
您可以通过以下操作来启用该功能:
1. 进入**组织设置>常规设置**页面
2. 展开**权限,LFS,2FA**部分,然后选择**禁用电子邮件通知**
3. 点击 **保存修改**
#### 禁用群组提及[](#禁用群组提及 "Permalink")
该功能可以防止用户将群组添加到对话中,并且在任何人提及这些用户所属的组织时通知他们。
@功能的自动完成下拉列表中会相应地显示提及被禁用的组织,这对于具有大量用户的组织特别有用。
您可以通过以下操作来启用该功能:
1. 进入到**组织设置>常规设置**页面
2. 展开" **权限,LFS,2FA**部分,然后选择**禁用群组提及**
3. 点击 **保存更改**
### 高级设置[](#高级设置 "Permalink")
* **项目** :查看该组中的所有项目,将成员添加到每个项目,访问每个项目的设置,以及删除任何项目,所有操作均在同一屏幕上进行
* **Webhooks** :为您的组配置[webhooks](../project/integrations/webhooks.html)
\ No newline at end of file
# 子组织[](#子组织 "Permalink")
我们支持多达 20 个级别的子组织,也称为嵌套结构或层次结构。
通过子组织中您可以:
* **独立的子组织.** 由于每个组都有自己的可见性级别,因此您可以在同一保护范围内创建不同子组织以满足您不同的使用目的;
* **组织大型项目** 对于大型项目,子组织可能会更容易分隔源代码的权限
* **使管理人员和控制可见性变得更加容易** 根据人们的组织[成员身份](#成员身份)赋予他们不同的[权限](../../permissions.html#group-members-permissions)
有关组织和项目中允许的权限的更多信息,请参考[可见性级别](../../../development/permissions.html#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")
要在组织中创建子组织,您必须是该组织的所有者或维护者,具体取决于该组织的设置(默认情况下,允许所有者和维护者创建子组)。
有关权限的更多信息,请检查[权限表](../../permissions.html#group-members-permissions) 。有关不允许用作组名的单词列表,请参见[保留名称](../../reserved_names.html) .
如果用户明确地作为所有者(或维护者,如果启用了此设置)被添加到父组织中,则用户始终可以创建子组,即使管理员在其组织设置中禁用了组创建也是如此。
您可以通过以下操作创建一个子组织:
1. 在组织详情页中,展开右上角**新建项目**旁的下拉按钮,选择**新建子组织** ,然后单击 **新建子组**按钮;
[![Subgroups page](img/c3c27ff673c33bcd50004c2adb617d5f.png)](img/create_subgroup_button.png)
2. 像平常一样直接创建一个新组织。 需要注意的是,父组织名称空间在 **组路径**下是不可修改的,但 可见性级别可以与父组织不同;
[![Subgroups page](img/7fb24fed9f39dcdabb530523bcb8dc08.png)](img/create_new_group.png)
3. 单击**创建组织**按钮
## 成员身份[](#成员身份 "Permalink")
将成员添加到子组织时,它们将从父组织继承成员资格和权限级别。如果您是其父组织成员之一,则您可以被允许访问该组织下所有的子组织。
成员的组权限只能由所有者更改,您可以通过查看组织的**组织设置-组织成员设置**页面来确定成员是否从父组织继承了权限。
[![Group members page](img/e18ff80d06980688066f9ec9404bd2da.png)](img/group_members.png)
从上图我们可以了解到:
* 有 5 位成员可以访问第`four`组.
* User0 是一个 Reporter,已从组`four`的层次结构上方的组`one`继承了该权限
* User1 是一个开发者,已从组`one/two`的层次结构上方的组`two`继承了该权限
* User2 是一个开发者,已从组`one/two/three`的层次结构上方的组`three`继承了该权限
* 对于 User3,没有任何父组织的指示,因此它属于`four`
* 管理员是**所有**子组织的所有者和成员,与 User3 一样也没有任何父组织的指示
您可以使用右侧的下拉列表过滤此列表:
[![Group members filter](img/8215c374294289cd2bd24399439403fd.png)](img/group_members_filter_v12_6.png)
* **仅显示直接成员**仅显示 Administrator 和 User3,因为这是属于`four`组的唯一用户
* **仅显示继承的成员**将显示 User0,User1 和 User2,无论层次结构上方的哪个组都可以作为继承权限的来源
## 提及子组织[](#提及子组织 "Permalink")
在Issue,提交和合并请求中提及组织( `@group` )将通知该组的所有成员。当有了子组织后,如果您想拆分组织的结构,将有更精细的支持。提及方式与以前一样,您可以选择要通知的人群.
[![Mentioning subgroups](img/0d1089161431c5f21751458027d84535.png)](img/mention_subgroups.png)
# 项目[](#项目 "Permalink")
您可以创建用于托管代码库的项目,可以通过项目进行 Issue 管理,进行代码协作,并使用内置的 CI / CD 持续构建,测试和部署应用程序。
您可以设置您的项目为[公开](../../public_access/public_access.html)[私有](../../public_access/public_access.html),我们也不限制您创建的私有项目数量。
## 项目功能[](#项目功能 "Permalink")
创建项目时,您可以使用众多功能:
**代码仓库:**
* [Issue](issues/index.html) :与您的团队讨论问题内的实现
* [看板](issue_board.html) :组织工作流程并确定其优先级
* [代码仓库](repository/index.html) :将代码托管在完全集成的平台中
* [分支](repository/branches/index.html) :使用 Git 分支策略在代码上进行协作
* [受保护的分支机构](protected_branches.html) :防止协作者弄乱历史记录或在未经审查的情况下推送代码
* [受保护的标签](protected_tags.html) :控制谁有权创建标签,并防止意外更新或删除
* [储存库镜像](repository/repository_mirroring.html)
* [签署提交](gpg_signed_commits/index.html) :使用 GPG 签署您的提交
* [部署令牌](deploy_tokens/index.html) :管理基于项目的部署令牌,这些令牌允许永久访问存储库和 Container Registry.
* [Web IDE](web_ide/index.html)
**Release 及合并请求:**
* [Issue](issues/index.html) :与您的团队讨论问题内的实现
* [发行板](issue_board.html) :组织工作流程并确定其优先级
* [合并请求](merge_requests/index.html) :应用您的分支策略并获得团队的审查
* [合并请求批准](merge_requests/merge_request_approvals.html) :实施更改之前[请求批准](merge_requests/merge_request_approvals.html)
* [修复合并中的冲突](merge_requests/resolve_conflicts.html) :直接从网页中使用 Git diff 工具
* [审查应用程序](../../ci/review_apps/index.html) :按分支实时预览合并请求中建议的更改结果
* [标签](labels.html) :按标签整理问题并合并请求
* [时间跟踪](time_tracking.html) :跟踪估计在完成问题或合并请求上花费的时间和时间
* [里程碑](milestones/index.html) :朝着目标日期迈进
* [描述模板](description_templates.html) :为项目定义特定于上下文的模板,并为您的项目合并请求描述字段
* [斜杠命令(快速操作)](quick_actions.html) :针对问题或合并请求的常见操作的文本快捷方式
* [自动完成字符](autocomplete_characters.html) :自动完成对用户,组,问题,合并请求和其他 GitLab 元素的引用.
* [Web IDE](web_ide/index.html)
**亚搏体育 app CI / CD:**
* [GitLab CI / CD](../../ci/README.html) :GitLab 内置的[持续集成,交付和部署](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/)工具
* [容器注册表](../packages/container_registry/index.html) :开箱即用地构建和推送 Docker 映像
* [自动部署](../../topics/autodevops/stages.html#auto-deploy) :配置 GitLab CI / CD 以自动设置应用程序的部署
* [启用和禁用 GitLab CI / CD](../../ci/enable_or_disable_ci.html)
* [管道](../../ci/pipelines/index.html) :从 UI 配置和可视化 GitLab CI / CD 管道
* [计划的管道](../../ci/pipelines/schedules.html) :计划管道以在选定的时间开始
* [管道图](../../ci/pipelines/index.html#visualize-pipelines) :通过 UI 查看整个管道
* [作业工件](../../ci/pipelines/job_artifacts.html) :定义,浏览和下载作业工件
* [管道设置](../../ci/pipelines/settings.html) :设置 Git 策略(选择从作业中的 GitLab 提取存储库的默认方式),超时(定义可以运行作业的最长时间(以分钟为`.gitlab-ci.yml` )) `.gitlab-ci.yml`自定义路径,测试覆盖率分析,管道的可见性等
* [Kubernetes 集群集成](clusters/index.html) :将您的 GitLab 项目与 Kubernetes 集群连接
* [功能标志](../../operations/feature_flags.html) :功能标志允许您通过动态切换某些功能来以不同的方式发布项目
* [GitLab Pages](pages/index.html) :使用[GitLab Pages](pages/index.html)构建,测试和部署您的静态网站
**其他特性:**
* [Wiki](wiki/index.html) :在集成的 Wiki 中记录您的 GitLab 项目.
* [片段](../snippets.html) :存储,共享和协作代码片段.
* [价值流分析](cycle_analytics.html) :查看您的开发生命周期.
* [见解](insights/index.html) :配置对您的项目至关重要的见解.
* [安全仪表板](security_dashboard.html) :安全仪表板.
* [语法突出显示](highlighting.html) :一种自定义代码块的替代方法,它替代了 GitLab 的默认语言选择.
* [徽章](badges.html) :项目概述的徽章.
* [发行版](releases/index.html) :一种跟踪项目中可交付成果的方式,可作为源,构建输出,其他元数据和与代码的发行版本相关的其他工件的快照.
* [Conan 软件包](../packages/conan_repository/index.html) :您在 GitLab 中的私人 Conan 存储库.
* [Maven 软件包](../packages/maven_repository/index.html) :您在 GitLab 中的私有 Maven 存储库.
* [NPM 软件包](../packages/npm_registry/index.html) :您在 GitLab 中的私有 NPM 软件包注册表.
* [代码所有者](code_owners.html) :为某些文件指定代码所有者
* [许可证合规性](../compliance/license_compliance/index.html) :批准和拒绝项目的许可证.
* [依赖项列表](../application_security/dependency_list/index.html) :查看项目依赖项.
* [要求](requirements/index.html) :要求使您可以创建标准来检查产品.
* [静态站点编辑器](static_site_editor/index.html) :无需事先了解代码库或 Git 命令,即可在静态网站上快速编辑内容.
* [代码智能](code_intelligence.html) :代码导航功能.
### Project integrations[](#project-integrations "Permalink")
[将您的项目](integrations/index.html)与 Jira,Mattermost,Kubernetes,Slack 等进行[集成](integrations/index.html) .
## New project[](#new-project "Permalink")
了解如何在 GitLab 中[创建一个新项目](../../gitlab-basics/create-project.html) .
### Fork a project[](#fork-a-project "Permalink")
您可以[派生一个项目](repository/forking_workflow.html) ,以便:
* 通过分叉项目并创建从分支到上游项目的合并请求来进行代码协作
* 分叉一个示例项目以在其顶部工作
### Star a project[](#star-a-project "Permalink")
您可以为项目加注星标,以使其更容易找到您经常使用的项目. 项目拥有的明星数量可以表明其受欢迎程度.
为项目加注星标:
1. 转到要加注星标的项目的主页.
2. 在页面的右上角,点击**星标** .
要查看已加星标的项目,请执行以下操作:
1. 单击导航栏中的**项目** .
2. Click **已加星标的项目**.
3. GitLab 显示有关已加星标项目的信息,包括:
* 项目描述,包括名称,描述和图标
* 已为该项目加注星标的次数
* Number of times this project has been forked
* 打开的合并请求数
* 未解决问题的数量
### Explore projects[](#explore-projects "Permalink")
您可以探索 GitLab 上可用的其他流行项目. 探索项目:
1. 单击导航栏中的**项目** .
2. Click **探索项目**.
GitLab 显示一个项目列表,按上次更新日期排序. 要查看具有最多[星星的](#star-a-project)项目,请单击" **最多星星"** . 要查看过去一个月中评论数量最多的项目,请点击**趋势** .
## Project settings[](#project-settings "Permalink")
将项目的可见性级别和访问级别设置为各个页面,并执行诸如归档,重命名或传输项目的操作.
通读有关[项目设置](settings/index.html)的文档.
## Import or export a project[](#import-or-export-a-project "Permalink")
* [Import a project](import/index.html) from:
* [GitHub to GitLab](import/github.html)
* [Bitbucket to GitLab](import/bitbucket.html)
* [Gitea to GitLab](import/gitea.html)
* [FogBugz to GitLab](import/fogbugz.html)
* [Export a project from GitLab](settings/import_export.html#exporting-a-project-and-its-data)
* [Importing and exporting projects between GitLab instances](settings/import_export.html)
## Remove a project[](#remove-a-project "Permalink")
要删除项目,请首先导航到该项目的主页.
1. 导航至**设置>常规** .
2. 展开**高级**部分.
3. 向下滚动到" **删除项目"**部分.
4. Click **移除专案**
5. 通过输入所需的文本来确认此操作.
### Delayed removal[](#delayed-removal-premium "Permalink")
默认情况下,单击以删除项目后会延迟 7 天. 管理员可以在这段时间内恢复项目. [管理员可以更改](../admin_area/settings/visibility_and_access_controls.html#default-deletion-adjourned-period-premium-only)此延迟.
管理员可以查看所有待删除项目. 如果您是管理员,请转到顶部导航栏,单击" **项目">"您的项目"** ,然后选择"已**删除的项目"**选项卡. 管理员可以从此选项卡还原任何项目.
## CI/CD for external repositories[](#cicd-for-external-repositories-premium "Permalink")
您可以将存储库作为 CI / CD 项目连接,而不是将存储库直接导入到 GitLab.
通读[CI / CD 上有关外部存储库](../../ci/ci_cd_for_external_repos/index.html)的文档.
## Project members[](#project-members "Permalink")
了解如何[将成员添加到您的项目中](members/index.html) .
## Project activity[](#project-activity "Permalink")
要查看项目的活动,请导航至**项目概述>活动** . 在此处,您可以单击选项卡以查看**所有**活动,或查看按**Push 事件****Merge 事件****Issue 事件****Comment****Team****Wiki**过滤的**活动** .
### Leave a project[](#leave-a-project "Permalink")
当项目属于组时(在[组命名空间下](../group/index.html#namespaces) ), **离开项目**将仅显示在项目的仪表板上. 如果您选择退出项目,那么您将不再是项目成员,因此无法参与.
## Project’s landing page[](#projects-landing-page "Permalink")
项目的登录页面根据项目的可见性设置和用户权限显示不同的信息.
对于公共项目以及[有权查看该项目代码](../permissions.html#project-members-permissions)的内部和私有项目的成员:
* 显示[`README`文件或索引文件的](repository/#repository-readme-and-index-files)内容(如果有),然后显示项目存储库中的目录列表.
* 如果项目不包含这些文件中的任何一个,则访问者将看到存储库的文件和目录列表.
对于没有权限查看项目代码的用户:
* 显示维基主页(如果有).
* 显示项目中的问题列表.
## Redirects when changing repository paths[](#redirects-when-changing-repository-paths "Permalink")
当存储库路径更改时,从旧位置平稳过渡到新位置至关重要. GitLab 提供两种重定向:Web UI 和 Git 推/拉重定向.
根据情况,可能会有所不同.
When [renaming a user](../profile/index.html#changing-your-username), [changing a group path](../group/index.html#changing-a-groups-path) or [renaming a repository](settings/index.html#renaming-a-repository):
* 名称空间及其下的任何内容(例如项目)的现有 Web URL 将重定向到新 URL.
* 从 GitLab 10.3 开始,命名空间下项目的现有 Git 远程 URL 将重定向到新的远程 URL. 每次将其推/拉到更改位置的存储库时,都会显示一条警告消息,提示您更新遥控器,而不是拒绝操作. 这意味着在重命名后,任何自动化脚本或 Git 客户端将继续工作,从而使任何过渡都更加顺畅.
* The redirects will be available as long as the original path is not claimed by another group, user or project.
## Use your project as a Go package[](#use-your-project-as-a-go-package "Permalink")
任何项目都可以用作 Go 包. GitLab 会正确响应`go get``godoc.org`发现请求,包括[`go-import`](https://s0golang0org.icopy.site/cmd/go/)[`go-source`](https://github.com/golang/gddo/wiki/Source-Code-Links)元标记.
私有项目(包括子组中的项目)可以用作 Go 包,但可能需要进行配置才能正常工作. 无论身份验证或授权如何,GitLab 都会正确响应以`go get` *不在*子组中的项目的发现请求. 要使用子组中的私有项目作为 Go 包,必须进行[身份验证](#authenticate-go-requests) . 否则,GitLab 会将子组中私有项目的路径截断到前两个段,从而导致`go get`失败.
GitLab 实现了自己的 Go 代理. 此功能必须由管理员启用,并且需要其他配置. 请参阅[GitLab Go 代理](../packages/go_proxy/index.html) .
### Disable Go module features for private projects[](#disable-go-module-features-for-private-projects "Permalink")
In Go 1.12 and later, Go queries module proxies and checksum databases in the process of [fetching a module](../../development/go_guide/dependencies.html#fetching). This can be selectively disabled with `GOPRIVATE` (disable both), [`GONOPROXY`](../../development/go_guide/dependencies.html#proxies) (disable proxy queries), and [`GONOSUMDB`](../../development/go_guide/dependencies.html#fetching) (disable checksum queries).
`GOPRIVATE``GONOPROXY``GONOSUMDB`是 Go 模块和 Go 模块前缀的逗号分隔列表. 例如, `GOPRIVATE=gitlab.example.com/my/private/project`将禁用对该项目的查询,而`GOPRIVATE=gitlab.example.com`将禁用`GOPRIVATE=gitlab.example.com` *所有*项目的查询. 如果模块名称或其前缀出现在`GOPRIVATE``GONOPROXY` ,则 Go 不会查询模块代理. 如果模块名称或其前缀出现在`GONOPRIVATE``GONOSUMDB` ,则 Go 不会查询校验和数据库.
### Authenticate Go requests[](#authenticate-go-requests "Permalink")
要验证对 Go 私有项目的请求,请在密码字段中使用[`.netrc`文件](https://ec.haxx.se/usingcurl-netrc.html)[个人访问令牌](../profile/personal_access_tokens.html) . **仅当可以通过 HTTPS 访问您的 GitLab 实例时,此方法才有效.** `go`命令不会通过不安全的连接传输凭据. 这将验证 Go 直接发出的所有 HTTPS 请求,但不会验证通过 Git 发出的请求.
例如:
```
machine example.gitlab.com
login <gitlab_user_name>
password <personal_access_token>
```
**注意:**在 Windows 上,Go 读取`~/_netrc`而不是`~/.netrc` .
### Authenticate Git fetches[](#authenticate-git-fetches "Permalink")
如果无法从代理中获取模块,Go 将退回到使用 Git(对于 GitLab 项目). Git 将使用`.netrc`来认证请求. 另外,可以将 Git 配置为在请求 URL 中嵌入特定的凭据,或者使用 SSH 代替 HTTPS(因为 Go 始终使用 HTTPS 来获取 Git 存储库):
```
# embed credentials in any request to GitLab.com:
git config --global url."https://${user}:${personal_access_token}@gitlab.example.com".insteadOf "https://gitlab.example.com"
# use SSH instead of HTTPS:
git config --global url."git@gitlab.example.com".insteadOf "https://gitlab.example.com"
```
## Access project page with project ID[](#access-project-page-with-project-id "Permalink")
在 GitLab 11.8 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53671) .
要使用项目 ID 从 GitLab UI 快速访问项目,请在浏览器或其他访问项目的工具中访问`/projects/:id` URL.
## Project aliases[](#project-aliases-premium-only "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3264) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.1.
将存储库迁移到 GitLab 并被其他系统访问时,能够使用相同的名称访问它们非常有用,尤其是当它们很多时. 它降低了在大量系统中更改大量 Git URL 的风险.
manbetx 客户端打不开提供了功能来帮助这一点. 在 GitLab 中,通常使用名称空间和项目名称访问存储库. 也可以通过项目别名访问它们. 此功能仅在通过 SSH 的 Git 上可用.
项目别名只能通过 API 创建,并且只能由 GitLab 管理员创建. 有关更多详细信息,请遵循[Project Aliases API 文档](../../api/project_aliases.html) .
一旦为项目创建了别名(例如,项目`https://gitlab.com/gitlab-org/gitlab`的别名`gitlab` ),就可以使用别名(例如`git clone git@gitlab.com:gitlab.git` )来克隆存储库. `git clone git@gitlab.com:gitlab.git`而不是`git clone git@gitlab.com:gitlab-org/gitlab.git` ).
## Project APIs[](#project-apis "Permalink")
您的项目可以使用许多[API](../../api/README.html)
* [Badges](../../api/project_badges.html)
* [Clusters](../../api/project_clusters.html)
* [Threads](../../api/discussions.html)
* [General](../../api/projects.html)
* [Import/export](../../api/project_import_export.html)
* [Issue Board](../../api/boards.html)
* [Labels](../../api/labels.html)
* [Markdown](../../api/markdown.html)
* [Merge Requests](../../api/merge_requests.html)
* [Milestones](../../api/milestones.html)
* [Services](../../api/services.html)
* [Snippets](../../api/project_snippets.html)
* [Templates](../../api/project_templates.html)
* [Traffic](../../api/project_statistics.html)
* [Variables](../../api/project_level_variables.html)
* [Aliases](../../api/project_aliases.html)
\ No newline at end of file
此差异已折叠。
# Security Configuration
> 原文:[https://docs.gitlab.com/ee/user/application_security/configuration/](https://docs.gitlab.com/ee/user/application_security/configuration/)
* [Overview](#overview)
* [Limitations](#limitations)
# Security Configuration[](#security-configuration-ultimate "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20711) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.6.
## Overview[](#overview "Permalink")
安全配置页面显示每个安全功能的配置状态,可以通过项目的侧边栏导航来访问.
[![Screenshot of security configuration page](img/c5fbd1d44b70c599ae2cc8751ccfca14.png)](../img/security_configuration_page_v13_2.png)
该页面使用项目的最新默认分支[CI 管道](../../../ci/pipelines/index.html)来确定每个功能部件的配置状态. 如果管道中存在具有预期安全报告工件的作业,则认为该功能已配置.
**注意:**如果最新的管道使用了[Auto DevOps](../../../topics/autodevops/index.html) ,则默认情况下将配置所有安全功能.
## Limitations[](#limitations "Permalink")
尚无法使用配置页启用或禁用大多数功能. 但是,可以通过该页面上每个功能旁边的链接找到有关如何启用或禁用功能的说明.
如果项目没有现有的 CI 配置,则可以通过单击"管理"列下的"启用合并请求"按钮来启用 SAST 功能. 将来的工作会将其扩展到编辑*现有* CI 配置以及其他安全功能.
\ No newline at end of file
此差异已折叠。
此差异已折叠。
# Dependency List
> 原文:[https://docs.gitlab.com/ee/user/application_security/dependency_list/](https://docs.gitlab.com/ee/user/application_security/dependency_list/)
* [Requirements](#requirements)
* [Viewing dependencies](#viewing-dependencies)
* [Vulnerabilities](#vulnerabilities)
* [Licenses](#licenses)
* [Downloading the Dependency List](#downloading-the-dependency-list)
# Dependency List[](#dependency-list-ultimate "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10075) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0.
"依赖关系"列表使您可以查看项目的依赖关系以及有关它们的关键详细信息,包括已知漏洞. 要查看它,请导航至项目侧栏中的" **安全性和合规性">"依赖项列表"** . 该信息有时被称为软件物料清单或 SBoM / BOM.
## Requirements[](#requirements "Permalink")
1. 必须为您的项目配置" [依赖项扫描](../dependency_scanning/index.html) CI"作业.
2. 您的项目至少使用 Gemnasium 支持的一种[语言和包管理器](../dependency_scanning/index.html#supported-languages-and-package-managers) .
## Viewing dependencies[](#viewing-dependencies "Permalink")
[![Dependency List](img/e4fa52f4d522392d049bf73b1bb065a5.png)](img/dependency_list_v12_10.png)
依存关系显示以下信息:
| Field | Description |
| --- | --- |
| Component | 依赖项的名称和版本 |
| Packager | 打包程序用于安装依赖项 |
| Location | 指向项目中特定于包装程序的锁定文件的链接,该文件声明了依赖性 |
| License | 链接到依赖项的软件许可证 |
最初显示的依赖项是按其已知漏洞的严重性(如果有)进行排序的. 也可以按名称或安装它们的打包程序对它们进行排序.
### Vulnerabilities[](#vulnerabilities "Permalink")
如果依赖项具有已知漏洞,则可以通过单击依赖项名称旁边的箭头或指示存在多少已知漏洞的标志来查看它们. 对于每个漏洞,其严重性和描述将显示在其下方.
## Licenses[](#licenses "Permalink")
在 GitLab Ultimate 12.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/10536) .
如果配置了" [许可证合规性](../../compliance/license_compliance/index.html) CI"作业,则[发现的许可证](../../compliance/license_compliance/index.html#supported-languages-and-package-managers)将显示在此页面上.
## Downloading the Dependency List[](#downloading-the-dependency-list "Permalink")
您可以通过单击下载按钮以`JSON`格式下载项目的依赖关系及其详细信息的完整列表.
\ No newline at end of file
此差异已折叠。
# Secret Detection
> 原文:[https://docs.gitlab.com/ee/user/application_security/secret_detection/](https://docs.gitlab.com/ee/user/application_security/secret_detection/)
* [Overview](#overview)
* [Use cases](#use-cases)
* [Requirements](#requirements)
* [Configuration](#configuration)
* [Using the SAST Template](#using-the-sast-template)
* [Customizing settings](#customizing-settings)
* [Available variables](#available-variables)
* [Logging Level](#logging-level)
* [Full History Secret Scan](#full-history-secret-scan)
# Secret Detection[](#secret-detection-ultimate "Permalink")
[Introduced](https://about.gitlab.com/releases/2019/03/22/gitlab-11-9-released/#detect-secrets-and-credentials-in-the-repository) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.9.
## Overview[](#overview "Permalink")
开发应用程序时经常出现的问题是,开发人员可能会无意间将秘密和凭据提交到其远程存储库. 如果其他人可以访问源,或者项目是公开的,则敏感信息将被公开,恶意用户可以利用这些信息来访问诸如部署环境之类的资源.
GitLab 11.9 包含一个称为"秘密检测"的新检查. 它扫描存储库的内容以查找 API 密钥和其他不应存在的信息.
manbetx 客户端打不开显示识别的秘密作为 SAST 报告的一部分在几个地方:
* [Security Dashboard](../security_dashboard/)
* Pipelines’ **Security** tab
* 合并请求小部件中的报告
[![Secret Detection in merge request widget](img/56321b27a391110651e26fae3d93064e.png)](img/secret_detection_v13_2.png)
## Use cases[](#use-cases "Permalink")
* 检测密钥,密码和 API 令牌等机密信息的意外提交.
* 对存储库的完整历史记录执行一次或重复扫描以查找机密信息.
## Requirements[](#requirements "Permalink")
要运行检测的秘密工作,默认情况下,你需要 GitLab 亚军与[`docker`](https://docs.gitlab.com/runner/executors/docker.html)[`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html)执行. 如果您在 GitLab.com 上使用共享的 Runners,则默认启用该功能.
**注意:**目前我们的秘密检测作业需要 Linux 容器类型. Windows 容器尚不支持.**注意:**如果使用自己的 Runners,请确保安装的 Docker 版本**不是** `19.03.0` . 有关详细[信息](../sast#error-response-from-daemon-error-processing-tar-file-docker-tar-relocation-error) ,请参见[故障排除信息](../sast#error-response-from-daemon-error-processing-tar-file-docker-tar-relocation-error) .
## Configuration[](#configuration "Permalink")
**注意:**在 GitLab 13.1 中,秘密检测被拆分为自己的 CI / CD 模板.
秘密检测是在`secret-detection`作业期间由[特定的分析器](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Security/Secret-Detection.gitlab-ci.yml)执行的. 无论您的应用程序使用哪种编程语言,它都可以运行.
秘密检测分析器包括[Gitleaks](https://github.com/zricethezav/gitleaks)[TruffleHog](https://github.com/dxa4481/truffleHog)检查.
***Note:** The Secret Detection analyzer will ignore "Password in URL" vulnerabilities if the password begins with a dollar sign ( `$` ) as this likely indicates the password being used is an environment variable. **注意:**如果密码以美元符号( `$` )开头,则秘密检测分析器将忽略" URL 中的密码"漏洞,因为这很可能表明所使用的密码是环境变量. For example, `https://username:$password@example.com/path/to/repo` won't be detected, whereas `https://username:password@example.com/path/to/repo` would be detected. 例如,将不会检测到`https://username:$password@example.com/path/to/repo` ,而将检测到`https://username:password@example.com/path/to/repo` .***注意:**如果您使用的是[Auto DevOps](../../../topics/autodevops/index.html)提供的[自动](../../../topics/autodevops/index.html) [秘密检测,](../../../topics/autodevops/stages.html#auto-secret-detection-ultimate)则不必按照本节中的说明手动配置秘密检测.
要为 GitLab 13.1 和更高版本启用 Secret Detection,您必须包括`Secret-Detection.gitlab-ci.yml`模板,该模板作为 GitLab 安装的一部分提供. 对于 11.9 之前的 GitLab 版本,您可以复制和使用该模板中定义的作业.
将以下内容添加到您的`.gitlab-ci.yml`文件中:
```
include:
- template: Secret-Detection.gitlab-ci.yml
```
包含的模板在 CI / CD 管道中创建"秘密检测"作业,并扫描项目的源代码中的秘密.
结果将保存为" [秘密检测"报告工件](../../../ci/pipelines/job_artifacts.html#artifactsreportssecret_detection-ultimate) ,您以后可以下载和分析该[工件](../../../ci/pipelines/job_artifacts.html#artifactsreportssecret_detection-ultimate) . 由于实施限制,我们始终采用最新的秘密检测工件.
### Using the SAST Template[](#using-the-sast-template "Permalink")
在 GitLab 13.1 之前,秘密检测是[SAST 配置的](../sast#configuration)一部分. 如果您已经在 GitLab 13.1 之前为您的应用配置了启用 SAST,则无需手动配置它.
**计划的弃用:**在以后的 GitLab 版本中,将不建议使用 SAST 模板配置秘密检测. 请开始使用`Secret-Detection.gitlab-ci.yml`以防止将来出现问题. 我们制作了一个[视频,指导您完成过渡](https://www.youtube.com/watch?v=W2tjcQreDwQ)到此新模板的过程.观看视频: [历史秘密扫描演练](https://www.youtube.com/watch?v=W2tjcQreDwQ) .
<figure class="video-container"><iframe src="https://www.youtube.com/embed/W2tjcQreDwQ" frameborder="0" allowfullscreen=""></iframe></figure>
使用 SAST 模板时,秘密检测由[特定分析器](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml#L180)`sast`作业期间执行. 它的运行与应用程序的编程语言无关,并且您无需更改 CI / CD 配置文件即可启用它. 结果可在 SAST 报告中获得.
### Customizing settings[](#customizing-settings "Permalink")
可以使用`.gitlab-ci.yml`[`variables`](../../../ci/yaml/README.html#variables)参数通过[环境变量](#available-variables)更改秘密检测扫描设置.
要覆盖作业定义(例如,更改`variables``dependencies`类的属性),请声明与要覆盖的 SAST 作业同名的作业. 将此新作业放置在包含模板之后,并在其下指定其他任何键.
在下面的示例中,我们包括"秘密检测"模板,同时使用`SECRET_DETECTION_HISTORIC_SCAN`变量将`secret_detection`作业覆盖为`true`
```
include:
- template: Secret-Detection.gitlab-ci.yml
secret_detection:
variables:
SECRET_DETECTION_HISTORIC_SCAN: "true"
```
因为模板是[](../../../ci/yaml/README.html#include)管道配置[之前进行评估](../../../ci/yaml/README.html#include)的,所以最后提到的变量优先.
**弃用:**从 GitLab 13.0 开始,不再支持[`only`和`except`](../../../ci/yaml/README.html#onlyexcept-basic)的使用. 覆盖模板时,必须使用[`rules`](../../../ci/yaml/README.html#rules) .
#### Available variables[](#available-variables "Permalink")
可以通过定义可用变量来自定义秘密检测:
| 环境变量 | 默认值 | Description |
| --- | --- | --- |
| `SECRET_DETECTION_COMMIT_FROM` | - | 提交 Gitleaks 扫描始于. |
| `SECRET_DETECTION_COMMIT_TO` | - | Gitleaks 扫描的提交结束于. |
| `SECRET_DETECTION_HISTORIC_SCAN` | false | 标记以启用历史性的 Gitleaks 扫描. |
### Logging Level[](#logging-level "Permalink")
您可以通过设置`SECURE_LOG_LEVEL` env var 来控制日志的详细程度. 默认设置为`info` ,您可以将其设置为以下任意级别:
* `fatal`
* `error`
* `warn`
* `info`
* `debug`
## Full History Secret Scan[](#full-history-secret-scan "Permalink")
GitLab 12.11 引入了对扫描存储库完整历史记录的支持. 当您首次在存储库中启用秘密检测并且想要执行完整的秘密扫描时,此新功能特别有用. 对整个历史记录进行秘密扫描可能会花费很长时间,尤其是对于 Git 历史记录较长的大型存储库. 我们建议不要将此变量设置为常规作业定义的一部分.
可以设置一个新的配置变量( [`SECRET_DETECTION_HISTORIC_SCAN`](../sast/#vulnerability-filters) )来更改 GitLab 秘密检测扫描的行为,使其在存储库的整个 Git 历史记录上运行.
我们创建了一个[简短的视频演练,](https://youtu.be/wDtc_K00Y0A)展示了如何执行完整的历史秘密扫描.
观看视频: [历史秘密扫描演练](https://www.youtube.com/watch?v=wDtc_K00Y0A) .
<figure class="video-container"><iframe src="https://www.youtube.com/embed/wDtc_K00Y0A" frameborder="0" allowfullscreen=""></iframe></figure>
\ No newline at end of file
此差异已折叠。
# GitLab Security Dashboard
> 原文:[https://docs.gitlab.com/ee/user/application_security/security_dashboard/](https://docs.gitlab.com/ee/user/application_security/security_dashboard/)
* [Supported reports](#supported-reports)
* [Requirements](#requirements)
* [Pipeline Security](#pipeline-security)
* [Project Security Dashboard](#project-security-dashboard)
* [Group Security Dashboard](#group-security-dashboard)
* [Instance Security Dashboard](#instance-security-dashboard)
* [Adding projects to the dashboard](#adding-projects-to-the-dashboard)
* [Export vulnerabilities](#export-vulnerabilities)
* [Keeping the dashboards up to date](#keeping-the-dashboards-up-to-date)
* [Security scans using Auto DevOps](#security-scans-using-auto-devops)
* [Vulnerability list](#vulnerability-list)
# GitLab Security Dashboard[](#gitlab-security-dashboard-ultimate "Permalink")
在"安全仪表板"中,您可以概览您的组,项目和管道中的所有安全漏洞.
您还可以深入研究漏洞并获得更多信息,查看其来源,项目所在的文件以及各种元数据,以帮助您分析风险. 您也可以通过为漏洞创建问题或消除漏洞来对漏洞采取措施.
要从"安全仪表板"中受益,您必须首先配置其中一份[安全报告](../index.html) .
## Supported reports[](#supported-reports "Permalink")
安全仪表板支持以下报告:
* [Container Scanning](../container_scanning/index.html)
* [Dynamic Application Security Testing](../dast/index.html)
* [Dependency Scanning](../dependency_scanning/index.html)
* [Static Application Security Testing](../sast/index.html)
## Requirements[](#requirements "Permalink")
要使用实例,组,项目或管道安全性仪表板,请执行以下操作:
1. 组中的至少一个项目必须配置有至少一个[受支持的报告](#supported-reports) .
2. 配置的作业必须使用[新的`reports`语法](../../../ci/pipelines/job_artifacts.html#artifactsreports) .
3. 必须使用[GitLab Runner](https://docs.gitlab.com/runner/) 11.5 或更高版本. 如果您在 GitLab.com 上使用共享的 Runners,那么情况已经如此.
## Pipeline Security[](#pipeline-security "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13496) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.3.
在管道级别,"安全性"部分显示了运行管道所针对的项目分支中存在的漏洞.
访问页面以查看运行了任何[受支持报告的](#supported-reports)任何管道. 单击**安全性**选项卡以查看安全性发现.
[![Pipeline Security Dashboard](img/f0d8585fb8235b36b1464ed1d142a4c0.png)](img/pipeline_security_dashboard_v13_2.png)
**注意:**管道包含多个作业,包括 SAST 和 DAST 扫描. 如果任何作业由于任何原因无法完成,则安全信息中心将不会显示 SAST 扫描仪输出. 例如,如果 SAST 作业完成但 DAST 作业失败,则安全性仪表板将不会显示 SAST 结果. 分析器将在失败时输出[退出代码](../../../development/integrations/secure.html#exit-code) .
## Project Security Dashboard[](#project-security-dashboard "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6165) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.1.
在项目级别,安全性仪表板显示合并到项目的[默认分支中](../../project/repository/branches/index.html#default-branch)的漏洞. 通过导航到" **安全与合规性">"安全仪表板"**来访问它.
安全仪表板首先按严重性显示漏洞的总数(例如,严重,高,中,低). 在此下方,有一个表显示每个漏洞的状态,严重性和描述. 单击漏洞会将您带到其" [漏洞详细信息"](../vulnerabilities)页面,以查看有关该漏洞的更多信息.
您可以通过以下方式过滤漏洞:
* Status
* Severity
* 报告类型
您还可以消除表中的漏洞:
1. 选择要消除的每个漏洞的复选框.
2. 在出现的菜单中,选择**退出**的原因,然后点击**取消选中** .
[![Project Security Dashboard](img/2066156f84e498acec96cdfb63d2d2a4.png)](img/project_security_dashboard_v13_2.png)
## Group Security Dashboard[](#group-security-dashboard "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6709) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.5.
组安全仪表板概述了组及其子组中项目的默认分支中的漏洞. 通过导航至组的" **安全性">"安全性仪表板"**来访问它.
**注意:** "安全仪表板"仅显示在组中启用了[安全报告的](#supported-reports)项目.
[![Dashboard with action buttons and metrics](img/7b7c08f411e1307c05a834071bccb610.png)](img/group_security_dashboard_v13_2_noNav.png)
您可以通过以下方式过滤安全仪表板显示的漏洞:
* Status
* Severity
* 报告类型
* Project
表格列出了漏洞,并按严重性排序. 该表显示了每个漏洞的状态,严重性和描述. 单击漏洞会将您带到其" [漏洞详细信息"](../vulnerabilities)页面,以查看有关该漏洞的更多信息.
列表旁边是时间线图,该图显示了您的项目在不同时间点有多少个未解决的漏洞. 您可以在 30 天,60 天和 90 天之间进行过滤,默认值为 90 天.将鼠标悬停在图表上可获得有关特定时间未解决漏洞的更多详细信息.
时间线图表下方是项目列表,按发现的漏洞的严重程度进行分组和排序:
* F:1 个或更多"关键"
* D:1 个或多个"高"或"未知"
* C: 1 or more “medium”
* B:1 个或多个"低"
* 答:0 个漏洞
未配置漏洞测试的项目不会出现在列表中. 此外,也不包含已消除的漏洞.
阅读有关如何[与漏洞](../index.html#interacting-with-the-vulnerabilities)进行[交互的](../index.html#interacting-with-the-vulnerabilities)更多信息.
## Instance Security Dashboard[](#instance-security-dashboard "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6953) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.8.
在实例级别,安全仪表板显示您配置为显示在仪表板上的所有项目的默认分支中存在的漏洞. 它包括[组"安全仪表板"的](#group-security-dashboard)所有功能.
您可以从页面顶部的菜单栏中访问 Instance Security 仪表板. 在" **更多"下** ,选择" **安全性"** .
[![Instance Security Dashboard navigation link](img/25892ec4aa99429a91c30ac3395379e0.png)](img/instance_security_dashboard_link_v12_4.png)
### Adding projects to the dashboard[](#adding-projects-to-the-dashboard "Permalink")
要将项目添加到仪表板:
1. 单击"实例安全性仪表板"页面上的**编辑仪表板**按钮.
2. 使用" **搜索您的项目"**字段搜索并添加一个或多个项目.
3. 单击**添加项目**按钮.
添加后,安全仪表板将显示在所选项目的默认分支中发现的漏洞.
[![Instance Security Dashboard with projects](img/5653420f4acd0e8a49be80d5d413bd10.png)](img/instance_security_dashboard_with_projects_v13_2_sm.png)
## Export vulnerabilities[](#export-vulnerabilities "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213014) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.10.
您可以通过以下方式将所有漏洞导出为 CSV 格式: 位于**安全仪表板**右上方的" **导出"**按钮. 生成报告后,CSV 报告将下载到本地计算机. 该报告包含" **安全性仪表板"中**定义的项目的所有漏洞,因为过滤器不适用于导出功能.
**注意:**如果您的项目包含成千上万个漏洞,下载可能需要几分钟的时间才能开始. 下载完成之前,请不要关闭页面.
## Keeping the dashboards up to date[](#keeping-the-dashboards-up-to-date "Permalink")
安全仪表板在[默认分支](../../project/repository/branches/index.html#default-branch)上显示来自最新安全扫描结果的信息,这意味着每次更新分支时都会执行安全扫描.
如果不经常更新默认分支,则不经常运行扫描,并且随着发现新漏洞,安全仪表板上的信息可能会过时.
为确保安全仪表板上的信息得到定期更新,请[配置计划的管道](../../../ci/pipelines/schedules.html)以运行每日安全扫描. 不管默认分支的更新频率如何,这都会更新"安全性"仪表板上显示的信息.
这样,即使没有代码更改也不会创建报告.
## Security scans using Auto DevOps[](#security-scans-using-auto-devops "Permalink")
使用[Auto DevOps 时](../../../topics/autodevops/index.html) ,请使用[特殊的环境变量](../../../topics/autodevops/customize.html#environment-variables)来配置每日安全扫描.
## Vulnerability list[](#vulnerability-list "Permalink")
Each dashboard’s vulnerability list contains vulnerabilities from the latest scans that were merged into the default branch. Click any vulnerability in the table to see more information on that vulnerability. To create an issue associated with the vulnerability, click the **创建问题** button.
[![Create an issue for the vulnerability](img/a9880855e171e225a4b6c73ae1790538.png)](img/standalone_vulnerability_page_v13_1.png)
创建问题后,漏洞列表将包含该问题的链接和一个图标,其颜色指示该问题的状态(绿色代表未解决的问题,蓝色代表未解决的问题).
[![Display attached issues](img/f1e26381a4d60fa929a9285e04721656.png)](img/vulnerability_list_table_v13_1.png)
\ No newline at end of file
# Offline environments
> 原文:[https://docs.gitlab.com/ee/user/application_security/offline_deployments/](https://docs.gitlab.com/ee/user/application_security/offline_deployments/)
* [Defining offline environments](#defining-offline-environments)
* [Overview](#overview)
* [Container registries and package repositories](#container-registries-and-package-repositories)
* [Interacting with the vulnerabilities](#interacting-with-the-vulnerabilities)
* [Suggested Solutions for vulnerabilities](#suggested-solutions-for-vulnerabilities)
* [Scanner signature and rule updates](#scanner-signature-and-rule-updates)
* [Specific scanner instructions](#specific-scanner-instructions)
# Offline environments[](#offline-environments "Permalink")
未连接到互联网时,可以运行大多数的 GitLab 安全扫描程序.
本文档介绍了如何在脱机环境中操作安全类别(即扫描仪类型). 这些说明还适用于受保护,具有安全策略(例如,防火墙策略)或受其他限制而无法访问整个 Internet 的自我管理安装. GitLab 将这些环境称为*脱机环境* . 其他常用名称包括:
* 气隙环境
* 受限的连接环境
* 局域网(LAN)环境
* 内联网环境
这些环境具有阻止或限制 Internet 访问的物理障碍或安全策略(例如,防火墙). 这些说明是为物理上断开连接的网络而设计的,但在其他用例中也可以遵循这些说明.
## Defining offline environments[](#defining-offline-environments "Permalink")
在离线环境中,GitLab 实例可以是一个或多个服务器和服务,它们可以在本地网络上进行通信,但是对 Internet 的访问没有限制或受到非常严格的限制. 假设可以通过本地网络连接访问 GitLab 实例和支持基础结构(例如,私有 Maven 存储库)中的任何内容. 假定来自 Internet 的任何文件都必须通过物理媒体(USB 驱动器,硬盘驱动器,可写 DVD 等)进入.
## Overview[](#overview "Permalink")
GitLab 扫描仪通常会连接到互联网,以下载最新的签名,规则和补丁集. 通过使用本地网络上可用的资源,需要一些额外的步骤来配置工具以使其正常运行.
### Container registries and package repositories[](#container-registries-and-package-repositories "Permalink")
在较高级别,安全分析器以 Docker 映像的形式提供,并且可以利用各种软件包存储库. 当您在联网的 GitLab 安装上运行作业时,GitLab 会检查 GitLab.com 托管的容器注册表,以检查您是否具有这些 Docker 映像的最新版本,并可能连接到软件包存储库以安装必要的依赖项.
在离线环境中,必须禁用这些检查,以便不查询 GitLab.com. 由于 GitLab.com 注册表和存储库不可用,因此您必须更新每个扫描仪以引用不同的内部托管注册表,或提供对单个扫描仪图像的访问.
您还必须确保您的应用可以访问不在 GitLab.com 上托管的常见软件包存储库,例如 npm,yarn 或 Ruby gems. 可以通过临时连接到网络或通过镜像自己的脱机网络中的软件包来获取这些存储库中的软件包.
### Interacting with the vulnerabilities[](#interacting-with-the-vulnerabilities "Permalink")
一旦发现漏洞,便可以与其进行交互. 阅读有关如何[与漏洞](../index.html#interacting-with-the-vulnerabilities)进行[交互的](../index.html#interacting-with-the-vulnerabilities)更多信息.
请注意,在某些情况下,所报告的漏洞提供的元数据可能包含 UI 中公开的外部链接. 在脱机环境中可能无法访问这些链接.
### Suggested Solutions for vulnerabilities[](#suggested-solutions-for-vulnerabilities "Permalink")
[建议的解决方案](../index.html#solutions-for-vulnerabilities-auto-remediation)功能(自动修复)可用于"依赖关系扫描"和"容器扫描",但可能无法运行,具体取决于实例的配置. 当我们能够访问托管该依赖项或映像的最新版本的最新注册表服务时,我们只能建议解决方案,这些解决方案通常是已修补的最新版本.
### Scanner signature and rule updates[](#scanner-signature-and-rule-updates "Permalink")
连接到 Internet 时,某些扫描仪会参考公共数据库以获取最新的签名集和要检查的规则. 没有连接,这是不可能的. 因此,根据扫描仪的不同,您必须禁用这些自动更新检查,并使用它们随附的数据库并手动更新这些数据库,或者提供对网络中托管的自己的副本的访问权限.
## Specific scanner instructions[](#specific-scanner-instructions "Permalink")
每个单独的扫描仪可能与上述步骤略有不同. 您可以在以下每个页面上找到更多信息:
* [Container scanning offline directions](../container_scanning/index.html#running-container-scanning-in-an-offline-environment)
* [SAST offline directions](../sast/index.html#running-sast-in-an-offline-environment)
* [DAST offline directions](../dast/index.html#running-dast-in-an-offline-environment)
* [License Compliance offline directions](../../compliance/license_compliance/index.html#running-license-compliance-in-an-offline-environment)
* [Dependency Scanning offline directions](../dependency_scanning/index.html#running-dependency-scanning-in-an-offline-environment)
\ No newline at end of file
# Standalone Vulnerability pages
> 原文:[https://docs.gitlab.com/ee/user/application_security/vulnerabilities/](https://docs.gitlab.com/ee/user/application_security/vulnerabilities/)
* [Changing vulnerability status](#changing-vulnerability-status)
* [Creating an issue for a vulnerability](#creating-an-issue-for-a-vulnerability)
* [Automatic remediation solutions for vulnerabilities](#automatic-remediation-solutions-for-vulnerabilities)
* [Manually applying a suggested patch](#manually-applying-a-suggested-patch)
# Standalone Vulnerability pages[](#standalone-vulnerability-pages "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13561) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.0.
[安全仪表板](../security_dashboard/index.html#project-security-dashboard)中的每个安全漏洞都有其自己的独立页面.
[![Standalone vulnerability page](img/62d2b5c8435d31dff0a7fc689c288e8c.png)](img/standalone_vulnerability_page_v13_1.png)
在独立漏洞页面上,您可以通过几种不同方式与漏洞进行交互:
* [变化的脆弱性状态](#changing-vulnerability-status) -您可以将漏洞的状态更改为**检测****确认****驳回****解决** .
* [创建问题](#creating-an-issue-for-a-vulnerability) -创建一个新问题,其标题和说明已预先填充了漏洞报告中的信息. 默认情况下,此类问题是[机密的](../../project/issues/confidential_issues.html) .
* [解决方案](#automatic-remediation-solutions-for-vulnerabilities) -对于某些漏洞,提供了有关如何修复该漏洞的解决方案.
## Changing vulnerability status[](#changing-vulnerability-status "Permalink")
您可以使用" **状态"**下拉列表将漏洞的**状态**切换为以下值之一:
| Status | Description |
| --- | --- |
| Detected | 新发现漏洞的默认状态 |
| Confirmed | 用户已经看到此漏洞并确认它是真实的 |
| Dismissed | 用户已经看到此漏洞并将其消除 |
| Resolved | 该漏洞已修复,不再存在于代码库中 |
## Creating an issue for a vulnerability[](#creating-an-issue-for-a-vulnerability "Permalink")
您可以通过选择**创建问题**按钮来**创建**漏洞**问题** .
这会在漏洞来自的项目中创建一个[机密问题](../../project/issues/confidential_issues.html) ,并使用漏洞报告中的有用信息对其进行预填充. 创建问题后,GitLab 会将您重定向到问题页面,以便您可以编辑,分配或评论问题.
## Automatic remediation solutions for vulnerabilities[](#automatic-remediation-solutions-for-vulnerabilities "Permalink")
您可以通过应用 GitLab 为您自动生成的解决方案来修复某些漏洞. GitLab 支持以下扫描仪:
* [依赖项扫描](../dependency_scanning/index.html) :自动补丁创建仅适用于使用`yarn`管理的 Node.js 项目.
* [Container Scanning](../container_scanning/index.html).
When an automatic solution is available, the button in the header will show “Resolve with merge request”:
[![Resolve with Merge Request button](img/e661a6c6931c39f12f5b6833566b8947.png)](img/standalone_vulnerability_page_merge_request_button_v13_1.png)
选择该按钮将创建带有自动解决方案的合并请求.
### Manually applying a suggested patch[](#manually-applying-a-suggested-patch "Permalink")
要手动应用由 GitLab 生成的漏洞补丁,请选择"使用合并请求解决"按钮上的下拉箭头,然后选择"下载要解决的补丁"选项:
[![Resolve with Merge Request button dropdown](img/2310ec0a03905adc0774d21079604b57.png)](img/standalone_vulnerability_page_merge_request_button_dropdown_v13_1.png)
这会将按钮文本更改为"下载修补程序以解决". 单击它下载补丁:
[![Download patch button](img/4e980984ef171e4c624f56ebeb3277c7.png)](img/standalone_vulnerability_page_download_patch_button_v13_1.png)
\ No newline at end of file
此差异已折叠。
# Badges
> 原文:[https://docs.gitlab.com/ee/user/project/badges.html](https://docs.gitlab.com/ee/user/project/badges.html)
* [Project badges](#project-badges)
* [Group badges](#group-badges)
* [Placeholders](#placeholders)
* [API](#api)
# Badges[](#badges "Permalink")
在 GitLab 10.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41174) .
徽章是呈现有关您的项目的简要信息的统一方法. 它们由一个小图像以及该图像指向的 URL 组成. 徽章的示例可以是[管道状态](../../ci/pipelines/settings.html#pipeline-status-badge)[测试范围](../../ci/pipelines/settings.html#test-coverage-report-badge)或与项目维护者联系的方式.
[![Badges on Project overview page](img/0e0e78d03e98ec2ac04952defaba83ff.png)](img/project_overview_badges.png)
## Project badges[](#project-badges "Permalink")
维护者或所有者可以将徽章添加到项目中,然后在项目的概述页面上可见. 如果发现必须将相同的徽标添加到多个项目,则可能需要在[组级别](#group-badges)添加它们.
要将新徽章添加到项目:
1. 导航到项目的**设置>常规>徽章** .
2. 在"链接"下,输入徽章应指向的 URL,在"徽章图像 URL"下输入应显示的图像的 URL.
3. 通过单击**添加徽章**按钮来提交**徽章** .
将徽章添加到项目后,您可以在表单下方的列表中看到它. 您可以通过单击旁边的笔图标进行编辑,也可以通过单击垃圾箱图标将其删除.
与组关联的徽章只能在[组级别](#group-badges)上进行编辑或删除.
## Group badges[](#group-badges "Permalink")
可以将徽章添加到组中,然后将在该组下的每个项目的概述页面上看到它们. 在这种情况下,无法在项目级别上对其进行编辑或删除. 如果每个项目需要单独的徽章,请考虑将其添加到[项目级别](#project-badges)或使用[占位符](#placeholders) .
要将新徽章添加到组:
1. 导航到组的**"设置">"常规">"徽章"** .
2. 在"链接"下,输入徽章应指向的 URL,在"徽章图像 URL"下输入应显示的图像的 URL.
3. 通过单击**添加徽章**按钮来提交**徽章** .
将徽章添加到组后,您可以在表格下方的列表中看到它. 您可以通过单击徽章旁边的笔图标来编辑徽章,也可以通过单击垃圾箱图标来删除徽章.
与项目直接关联的徽章可以在[项目级别](#project-badges)上配置.
## Placeholders[](#placeholders "Permalink")
徽章指向的 URL 以及图像 URL 可以包含占位符,在显示徽章时将对其进行评估. 可以使用以下占位符:
* `%{project_path}` :包含父组的项目的路径
* `%{project_id}` :与项目关联的数据库 ID
* `%{default_branch}` :为项目存储库配置的默认分支名称
* `%{commit_sha}` :对项目存储库的默认分支的最新提交的 ID
**Note:** Placeholders allow badges to expose otherwise-private information, such as the default branch or commit SHA when the project is configured to have a private repository. This is by design, as badges are intended to be used publicly. Avoid using these placeholders if the information is sensitive.
## API[](#api "Permalink")
您还可以通过 GitLab API 配置徽章. 与设置一样,在[项目级别](../../api/project_badges.html)[组级别的](../../api/group_badges.html)徽章端点之间也有所区别.
\ No newline at end of file
# Bulk editing issues and merge requests at the project level
> 原文:[https://docs.gitlab.com/ee/user/project/bulk_editing.html](https://docs.gitlab.com/ee/user/project/bulk_editing.html)
* [Bulk edit issues at the project level](#bulk-edit-issues-at-the-project-level)
* [Bulk edit merge requests at the project level](#bulk-edit-merge-requests-at-the-project-level)
# Bulk editing issues and merge requests at the project level[](#bulk-editing-issues-and-merge-requests-at-the-project-level "Permalink")
**注意:**批量编辑问题,史诗和合并请求在**组级别**也可用. 有关更多详细信息,请参阅[在组级别批量编辑问题,史诗和合并请求](../group/bulk_editing/index.html) .
如果要跨多个问题更新属性或合并请求,则可以通过批量编辑它们,即一起编辑它们来完成.
[![Bulk editing](img/5b2694c5d35f9fdb42b43bb1f38ec29c.png)](img/bulk-editing_v13_2.png)
## Bulk edit issues at the project level[](#bulk-edit-issues-at-the-project-level "Permalink")
**注意:**您需要具有[Reporter 或更高](../permissions.html)级别的权限才能管理问题.
When bulk editing issues in a project, you can edit the following attributes:
* 状态(打开/关闭)
* Assignee
* Epic(在[GitLab Premium](https://about.gitlab.com/pricing/) 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/210470)
* Milestone
* Labels
* 健康状况(在[GitLab Ultimate](https://about.gitlab.com/pricing/) 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/218395)
* Subscriptions
要同时更新多个项目问题:
1. 在一个项目中,转到 **问题>列表** .
2. 点击**编辑问题** . 屏幕右侧的侧边栏显示,其中包含可编辑的字段.
3. 选中要编辑的每个问题旁边的复选框.
4. 从边栏中选择适当的字段及其值.
5. Click **全部更新**.
## Bulk edit merge requests at the project level[](#bulk-edit-merge-requests-at-the-project-level "Permalink")
**注意:**您需要[开发人员或更高](../permissions.html)级别的权限才能管理合并请求.
在项目中批量编辑合并请求时,可以编辑以下属性:
* 状态(打开/关闭)
* Assignee
* Milestone
* Labels
* Subscriptions
要同时更新多个项目合并请求:
1. 在一个项目中,转到 **合并请求** .
2. 单击**编辑合并请求** . 屏幕右侧的侧边栏显示,其中包含可编辑的字段.
3. 选中要编辑的每个合并请求旁边的复选框.
4. 从边栏中选择适当的字段及其值.
5. Click **全部更新**.
\ No newline at end of file
# Code Owners
> 原文:[https://docs.gitlab.com/ee/user/project/code_owners.html](https://docs.gitlab.com/ee/user/project/code_owners.html)
* [Introduction](#introduction)
* [Why is this useful?](#why-is-this-useful)
* [How to set up Code Owners](#how-to-set-up-code-owners)
* [Approvals by Code Owners](#approvals-by-code-owners)
* [The syntax of Code Owners files](#the-syntax-of-code-owners-files)
# Code Owners[](#code-owners-starter "Permalink")
版本历史
*[GitLab Starter](https://about.gitlab.com/pricing/) 11.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/6916) .
* [支持](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53182)在 GitLab Starter 12.1 中添加的[组名称空间](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53182) .
*[GitLab Premium](https://about.gitlab.com/pricing/) 11.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/4418)了用于合并请求批准的代码所有者.
## Introduction[](#introduction "Permalink")
在为项目做贡献时,通常很难找出谁应该审查或批准合并请求. 此外,如果您对特定文件或代码块有疑问,可能很难知道从谁那里找到答案.
GitLab 代码所有者是一项功能,用于定义谁拥有存储库中的特定文件或路径,从而允许其他用户了解谁对每个文件或路径负责.
## Why is this useful?[](#why-is-this-useful "Permalink")
代码所有者允许使用版本控制的单个真实文件源,该文件概述了拥有存储库中某些文件或路径的确切 GitLab 用户或组. 可以在合并请求批准过程中利用代码所有者,该过程可以简化为给定合并请求找到合适的审阅者和批准者的过程.
在大型组织或流行的开源项目中,如果您遇到的问题可能与代码审查或合并请求批准无关,则代码所有者还可以帮助您了解与谁联系.
## How to set up Code Owners[](#how-to-set-up-code-owners "Permalink")
您可以使用`CODEOWNERS`文件来指定负责存储库中某些文件的用户或[共享组](members/share_project_with_groups.html) .
您可以在三个位置选择并添加`CODEOWNERS`文件:
* 到存储库的根目录
*`.gitlab/`目录中
*`docs/`目录中
The `CODEOWNERS` file is scoped to a branch, which means that with the introduction of new files, the person adding the new content can specify themselves as a code owner, all before the new changes get merged to the default branch.
当一个文件与`CODEOWNERS`文件中的多个条目匹配时,与该文件匹配的上一个模式的用户将显示在给定文件的 Blob 页面上. 例如,您具有以下`CODEOWNERS`文件:
```
README.md @user1
# This line would also match the file README.md
*.md @user2
```
将显示`README.md`的用户为`@user2` .
## Approvals by Code Owners[](#approvals-by-code-owners "Permalink")
将"代码所有者"设置为项目后,可以将其配置为用于合并请求批准:
* As [merge request eligible approvers](merge_requests/merge_request_approvals.html#code-owners-as-eligible-approvers).
* 根据需要批准[分支机构](protected_branches.html#protected-branches-approval-by-code-owners-premium) .
**注意** :为了批准合并请求,需要开发人员或更高[权限](../permissions.html) .
设置后,"代码所有者"将显示在合并请求小部件中:
[![MR widget - Code Owners](img/6deba2d9890a294d17564cce39fcbaef.png)](img/code_owners_mr_widget_v12_4.png)
尽管`CODEOWNERS`文件除了可以用于合并请求[批准规则之外](merge_requests/merge_request_approvals.html#approval-rules) ,还可以用作合并请求批准的唯一驱动程序(不使用[批准规则](merge_requests/merge_request_approvals.html#approval-rules) ). 为此,请在上面指定的三个位置之一中创建文件,并将代码所有者设置为[受保护分支的](protected_branches.html#protected-branches-approval-by-code-owners-premium)必需批准者. 使用[代码所有者文件的语法](code_owners.html#the-syntax-of-code-owners-files)来指定实际所有者和精细权限.
结合使用"代码所有者"和" [受保护的分支机构批准",](protected_branches.html#protected-branches-approval-by-code-owners-premium)将防止在`CODEOWNERS`文件中未指定的任何用户推送对指定文件/路径的更改,即使其角色包含在" **允许推送"**列中. 这允许采用更具包容性的推送策略,因为管理员不必限制开发人员直接将其推送到受保护的分支,而可以将推送限制到某些需要代码所有者审查的文件.
## The syntax of Code Owners files[](#the-syntax-of-code-owners-files "Permalink")
可以使用与`.gitignore`文件中使用的相同类型的模式来指定文件,然后使用一个或多个用户的`@username`或电子邮件或应作为文件所有者的一个或多个组的`@name`进行指定. 必须将组添加为[项目的成员](members/index.html) ,否则它们将被忽略.
[GitLab 13.0](https://gitlab.com/gitlab-org/gitlab/-/issues/32432)开始,您现在可以将项目组层次结构中的组或子组指定为潜在的代码所有者.
例如,考虑给定项目的以下层次结构:
```
group >> sub-group >> sub-subgroup >> myproject >> file.md
```
以下任何组都可以被指定为代码所有者:
* `@group`
* `@group/sub-group`
* `@group/sub-group/sub-subgroup`
此外,使用" **成员"**工具邀请到项目的任何组也将被视为合格的代码所有者.
定义路径的顺序很重要:与给定路径匹配的最后一个模式将用于查找代码所有者.
`#`开头的行表示注释. 需要使用`\#`对其进行转义,以寻址其名称以`#`开头的文件.
Example `CODEOWNERS` file:
```
# This is an example of a code owners file
# lines starting with a `#` will be ignored.
# app/ @commented-rule
# We can specify a default match using wildcards:
* @default-codeowner
# We can also specify "multiple tab or space" separated codeowners:
* @multiple @code @owners
# Rules defined later in the file take precedence over the rules
# defined before.
# This will match all files for which the file name ends in `.rb`
*.rb @ruby-owner
# Files with a `#` can still be accessed by escaping the pound sign
\#file_with_pound.rb @owner-file-with-pound
# Multiple codeowners can be specified, separated by spaces or tabs
# In the following case the CODEOWNERS file from the root of the repo
# has 3 code owners (@multiple @code @owners)
CODEOWNERS @multiple @code @owners
# Both usernames or email addresses can be used to match
# users. Everything else will be ignored. For example this will
# specify `@legal` and a user with email `janedoe@gitlab.com` as the
# owner for the LICENSE file
LICENSE @legal this_does_not_match janedoe@gitlab.com
# Group names can be used to match groups and nested groups to specify
# them as owners for a file
README @group @group/with-nested/subgroup
# Ending a path in a `/` will specify the code owners for every file
# nested in that directory, on any level
/docs/ @all-docs
# Ending a path in `/*` will specify code owners for every file in
# that directory, but not nested deeper. This will match
# `docs/index.md` but not `docs/projects/index.md`
/docs/* @root-docs
# This will make a `lib` directory nested anywhere in the repository
# match
lib/ @lib-owner
# This will only match a `config` directory in the root of the
# repository
/config/ @config-owner
# If the path contains spaces, these need to be escaped like this:
path\ with\ spaces/ @space-owner
```
\ No newline at end of file
# Compliance
> 原文:[https://docs.gitlab.com/ee/user/compliance/](https://docs.gitlab.com/ee/user/compliance/)
# Compliance[](#compliance-ultimate "Permalink")
GitLab 提供的合规性工具可让您随时关注项目的各个方面. 可以使用以下合规工具:
* [Compliance Dashboard](compliance_dashboard/index.html) :查看组中所有项目的最近合并请求活动. 这使您可以查看合并请求是否被批准以及由谁批准.
* [许可证合规性](license_compliance/index.html) :在项目的依存关系中搜索其许可证. 这样,您可以确定项目依赖项的许可证是否与项目的许可证兼容.
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
> 原文:[https://docs.gitlab.com/ee/user/project/merge_requests/authorization_for_merge_requests.html](https://docs.gitlab.com/ee/user/project/merge_requests/authorization_for_merge_requests.html)
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册