diff --git a/.gitignore b/.gitignore index df6ce0e64a51e535cba022700cda40a374b96077..f0f02487426e8a2f83332c7dbe8bb947fc2d60d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ _book/ node_modules/ +_book.zip +.DS_Store diff --git a/HOME.md b/HOME.md new file mode 100644 index 0000000000000000000000000000000000000000..0e2427cb67211d2219e2e54ce2faae239f7b892c --- /dev/null +++ b/HOME.md @@ -0,0 +1,17 @@ +# 关于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 diff --git a/_sidebar.md b/_sidebar.md new file mode 100644 index 0000000000000000000000000000000000000000..45a41f94566c62a44a03eed0efc629b760dcf169 --- /dev/null +++ b/_sidebar.md @@ -0,0 +1,75 @@ +# 帮助文档 + +* [首页](HOME) +* [概览](概览) +* [组织](用户/组织) + * [子组织](用户/组织/子组织) +* [项目](用户/项目) + * [徽章](用户/项目/徽章) + * [批量编辑](用户/项目/批量编辑) + * [新建项目](入门/新建项目) + * [描述模板](用户/项目/描述模板) + * [文件查找](用户/项目/代码仓库/文件查找) + * [合并请求](用户/项目/合并请求) + * [允许协作](用户/项目/合并请求/允许协作) + * [创建合并请求](用户/项目/合并请求/创建合并请求) + * [Cherry-pick](用户/项目/合并请求/Cherry-pick) + * [快进合并](用户/项目/合并请求/快进合并) + * [解决冲突](用户/项目/合并请求/解决合并冲突) + * [还原](用户/项目/合并请求/还原) + * [评审及管理](用户/项目/合并请求/评审及管理) + * [Squash合并](用户/项目/合并请求/Squash合并) + * [合并请求版本](用户/项目/合并请求/合并请求版本) + * [草稿](用户/项目/合并请求/草稿) + * [项目成员](用户/项目/项目成员) + * [导入](用户/项目/迁移项目) + * [Github](用户/项目/导入/Github) + * [URL](用户/项目/导入/url导入) + * [推送选项](用户/项目/推送选项) + * [Releases](用户/项目/Releases) + * [代码仓库](用户/项目/代码仓库) + * [分支](用户/项目/代码仓库/分支) + * [Git属性](用户/项目/Git属性) + * [文件指责](用户/项目/代码仓库/文件指责) + * [文件历史记录](用户/项目/代码仓库/文件历史记录) + * [镜像仓库](用户/项目/代码仓库/镜像仓库) + * [保护分支](用户/项目/保护分支) + * [保护Tag](用户/项目/保护Tag) + * [减少仓库大小](用户/项目/代码仓库/减少仓库大小) + * [GPG签名提交](用户/项目/代码仓库/GPG签名提交) + * [文件编辑](用户/项目/代码仓库/文件编辑) + * [WebIDE](用户/项目/WebIDE) + * [项目设置](用户/项目/项目设置) + * [与群组共享项目](用户/项目/项目成员/与群组共享项目) + * [wiki](用户/项目/wiki) +* [Issues](用户/项目/issues) + * [机密Issue](用户/项目/issues/机密Issue) + * [关联Issue](用户/项目/issues/关联Issue) + * [截止日期](用户/项目/issues/截止日期) + * [看板](用户/项目/看板) + * [Issue操作](用户/项目/issues/操作Issue) + * [标签](用户/项目/标签) + * [管理Issue](用户/项目/issues/管理Issue) + * [里程碑](用户/项目/里程碑) + * [服务台](用户/项目/服务台) + * [Issue排序](用户/项目/issues/Issue排序) +* [用户](用户) + * [举报用户](用户/举报用户) + * [用户账号](用户/用户账号) + * [登录日志](用户/用户账号/登录日志) + * [用户权限](用户/用户权限) + * [个人访问令牌](用户/用户资料/个人访问令牌) + * [个人偏好](用户/用户资料/个人偏好) + * [探讨](用户/讨论) + * [SSH密钥](SSH) + * [快捷键](用户/快捷键) + * [Markdown](用户/Markdown) + * [电子邮件通知](用户/用户账号/电子邮件通知) + * [快速操作](用户/项目/快速操作) + * [自动填充](用户/项目/自动填充) + * [预留命名空间](用户/预留命名空间) + * [搜索](用户/搜索) + * [高级全局搜索](用户/高级全局搜索) + * [高级语法搜索](用户/高级语法搜索) + * [时间跟踪](用户/项目/时间跟踪) + * [待办事项](用户/待办事项) \ No newline at end of file diff --git a/book.json b/book.json new file mode 100644 index 0000000000000000000000000000000000000000..01d1ba5ee492af03d5fa1f3d0b2e0f14800cfe34 --- /dev/null +++ b/book.json @@ -0,0 +1,70 @@ +{ +"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 © CODECHINA 2020", + "modify_label": "该文件修订时间:", + "modify_format": "YYYY-MM-DD HH:mm:ss" + } + } +} \ No newline at end of file diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/.DS_Store differ diff --git a/docs/Cherry-pick.md b/docs/Cherry-pick.md new file mode 100644 index 0000000000000000000000000000000000000000..d96dcfc9d21b083d91d0c72f3658fb3ddd794429 --- /dev/null +++ b/docs/Cherry-pick.md @@ -0,0 +1,42 @@ +# Cherry-pick[](#cherry-pick "Permalink") + +GitLab 实现了 Git 的强大功能,通过在合并请求和提交详细信息中引入**Cherry-pick**按钮来[挑选任何提交](https://git-scm.com/docs/git-cherry-pick "Git Cherry-Pick 文档") . + +## Cherry-picking a merge request[](#cherry-picking-a-merge-request "Permalink") + +合并请求合并后,将可以使用**Cherry-pick**按钮来选择该合并请求引入的更改. + +[![Cherry-pick Merge Request](img/fe7d77556848be98a93c7b6516b0e6f8.png)](img/cherry_pick_changes_mr.png) + +单击该按钮后,将出现一个模态,显示一个[分支过滤器搜索框](../repository/branches/index.html#branch-filter-search-box) ,您可以在其中选择: + +* 将更改直接选择到所选分支中. +* 使用经过精心挑选的更改创建一个新的合并请求. + +### Cherry-pick tracking[](#cherry-pick-tracking "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/groups/gitlab-org/-/epics/2675) . + +当您选择一个合并提交时,GitLab 将向相关的合并请求线程输出系统注释,使新提交与现有合并请求交联. + +[![Cherry-pick tracking in Merge Request timeline](img/e20aec7ab33bbd61bae4825e6c9e35f1.png)](img/cherry_pick_mr_timeline_v12_9.png) + +每个部署的[关联合并请求列表](../../../api/deployments.html#list-of-merge-requests-associated-with-a-deployment)将包括精心挑选的合并提交. + +**注意:**我们仅跟踪从 GitLab(UI 和 API)执行的 cherry-pick. 计划在将来的发行版中支持[通过命令行跟踪精心挑选的提交](https://gitlab.com/gitlab-org/gitlab/-/issues/202215) . + +## Cherry-picking a commit[](#cherry-picking-a-commit "Permalink") + +您可以从提交详细信息页面中挑选一个提交: + +[![Cherry-pick commit](img/b4e821b8b83e29e837f01f4620e557b7.png)](img/cherry_pick_changes_commit.png) + +与选择合并请求类似,您可以选择将更改直接选择到目标分支中,也可以选择创建新的合并请求以选择更改. + +请注意,在进行樱桃挑选合并提交时,主线将始终是第一父级. 如果要使用其他主线,则需要从命令行执行. + +这是一个使用第二个父级作为主线来挑选合并提交的快速示例: + +``` +git cherry-pick -m 2 7a39eb0 +``` \ No newline at end of file diff --git "a/docs/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" "b/docs/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..f055d590cc0afc72d6585775e1c15dcd0fdfe857 --- /dev/null +++ "b/docs/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" @@ -0,0 +1,236 @@ +# GPG签名提交[](#GPG签名提交 "Permalink") + +版本历史 + +* 在 GitLab 9.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/9546) . +* 在 GitLab 10.1 中添加了子项支持. + +您可以使用 GPG 密钥对在 GitLab 存储库中进行的 Git 提交进行签名. 如果可以验证提交者的身份,则已签名的提交将标记为" **已**验证". 为了验证提交者的身份,GitLab 需要他们的公共 GPG 密钥. + +**注意:**术语 GPG 用于所有与 OpenPGP / PGP / GPG 相关的材料和实现. + +目前尚不支持通过 GPG 验证的标签. + +有关 GPG 的更多详细信息,请参见[进一步阅读](#further-reading)部分. + +## How GitLab handles GPG[](#how-gitlab-handles-gpg "Permalink") + +GitLab 使用其自己的密钥环来验证 GPG 签名. 它不访问任何公钥服务器. + +对于要由 GitLab 验证的提交: + +* 提交者必须具有 GPG 公钥/私钥对. +* 提交者的公钥必须已上传到其 GitLab 帐户. +* GPG 密钥中的一封电子邮件必须与提交者在 GitLab 中使用的**经过验证的**电子邮件地址匹配. +* 提交者的电子邮件地址必须与 GPG 密钥中验证的电子邮件地址匹配. + +## Generating a GPG key[](#generating-a-gpg-key "Permalink") + +如果您还没有 GPG 密钥,则以下步骤将帮助您入门: + +1. 为您的操作系统[安装 GPG](https://www.gnupg.org/download/index.html) . 如果您的操作系统具有`gpg2`安装,更换`gpg`与`gpg2`在下面的命令. +2. 使用以下命令生成私钥/公钥对,这将产生一系列问题: + + ``` + gpg --full-gen-key + ``` + + **注意:**在某些情况下,例如 Windows 和其他 macOS 版本上的 Gpg4win,此处的命令可能是`gpg --gen-key` . +3. 第一个问题是可以使用哪种算法. 选择所需的类型或按`Enter 键`选择默认类型(RSA 和 RSA): + + ``` + 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` : + + ``` + RSA keys may be between 1024 and 4096 bits long. + What keysize do you want? (2048) 4096 + Requested keysize is 4096 bits + ``` + +5. 指定密钥的有效期. 这是主观的,您可以使用默认值,该值永远不会过期: + + ``` + Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years + Key is valid for? (0) 0 + Key does not expire at all + ``` + +6. 通过输入`y`确认您给出的答案是正确的: + + ``` + Is this correct? (y/N) y + ``` + +7. 输入您的真实姓名,与此键关联的电子邮件地址(应与您在 GitLab 中使用的经过验证的电子邮件地址匹配)和可选注释(按`Enter`跳过): + + ``` + GnuPG needs to construct a user ID to identify your key. + + Real name: Mr. Robot + Email address: + Comment: + You selected this USER-ID: + "Mr. Robot " + + Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O + ``` + +8. 在询问时选择一个强密码,然后输入两次以确认. +9. 使用以下命令列出您刚刚创建的私密 GPG 密钥: + + ``` + gpg --list-secret-keys --keyid-format LONG + ``` + + 将``替换为您在上面输入的电子邮件地址. + +10. 复制以`sec`开头的 GPG 密钥 ID. 在以下示例中,即`30F2B65B9246B6CA` : + + ``` + sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] + D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA + uid [ultimate] Mr. Robot + ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] + ``` + +11. 导出该 ID 的公共密钥(替换上一步中的密钥 ID): + + ``` + gpg --armor --export 30F2B65B9246B6CA + ``` + +12. 最后,复制公钥并将其[添加到您的个人资料设置中](#adding-a-gpg-key-to-your-account) + +## Adding a GPG key to your account[](#adding-a-gpg-key-to-your-account "Permalink") + +**注意:**添加密钥后,就无法对其进行编辑,只能将其删除. 如果粘贴无效,则必须删除有问题的密钥并重新添加. + +您可以在个人资料的设置中添加 GPG 密钥: + +1. 点击右上角的头像,然后转到**"设置"** . + + [![Settings dropdown](img/5e2e81b44d67af322056491cf32bb8da.png)](../../../profile/img/profile_settings_dropdown.png) + +2. 导航至**GPG 密钥**标签,然后将您的*公共*密钥粘贴到"密钥"框中. + + [![Paste GPG public key](img/d04d999de9102632af46c867821c47c3.png)](img/profile_settings_gpg_keys_paste_pub.png) + +3. 最后,单击**添加键**将其添加到 GitLab. 您将能够看到其指纹,相应的电子邮件地址和创建日期. + + [![GPG key single page](img/8a56e678752a9bd9def98422dee92f3e.png)](img/profile_settings_gpg_keys_single_key.png) + +## Associating your GPG key with Git[](#associating-your-gpg-key-with-git "Permalink") + +[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,是时候告诉 Git 使用哪个密钥了. + +1. 使用以下命令列出您刚刚创建的私密 GPG 密钥: + + ``` + gpg --list-secret-keys --keyid-format LONG + ``` + + 将``替换为您在上面输入的电子邮件地址. + +2. 复制以`sec`开头的 GPG 密钥 ID. 在以下示例中,即`30F2B65B9246B6CA` : + + ``` + sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] + D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA + uid [ultimate] Mr. Robot + ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] + ``` + +3. 告诉 Git 使用该密钥对提交进行签名: + + ``` + 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 + ``` + +## Signing commits[](#signing-commits "Permalink") + +[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,您可以开始对提交进行签名: + +1. 像以前一样提交,唯一的区别是添加了`-S`标志: + + ``` + git commit -S -m "My commit msg" + ``` + +2. 询问时输入 GPG 密钥的密码. +3. 推送至 GitLab 并检查您的提交[是否已通过验证](#verifying-commits) . + +如果您不想在每次提交时都键入`-S`标志,则可以告诉 Git 自动签名您的提交: + +``` +git config --global commit.gpgsign true +``` + +## Verifying commits[](#verifying-commits "Permalink") + +1. 在项目或[合并请求中](../../merge_requests/index.html) ,导航到" **提交"**选项卡. 签名的提交将显示包含" Verified"或" Unverified"的徽章,具体取决于 GPG 签名的验证状态. + + [![Signed and unsigned commits](img/7d08a10bdee492162fdb554fb3033f0d.png)](img/project_signed_and_unsigned_commits.png) + +2. 通过单击 GPG 徽章,将显示签名的详细信息. + + [![Signed commit with verified signature](img/544adf1331ba8dc0c6391bf07ba6df8c.png)](img/project_signed_commit_verified_signature.png) + + [![Signed commit with verified signature](img/cc6935399d2235840119ad00eb778fc9.png)](img/project_signed_commit_unverified_signature.png) + +## Revoking a GPG key[](#revoking-a-gpg-key "Permalink") + +撤消密钥将**取消验证**已签名的提交. 使用此密钥验证的提交将变为未验证状态. 撤销此密钥后,将来的提交也将保持不变. 如果您的密钥已被盗用,则应使用此操作. + +撤销 GPG 密钥: + +1. 点击右上角的头像,然后转到**"设置"** . +2. 导航到**GPG 键**标签. +3. 单击您要删除的 GPG 键**旁边的撤消** . + +## Removing a GPG key[](#removing-a-gpg-key "Permalink") + +删除密钥**不会**取消**验证**已签名的提交. 使用此密钥验证的提交将保持验证状态. 删除此密钥后,只有未按下的提交才会保持未验证状态. 要取消验证已签名的提交,您需要从您的帐户中[撤销关联的 GPG 密钥](#revoking-a-gpg-key) . + +要从您的帐户中删除 GPG 密钥,请执行以下操作: + +1. 点击右上角的头像,然后转到**"设置"** . +2. 导航到**GPG 键**标签. +3. 单击您要删除的 GPG 密钥旁边的垃圾桶图标. + +## Rejecting commits that are not signed[](#rejecting-commits-that-are-not-signed-premium "Permalink") + +您可以将您的项目配置为拒绝不是通过[推送规则进行](../../../../push_rules/push_rules.html) GPG 签名的提交. + +## GPG signing API[](#gpg-signing-api "Permalink") + +了解如何[通过 API 通过提交获取 GPG 签名](../../../../api/commits.html#get-gpg-signature-of-a-commit) . + +## Further reading[](#further-reading "Permalink") + +有关 GPG 的更多详细信息,请参见: + +* [Git Tools - Signing Your Work](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work) +* [Managing OpenPGP Keys](https://riseup.net/en/security/message-security/openpgp/gpg-keys) +* [OpenPGP Best Practices](https://riseup.net/en/security/message-security/openpgp/best-practices) +* [Creating a new GPG key with subkeys](https://www.void.gr/kargig/blog/2013/12/02/creating-a-new-gpg-key-with-subkeys/) (advanced) \ No newline at end of file diff --git a/docs/Github.md b/docs/Github.md new file mode 100644 index 0000000000000000000000000000000000000000..7f81bfdca3caf41b6b0cc4733675ec7a4d9559d6 --- /dev/null +++ b/docs/Github.md @@ -0,0 +1,106 @@ +# 从Github导入[](#从Github导入 "Permalink") + +使用导入器,您可以将 GitHub 存储库导入 GitLab.com 或自管理的 GitLab 实例. + +## Overview[](#overview "Permalink") + +**注意:**这些说明适用于 GitLab.com 上的用户,但是如果您是自助 GitLab 实例的管理员,或者要从 GitHub Enterprise 导入,则必须启用[GitHub 集成](../../../integration/github.html) . GitHub 集成是从 GitHub Enterprise 导入的唯一方法. 如果您使用的是 GitLab.com,则可以使用[个人访问令牌](#using-a-github-token)导入 GitHub 存储库,但不建议使用此方法,因为该方法无法将所有用户活动(例如问题和请求请求)与匹配的 GitLab 用户相关联. 如果您是自我管理的 GitLab 实例的管理员,则还可以使用[GitHub Rake 任务](../../../administration/raketasks/github_import.html)从 GitHub 导入项目,而不受 Sidekiq worker 的限制. + +导入了项目的以下方面: + +* 仓库描述(GitLab.com&7.7+) +* Git 存储库数据(GitLab.com&7.7+) +* 问题(GitLab.com 和 7.7+) +* 拉取请求(GitLab.com&8.4+) +* Wiki 页面(GitLab.com&8.4+) +* 里程碑(GitLab.com&8.7+) +* 标签(GitLab.com 和 8.7+) +* 发行说明说明(GitLab.com 和 8.12+) +* 拉取请求评论评论(GitLab.com&10.2+) +* 定期发布和请求请求注释 + +保留对拉取请求和问题的引用(GitLab.com&8.7+),并且每个导入的存储库都保持可见性级别,除非该[可见性级别受到限制](../../../public_access/public_access.html#restricting-the-use-of-public-or-internal-projects) ,在这种情况下,它默认为默认项目可见性. + +## How it works[](#how-it-works "Permalink") + +导入问题和请求请求时,导入程序会尝试在 GitLab 实例的数据库中查找其 GitHub 作者和受让人(请注意,请求请求在 GitLab 中称为"合并请求"). + +For this association to succeed, each GitHub author and assignee in the repository must meet one of the following conditions prior to the import: + +* 以前使用 GitHub 图标登录到 GitLab 帐户. +* 有一个 GitHub 帐户,其[主要电子邮件地址](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)与其 GitLab 帐户的电子邮件地址匹配. + +如果在 GitLab 的数据库中未找到项目中引用的用户,则将项目创建者(通常是启动导入过程的用户)设置为作者/受让人,但是会添加关于该问题的注释,其中提及原始 GitHub 作者. + +如果不存在任何新的名称空间(组),或者如果采用了名称空间,则导入器会创建存储库,该存储库将在启动导入过程的用户的名称空间下导入. 命名空间/存储库名称也可以使用适当的权限进行编辑. + +进口商还将在与未完成拉取请求相关的项目的分支上导入分支. 这些分支将以类似于`GH-SHA-username/pull-request-number/fork-name/branch`的命名方案导入. 与 GitHub 存储库相比,这可能导致分支中的差异. + +有关更多技术细节,您可以参考[GitHub Importer](../../../development/github_importer.html "使用 GitHub 导入器")开发人员文档. + +有关导入过程的概述,请参阅[从 GitHub 迁移到 GitLab](https://youtu.be/VYOXuOg9tQI)的视频. + +## Import your GitHub repository into GitLab[](#import-your-github-repository-into-gitlab "Permalink") + +### Using the GitHub integration[](#using-the-github-integration "Permalink") + +在开始之前,请确保要映射到 GitLab 用户的所有 GitHub 用户都具有以下任一条件: + +* 使用 GitHub 图标登录的 GitLab 帐户-或- +* 一个 GitLab 帐户,其电子邮件地址与 GitHub 用户的[公共电子邮件地址](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)匹配 + +用户匹配尝试将按该顺序进行,并且如果两种方法均未识别到用户,则该活动将与执行导入的用户帐户相关联. + +**注意:**如果您使用的是自助式 GitLab 实例,或者要从 GitHub Enterprise 导入,则此过程要求您已配置[GitHub 集成](../../../integration/github.html) . + +1. 在顶部导航栏中,单击**+** ,然后选择**新建项目** . +2. 选择**导入项目**选项卡,然后选择**GitHub** . +3. 选择第一个按钮以**列出您的 GitHub 存储库** . 您将被重定向到[GitHub 上](https://github.com)的页面以授权 GitLab 应用程序. +4. 点击**授权 gitlabhq** . 您将被重定向回 GitLab 的 Import 页面,并列出所有 GitHub 存储库. +5. 继续[选择要导入的存储库](#selecting-which-repositories-to-import) . + +### Using a GitHub token[](#using-a-github-token "Permalink") + +**注意:**不建议使用个人访问令牌导入项目. 如果您是 GitLab.com 用户,则可以使用个人访问令牌从 GitHub 导入项目,但是该方法无法将所有用户活动(例如问题和请求请求)与匹配的 GitLab 用户关联. 如果您是自我管理的 GitLab 实例的管理员,或者要从 GitHub Enterprise 导入,则不能使用个人访问令牌. 建议所有用户使用[GitHub 集成方法(上述)](#using-the-github-integration) . 在" [如何工作"](#how-it-works)部分中了解更多信息. + +如果您不使用 GitHub 集成,则仍可以通过 GitHub 执行授权以授予 GitLab 访问您的存储库的权限: + +1. 转到[https://github.com/settings/tokens/new](https://github.com/settings/tokens/new) +2. 输入令牌描述. +3. 选择回购范围​​. +4. Click **生成令牌**. +5. 复制令牌哈希. +6. 返回到 GitLab 并将令牌提供给 GitHub 导入器. +7. 点击**列出您的 GitHub 存储库**按钮,并等待 GitLab 读取您的存储库信息. 完成后,将带您到导入器页面以选择要导入的存储库. + +### Selecting which repositories to import[](#selecting-which-repositories-to-import "Permalink") + +在授权访问 GitHub 存储库后,您将重定向到 GitHub 导入程序页面,并列出 GitHub 存储库. + +1. 默认情况下,建议的存储库名称空间与 GitHub 中存在的名称匹配,但是根据您的权限,您可以选择在继续导入任何名称之前编辑这些名称. +2. 选择任意数量的存储库旁边的**导入**按钮,或选择**导入所有存储库** . 此外,您可以按名称过滤项目. 如果应用了过滤器,则" **导入所有存储库"**仅导入匹配的存储库. +3. " **状态"**列显示每个存储库的导入状态. 您可以选择让页面保持打开状态,它将实时更新,也可以稍后返回. +4. 导入存储库后,单击其 GitLab 路径以打开其 GitLab URL. + +[![Github importer page](img/67f7d8117f3d6bf60fe4d5e03bca7b6e.png)](img/import_projects_from_github_importer_v12_3.png) + +## Mirroring and pipeline status sharing[](#mirroring-and-pipeline-status-sharing "Permalink") + +根据您的 GitLab 层,可以设置[项目镜像](../repository/repository_mirroring.html) ,以使导入的项目与其 GitHub 副本保持同步. + +此外,您可以配置 GitLab 以通过[GitHub Project Integration](../integrations/github.html)将管道状态更新发送回 GitHub. + +如果使用[CI / CD 作为外部存储库](../../../ci/ci_cd_for_external_repos/index.html)导入项目,则会自动配置以上两项. + +## Improving the speed of imports on self-managed instances[](#improving-the-speed-of-imports-on-self-managed-instances "Permalink") + +**注意:**必须具有对 GitLab 服务器的管理员访问权限. + +对于大型项目,可能需要一段时间才能导入所有数据. 为了减少必要的时间,您可以增加处理以下队列的 Sidekiq 工作程序的数量: + +* `github_importer` +* `github_importer_advance_stage` + +For an optimal experience, it’s recommended having at least 4 Sidekiq processes (each running a number of threads equal to the number of CPU cores) that *only* process these queues. It’s also recommended that these processes run on separate servers. For 4 servers with 8 cores this means you can import up to 32 objects (e.g., issues) in parallel. + +减少克隆存储库所花费的时间可以通过增加存储 Git 存储库(适用于您的 GitLab 实例)的磁盘的网络吞吐量,CPU 容量和磁盘性能(例如,使用高性能 SSD)来完成. 增加 Sidekiq 工作人员的数量*不会*减少克隆存储库所花费的时间. \ No newline at end of file diff --git "a/docs/Git\345\261\236\346\200\247.md" "b/docs/Git\345\261\236\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..3c5362e2b7074dc9d2c293c10358969a55b28148 --- /dev/null +++ "b/docs/Git\345\261\236\346\200\247.md" @@ -0,0 +1,14 @@ +# 自定义Git属性[](#自定义Git属性 "Permalink") + +GitLab 支持定义自定义[Git 属性,](https://git-scm.com/docs/gitattributes)例如将哪些文件视为二进制文件,以及将哪种语言用于语法突出显示差异. + +要定义这些属性, `.gitattributes`在存储库的根目录中创建一个名为`.gitattributes`的文件,并将其推送到项目的默认分支. + +## Encoding Requirements[](#encoding-requirements "Permalink") + +`.gitattributes`文件*必须*使用 UTF-8 编码,并且*不能*包含字节顺序标记. 如果使用其他编码,则文件的内容将被忽略. + +## Syntax Highlighting[](#syntax-highlighting "Permalink") + +`.gitattributes`文件可用于定义语法高亮显示文件和差异时使用的语言. 有关更多信息,请参见["语法突出显示"](highlighting.html) . + diff --git a/docs/Issues.md b/docs/Issues.md new file mode 100644 index 0000000000000000000000000000000000000000..971ea3838f55a86f907fbcab38c3b880a2fca926 --- /dev/null +++ b/docs/Issues.md @@ -0,0 +1,155 @@ +# Issues[](#issues "Permalink") + +问题是在 GitLab 中就想法和计划工作进行协作的基本介质. + +## Overview[](#overview "Permalink") + +GitLab 问题跟踪器是用于协作开发想法,解决问题和计划工作的高级工具. + +通过问题,可以在以下各项之间,在实施之前和期间共享和讨论提案: + +* 您和您的团队. +* 外部合作者. + +它们还可以用于各种其他目的,根据您的需求和工作流程进行定制. + +问题始终与特定项目相关联,但是如果您在一个小组中有多个项目,则还可以在小组级别集体查看所有问题. + +**常见的用例包括:** + +* 讨论新想法的实施 +* 跟踪任务和工作状态 +* 接受功能建议,问题,支持请求或错误报告 +* 详细说明新的代码实现 + +另请参见[始终从问题开始讨论](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/) . + +要了解 GitLab 战略营销部门如何将 GitLab 问题与[标签](../labels.html)和[问题板一起使用](../issue_board.html) ,请参阅有关[管理问题的承诺](https://www.youtube.com/watch?v=cuIHNintg1o&t=3)的视频. + +## Parts of an issue[](#parts-of-an-issue "Permalink") + +问题包含各种内容和元数据,从而在使用方式上具有很大的灵活性. 每个问题可以包含以下属性,尽管并非必须设置所有项目. + +| + +* Content + * Title + * 描述和任务 + * 评论和其他活动 +* People + * Author + * Assignee(s) +* State + * 状态(打开或关闭) + * 健康状况(正常,需要注意或有危险) + * Confidentiality + * 任务(完成与未完成) + + | + +* 规划和跟踪 + * 里程碑 + * 截止日期 + * 重量 + * 时间跟踪 + * 标签 + * 投票数 + * 反应表情 + * 关联问题 + * 分配史诗 + * 唯一的发行号和 URL + + | + +## Viewing and managing issues[](#viewing-and-managing-issues "Permalink") + +虽然您可以在[问题页面](#issue-page)上查看和管理问题的全部详细信息,但也可以一次使用" [问题列表"](#issues-list) ," [问题板"](#issue-boards) ,"问题参考"和" [Epic"](#epics-premium)处理多个问题 . + +针对问题的关键操作包括: + +* [Creating issues](managing_issues.html#create-a-new-issue) +* [Moving issues](managing_issues.html#moving-issues) +* [Closing issues](managing_issues.html#closing-issues) +* [Deleting issues](managing_issues.html#deleting-issues) + +### Issue page[](#issue-page "Permalink") + +[![Issue view](img/a15f0b2964d7094b019c5c33425ba75b.png)](img/issues_main_view.png) + +在问题的页面上,您可以查看问题的[所有方面,](issue_data_and_actions.html)如果有必要的[权限](../../permissions.html) ,可以对其进行修改. + +### Issues list[](#issues-list "Permalink") + +[![Project issues list view](img/854d722d9976d5b36956ddbe41ceae48.png)](img/project_issues_list_view.png) + +在"问题列表"上,可以从更高级别的组上下文中打开"问题列表",从而可以查看当前项目中的所有问题,也可以查看多个项目中的所有问题. 使用[搜索查询](../../search/index.html#filtering-issue-and-merge-request-lists)过滤问题列表,包括特定的元数据,例如标签,受让人,状态等. 从此视图,您还可以对显示的问题[进行批量](../bulk_editing.html)更改. + +有关更多信息,请参见[问题数据和操作](issue_data_and_actions.html)页面,以了解问题中所有字段和信息的摘要. + +您可以通过多种方式对问题列表进行排序,例如,通过问题创建日期,里程碑到期日期. 有关更多信息,请参见" [排序和排序问题列表"](sorting_issue_lists.html)页面. + +### Issue boards[](#issue-boards "Permalink") + +[![Issue board](img/fd79e7dae86040d6e1249793ae0b1502.png)](img/issue_board.png) + +[发行板](../issue_board.html)是看板,其栏目根据其标签或他们的受让人显示问题 . 它们提供了使用高度可定制的工作流来管理问题的灵活性. + +您可以在栏中重新排序问题. 如果将发行卡拖到另一列,则其关联的标签或受让人将更改以匹配新列的标签或受让人. 整个董事会也可以被筛选为仅包括某个里程碑或总体标签中的问题. + +### Design Management[](#design-management "Permalink") + +使用[Design Management](design_management.html) ,您可以将设计资产上载到问题并一起查看它们,以轻松地与团队共享和协作. + +### Epics[](#epics-premium "Permalink") + +[Epics](../../group/epics/index.html)通过跟踪跨项目和里程碑共享主题的问题组,使您可以更有效,更[轻松地](../../group/epics/index.html)管理项目组合. + +### Related issues[](#related-issues-starter "Permalink") + +您可以将两个问题标记为"相关",以便在查看一个问题时,另一个[问题](related_issues.html)始终列在" [相关问题"](related_issues.html)部分中. 这可以帮助显示重要的上下文,例如过去的工作,依赖项或重复项. + +### Crosslinking issues[](#crosslinking-issues "Permalink") + +您可以通过引用另一个问题中的问题来[交叉链接问题](crosslinking_issues.html) ,也可以通过包括其 URL 或 ID 来合并请求. 参考的问题在活动流中显示有关参考的消息,并带有指向其他问题或 MR 的链接. + +### Similar issues[](#similar-issues "Permalink") + +在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22866) . + +为了防止同一主题重复出现问题,GitLab 在创建新问题时会搜索相似的问题. + +在" **新问题"**页面中键入标题时,GitLab 会搜索用户在当前项目中有权访问的所有问题的标题和描述. 标题框下方最多显示五个类似问题(按最新更新排序). 请注意,此功能需要启用[GraphQL](../../../api/graphql/index.html) . + +[![Similar issues](img/95882a4976be6b95971ad0011fcd7617.png)](img/similar_issues.png) + +### Health status[](#health-status-ultimate "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/36427) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.10. + +为了帮助您跟踪问题的状态,您可以为每个问题分配一个状态,以标记按计划进行或需要注意以按时进行的工作: + +* **步入正轨** (green) +* **需要注意** (amber) +* **有一定风险** (red) + +[!["On track" health status on an issue](img/8308fbab7a41e24cad0bf6c358863ae3.png)](img/issue_health_status_dropdown_v12_10.png) + +然后,您可以在[Epic 树上](../../group/epics/index.html#issue-health-status-in-epic-tree-ultimate)查看问题状态. + +#### Disable issue health status[](#disable-issue-health-status "Permalink") + +此功能默认启用`:save_issuable_health_status`功能标志. 但是,在某些情况下,此功能与旧配置不兼容. 要在迁移配置时关闭该功能,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.disable(:save_issuable_health_status) +``` + +## Other Issue actions[](#other-issue-actions "Permalink") + +* [Create an issue from a template](../../project/description_templates.html#using-the-templates) +* [Set a due date](due_dates.html) +* [批量编辑问题](../bulk_editing.html) -从问题列表中选择多个问题,以批量更改其状态,受让人,里程碑或标签. +* [Import issues](csv_import.html) +* [Export issues](csv_export.html) +* [Issues API](../../../api/issues.html) +* 配置[外部问题跟踪器,](../../../integration/external-issue-tracker.html)例如 Jira,Redmine 或 Bugzilla. \ No newline at end of file diff --git a/docs/Markdown.md b/docs/Markdown.md new file mode 100644 index 0000000000000000000000000000000000000000..9f1a8e5c5476ccdb629074659dacd27a4abaccf8 --- /dev/null +++ b/docs/Markdown.md @@ -0,0 +1,1227 @@ +# Markdown[](#Markdown "Permalink") + +该 Markdown 指南**仅对 GitLab 的内部 Markdown 渲染系统的条目和文件有效** . 它是**无效**的[GitLab 文档,网站](https://s0docs0gitlab0com.icopy.site)或[GitLab 的主要网站](https://about.gitlab.com) ,因为它们都使用[Kramdown](https://kramdown.gettalong.org)作为他们的降价引擎. 文档网站使用扩展的 Kramdown 宝石[GitLab Kramdown](https://gitlab.com/gitlab-org/gitlab_kramdown) . 有关完整的 Kramdown 参考,请查阅《 [GitLab Kramdown 指南》](https://about.gitlab.com/handbook/markdown-guide/) . + +**注意:**我们建议您查看[GitLab 本身提供的](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md)此文档. + +## GitLab Flavored Markdown (GFM)[](#gitlab-flavored-markdown-gfm "Permalink") + +GitLab 使用" GitLab 风味降价"(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: + +* Comments +* Issues +* 合并要求 +* Milestones +* 代码段(代码段必须以`.md`扩展名命名) +* 维基页面 +* 仓库中的 Markdown 文档 +* Epics + +您还可以在 GitLab 中使用其他 RTF 文件. 您可能必须安装依赖项才能这样做. 请参阅[`gitlab-markup` gem 项目](https://gitlab.com/gitlab-org/gitlab-markup)以获取更多信息. + +### Transition from Redcarpet to 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 文档,这些文档是使用 GitLab 的 RedCarpet 版本的 Markdown 的细微差别编写的. 由于 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 的使用方式: + +| 标准减价 | 在 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])`` + +反引号内的颜色后面将带有颜色"碎片": + +``` +- `#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[](#diagrams-and-flowcharts "Permalink") + +可以使用[Mermaid](https://s0mermaidjs0github0io.icopy.site/)或[PlantUML](https://plantuml.com)从 GitLab 中的文本生成图表和流程图. + +#### Mermaid[](#mermaid "Permalink") + +在 GitLab 10.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15107) . + +访问[官方页面](https://s0mermaidjs0github0io.icopy.site/)以获取更多详细信息. 如果您不熟悉使用 Mermaid,或者需要帮助来确定 Mermaid 代码中的问题,则[Mermaid Live Editor](https://mermaid-js.github.io/mermaid-live-editor/)是一个有用的工具,可用于在 Mermaid 图中创建和解决问题. + +为了生成图表或流程图,您应该在`mermaid`块内编写文本: + +``` +​```mermaid graph TD; + A-->B; + A-->C; + B-->D; + C-->D; +``` +``` + +图 TD; A-> B; A-> C; B-> D; C-> D; + +子图也可以包括: + +``` +```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 +``` +``` + +图 TB SubGraph1-> SubGraph1Flow 子图" SubGraph 1 Flow" SubGraph1Flow(SubNode 1)SubGraph1Flow-Choice1-> DoChoice1 SubGraph1Flow-Choice2-> DoChoice2 结束子图" Main Graph" Node1 [Node 1]-> Node2 [ Node 2] Node2-> SubGraph1 [Jump to SubGraph1] SubGraph1-> FinalThing [Final Thing]结束 + +#### PlantUML[](#plantuml "Permalink") + +为了使 PlantUML 在 GitLab 中可用,GitLab 管理员需要首先启用它. 在[PlantUML&GitLab 中](../administration/integration/plantuml.html)了解更多[信息](../administration/integration/plantuml.html) . + +### 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: +``` + +有时候你想 ![](img/a5023ba03c96276e989dc4dbff1ca8dd.png) 大约添加一些 ![](img/bb7ff3b17ad66e05a64ee12def63524b.png) 给你 ![](img/49d46d08d1ca6c3cd3d0b0ef98472512.png) . 好吧,我们有礼物送给您: + +![](img/13b2b9b44dbf46de0243edc068ecab42.png)您可以在支持 GFM 的任何地方使用表情符号. ![](img/cff0e046ac8eca2d9fde8f13a3365d66.png) + +您可以使用它指出一个 ![](img/7710cb575c3aefd0769c3f6aadb6e879.png) 或警告 ![](img/773702223af81c9872bccd88d63ad3a5.png) 补丁. 如果有人真的改善了你 ![](img/17e23e08ff33b405e039adae1f73cb83.png) 代码,给他们发送一些 ![](img/fd7124974fcca5463d2ce7385bfb700e.png) . 人们会 ![](img/bab86c57be5bd24c1329a7de56df456a.png) 为此. + +如果您是新手,请不要 ![](img/e41f9ac1eea140d12bc83ea9312e71d0.png) . 您可以轻松加入表情符号 ![](img/d5171d012a8ff616032035f890d8dbd5.png) . 您需要做的只是查找受支持的代码之一. + +有关所有受支持的表情符号代码的列表,请查阅[表情符号备忘单](https://www.webfx.com/tools/emoji-cheat-sheet/) . ![](img/d0b9fcc8669d772a04d7d72ccb5a82cc.png) + +> **注意:**以上表情符号示例在本文档中使用了硬编码图像. 在 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) . + +首要事项是 Markdown 文档开头,内容之前的元数据. 静态站点生成器(例如[Jekyll](https://jekyllrb.com/docs/front-matter/) , [Hugo](https://s0gohugo0io.icopy.site/content-management/front-matter/)和许多其他应用程序)可以使用此数据. + +当您查看由 GitLab 渲染的 Markdown 文件时,任何前端问题都会按原样显示在文档顶部的框中,位于渲染的 HTML 内容之前. 要查看示例,可以在[GitLab 文档文件](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/README.md)的源版本和渲染版本之间切换. + +在 GitLab 中,仅在 Markdown 文件和 Wiki 页面中使用前题,而不在支持 Markdown 格式的其他地方使用. 它必须在文档的最顶部,并且必须在定界符之间,如下所述. + +支持以下定界符: + +* 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", +); +--- +``` + +### Inline 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[](#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`将在单独的行上呈现: + +``` +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 | 跨项目参考 | shortcut within same namespace | +| --- | --- | --- | --- | +| 特定使用者 | `@user_name` |   |   | +| 特定人群 | `@group_name` |   |   | +| 整个团队 | `@all` |   |   | +| project | `namespace/project>` |   |   | +| issue | `#123` | `namespace/project#123` | `project#123` | +| 合并要求 | `!123` | `namespace/project!123` | `project!123` | +| snippet | `$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)` |   |   | + +除此之外,还可以识别和格式化指向某些对象的链接. 这些示例包括: + +* 对问题的评论: `"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[](#task-lists "Permalink") + +> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#task-lists) . + +您可以在支持 Markdown 的任何位置添加任务列表,但是如果它们处于问题,合并请求或注释中,则只能"单击"以切换它们. 在其他地方,您必须手动编辑 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[](#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. +``` + +[![Preview of an auto-generated TOC in a Wiki](img/77707dedee5c3b669fd992a327698362.png)](img/markdown_toc_preview_v12_9.png) + +### Wiki-specific Markdown[](#wiki-specific-markdown "Permalink") + +以下示例显示了 Wiki 内部链接的行为. + +#### Wiki - direct page link[](#wiki---direct-page-link "Permalink") + +仅包含页面的子弹的链接将指向该页面, *位于 Wiki 的基本级别* . + +该代码段将链接到 Wiki 根目录下的`documentation`页面: + +``` +[Link to Documentation](documentation) +``` + +#### Wiki - direct file link[](#wiki---direct-file-link "Permalink") + +*相对于当前页面* ,带有文件扩展名的链接指向该文件. + +如果下面的代码段放在`/documentation/related`的页面上,它将链接到`/documentation/file.md` : + +``` +[Link to File](file.md) +``` + +#### Wiki - hierarchical link[](#wiki---hierarchical-link "Permalink") + +可以使用`./` , `../`来相对于当前 Wiki 页面构建链接. + +如果此代码段放在`/documentation/main`的页面上,它将链接到`/documentation/related` : + +``` +[Link to Related Page](./related) +``` + +如果此代码段放在`/documentation/related/content`的页面上,它将链接到`/documentation/main` : + +``` +[Link to Related Page](../main) +``` + +如果此代码段放在`/documentation/main`的页面上,它将链接到`/documentation/related.md` : + +``` +[Link to Related Page](./related.md) +``` + +如果此代码段放在`/documentation/related/content`的页面上,它将链接到`/documentation/main.md` : + +``` +[Link to Related Page](../main.md) +``` + +#### Wiki - root link[](#wiki---root-link "Permalink") + +以`/`开头的链接是相对于 Wiki 根目录的. + +该代码段链接到`/documentation` : + +``` +[Link to Related Page](/documentation) +``` + +该代码段链接到`/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 中嵌入度量标准](../user/project/integrations/prometheus.html#embedding-metric-charts-within-gitlab-flavored-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. +``` + +> 块引用非常容易模拟回复文本. 该行是同一报价的一部分. + +报价中断. + +> 这是一条很长的行,当它换行时仍会被正确引用. 哦,男孩,让我们继续写作,以确保它足够长,可以实际包裹所有人. 哦,您可以*将* **Markdown**放入 blockquote 中. + +#### Multiline blockquote[](#multiline-blockquote "Permalink") + +> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#multiline-blockquote) . + +GFM 还支持`>>>`围起来的多行块引用,从而扩展了标准的 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. +``` + +Inline `code` has `back-ticks around` it. + +* * * + +同样,整个代码块可以用三个反引号( ````` ),三个波浪号( `~~~` )或缩进 4 个或更多的空格来围起来,以实现较大代码体的相似效果. + +``` +```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[](#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) . 语法突出显示仅在代码块中受支持,因此在内联时无法突出显示代码. + +代码块由带有三个反引号( ````` )或三个波浪号( `~~~` )的行围起来,并在第一个围栏的末尾标识了语言: + +``` +​```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 tag. +``` +``` + +上面的四个示例呈现为: + +``` +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 tag. +``` + +### Emphasis[](#emphasis "Permalink") + +在 Markdown 中有多种强调文本的方法. 您可以斜体,粗体,删除线,以及将这些强调样式结合在一起. + +Examples: + +``` +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 文档: + +``` +perform_complicated_task + +do_this_and_do_that_and_another_thing + +but_emphasis is_desired _here_ +``` + +perform_complicated_task + +do_this_and_do_that_and_another_thing + +但是*在这里需要重点* + +* * * + +如果您只想强调单词的一部分,仍然可以使用星号来完成: + +``` +perform*complicated*task + +do*this*and*do*that*and*another thing +``` + +perform*complicated*task + +做*这个* , *做*那个*和*另一件事 + +### Footnotes[](#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. +``` + +脚注参考标记如下所示: [1](#fn:1) + +此参考标记是字母和数字的组合. [2](#fn:footnote-42) + +### Headers[](#headers "Permalink") + +``` +# H1 +## H2 +### H3 +#### H4 +##### H5 +###### H6 + +Alternatively, for H1 and H2, an underline-ish style: + +Alt-H1 +====== +Alt-H2 +------ +``` + +#### Header IDs and links[](#header-ids-and-links "Permalink") + +GFM 扩展了标准 Markdown 标准,以便所有 Markdown 呈现的标头都自动获取 ID,可以将 ID 链接到该 ID,注释中除外. + +悬停时,将显示到这些 ID 的链接,从而可以更轻松地将链接复制到标头以在其他地方使用. + +根据以下规则从标头的内容生成 ID: + +1. 所有文本都将转换为小写. +2. 删除所有非单词文本(例如标点符号或 HTML). +3. 所有空格都将转换为连字符. +4. 连续的两个或多个连字符转换为 1. +5. If a header with the same ID has already been generated, a unique incrementing number is appended, starting at 1. + +Example: + +``` +# 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[](#horizontal-rule "Permalink") + +使用三个或多个连字符,星号或下划线来创建水平尺非常简单: + +``` +Three or more hyphens, + --- +asterisks, +*** +or underscores + +___ +``` + +### Images[](#images "Permalink") + +Examples: + +``` +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" +``` + +Inline-style (hover to see title text): + +[![alt text](img/c5c16791538bd6838d6196a0b4ec5bb7.png "Title Text")](img/markdown_logo.png) + +参考样式(悬停以查看标题文本): + +[![alt text](img/c5c16791538bd6838d6196a0b4ec5bb7.png "Title Text")](img/markdown_logo.png) + +#### Videos[](#videos "Permalink") + +> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#videos) . + +链接到带有视频扩展名的文件的图像标签会自动转换为视频播放器. 有效的视频扩展名是`.mp4` , `.m4v` , `.mov` , `.webm`和`.ogv` : + +``` +Here's a sample video: + +![Sample Video](img/markdown_video.mp4) +``` + +这是一个示例视频: + +[![Sample Video](img/bf99e217a01388f7c11df39626ab9e22.png)](img/markdown_video.mp4) + +#### Audio[](#audio "Permalink") + +> 如果未正确呈现,请[在 GitLab 本身中查看它](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/user/markdown.md#audio) . + +与视频类似,带有音频扩展名的文件的链接标签会自动转换为音频播放器. 有效的音频扩展名是`.mp3` , `.oga` , `.ogg` , `.spx`和`.wav` : + +``` +Here's a sample audio clip: + +![Sample Audio](img/markdown_audio.mp3) +``` + +这是一个示例音频剪辑: + +[![Sample Audio](img/8095440bd29d634de897ae56f76a4969.png)](img/markdown_audio.mp3) + +### Inline 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`元素. + +``` +
+
Definition list
+
Is something people use sometimes.
+ +
Markdown in HTML
+
Does *not* work **very** well. HTML tags will work, in most cases.
+
+``` + +Definition list + +人们有时会用到的东西. + +Markdown in HTML + +*不是*很好**. HTML *标签*将工作 ,在大多数情况下. + +* * * + +仍然可以在 HTML 标记内使用 Markdown,但前提是包含 Markdown 的行分为各自的行: + +``` +
+
Markdown in HTML
+
Does *not* work **very** well. HTML tags will work, in most cases.
+ +
Markdown in HTML
+
+ + Does *not* work **very** well. HTML tags will work, in most cases. + +
+
+``` + +Markdown in HTML + +*不是*很好**. HTML 标记在大多数情况下都可以使用. + +Markdown in HTML + +*不能* 很好地工作. HTML 标记在大多数情况下都可以使用. + +#### 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 的[`
`](https://s0developer0mozilla0org.icopy.site/en-US/docs/Web/HTML/Element/details)和[``](https://s0developer0mozilla0org.icopy.site/en-US/docs/Web/HTML/Element/summary)标记折叠内容. 这对于折叠长日志特别有用,因为它们占用更少的屏幕空间. + +``` +

+

+Click this to collapse/fold. + +These details will remain hidden until expanded. + +
PASTE LOGS HERE
+ +
+

+``` + +
单击以折叠/折叠. 这些细节*将*保持**隐藏,**直到扩展. + +``` + PASTE LOGS HERE +```
+ +* * * + +这些标记内的 Markdown 也受支持. + +**注意:**如果 Markdown 无法正确呈现,请尝试在页面顶部添加`{::options parse_block_html="true" /}` ,然后将`markdown="span"`添加到开头的摘要标记中,如下所示: `` . + +请记住,在``标记之后和`
`标记之前留空行,如示例所示: + +``` +
+Click this to collapse/fold. + +These details _will_ remain **hidden** until expanded. + +``` +PASTE LOGS HERE +``` + +
+``` + +
单击以折叠/折叠. 这些细节*将*保持隐藏,直到扩展. + +``` + PASTE LOGS HERE +```
+ +### Line breaks[](#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[](#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[](#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 +``` + +* 这是一个[内联样式的链接](https://www.google.com) +* 这是[指向同一目录中存储库文件](index.html)的[链接](index.html) +* 这是[指向自述文件的上一级目录](../README.html)的[相对链接](../README.html) +* 这是一个[也有标题文字](https://www.google.com "此链接将您带到 Google!")的[链接](https://www.google.com "此链接将您带到 Google!") + +使用标头 ID 锚点: + +* 该链接[使用"#"和标题 ID](index.html#overview)链接到[另一个 Markdown 页面上的部分](index.html#overview) +* 这[使用"#"和标题 ID](#header-ids-and-links)链接到[同一页面上的不同部分.](#header-ids-and-links) + +使用参考: + +* 这是[参考样式的链接,请参见下文](https://www.mozilla.org/en-US/) +* 您可以[将数字用于引用样式的链接定义,请参见下文](https://slashdot.org) +* 或将其保留为空,并使用[链接文本本身](https://www.reddit.com) ,请参见下文. + +一些文本表明参考链接可以在以后使用. + +**注意:**相对链接不允许引用 Wiki 页面或项目文件中的 Wiki 页面中的项目文件. 这样做的原因是,Wiki 始终位于 GitLab 中的单独 Git 存储库中. 例如,仅当链接位于 Wiki Markdown 文件内部时, `[I'm a reference-style link](style)`才会将链接指向`wikis/style` . + +#### URL auto-linking[](#url-auto-linking "Permalink") + +GFM will auto-link almost any URL you put into your text: + +``` +- 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/) +* +* +* [http://localhost:3000](http://localhost:3000) + +### Lists[](#lists "Permalink") + +可以轻松创建有序列表和无序列表. + +对于有序列表,请在有序列表的每一行的开头添加希望列表以其开头的数字,例如`1.` ,后跟一个空格. 在第一个数字之后,使用什么数字都没有关系,有序列表将按垂直顺序自动编号,因此对同一列表中的所有项目重复`1.` .. 如果你开始以外的其他数字`1.` ,它会用它作为第一个数字,并从那里计数. + +Examples: + +``` +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 +``` + +无序列表可以: + +* use +* minuses + +他们还可以: + +* use +* asterisks + +They can even: + +* use +* pluses + +* * * + +如果列表项包含多个段落,则每个后续段落都应缩进到与列表项文本开头相同的级别. + +Example: + +``` +1. First ordered list item + + Second paragraph of first item. + 1. Another item +``` + +1. 首先订购的清单项目 + + 第一项第二段. + +2. Another item + +* * * + +如果第一项的段落没有缩进适当的空格数,则该段落将出现在列表外部,而不是在列表项下方正确缩进. + +Example: + +``` +1. First ordered list item + + Paragraph of first item. + 1. Another item +``` + +1. 首先订购的清单项目 + +第一项的段落. + +1. 另一个项目 + +### Superscripts / Subscripts[](#superscripts--subscripts "Permalink") + +当前,CommonMark 和 GFM 不支持 Redcarpet 支持的上标语法( `x^2` ). 您可以对上标和下标使用标准的 HTML 语法: + +``` +The formula for water is H2O +while the equation for the theory of relativity is E = mc2. +``` + +水的公式为 H 2 O,而相对论的公式为 E = mc 2 . + +### Tables[](#tables "Permalink") + +表不是 Markdown 核心规范的一部分,但它们是 GFM 的一部分. + +1. 第一行包含标头,并用"竖线"( `|` )分隔. +2. 第二行将标题与单元格分开,并且必须包含三个或更多破折号. +3. 第三行以及随后的任何行均包含单元格值. + * 您**不能**在 Markdown 中将单元格分隔成多行,它们必须保持为单行,但它们可能会很长. 如果需要,还可以包含 HTML `
`标记以强制换行. + * 像元大小**不必**彼此匹配. 它们很灵活,但必须用管道( `|` )分隔. + * 您**可以**有空白单元格. + +Example: + +``` +| 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
9 | +``` + +| 标题 1 | 标头 2 | 标头 3 | +| --- | --- | --- | +| 单元格 1 | 单元格 2 | 单元格 3 | +| 单元格 4 | 单元格 5 更长 | 单元格 6 比其他单元格长得多,但这没关系. 当单元格太大而无法显示时,它将最终包裹文本. | +| 单元格 7 |   | cell +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 | +``` + +| 左对齐 | Centered | 右对齐 | 左对齐 | Centered | 右对齐 | +| --- | --- | --- | --- | --- | --- | +| 单元格 1 | 单元格 2 | 单元格 3 | 单元格 4 | 单元格 5 | 单元格 6 | +| 单元格 7 | 单元格 8 | 单元格 9 | 单元格 10 | 单元格 11 | 单元格 12 | + +#### Copy from spreadsheet and paste in Markdown[](#copy-from-spreadsheet-and-paste-in-markdown "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/27205) . + +如果您使用电子表格软件(例如 Microsoft Excel,Google 表格或 Apple Numbers),则可以从电子表格中进行复制,GitLab 会将其粘贴为 Markdown 表. 例如,假设您具有以下电子表格: + +[![Copy from spreadsheet](img/c2f9cb2f2c88244b3dbf094572214a02.png)](img/markdown_copy_from_spreadsheet_v12_7.png) + +选择单元格并将其复制到剪贴板. 打开一个 GitLab Markdown 条目并粘贴电子表格: + +[![Paste to Markdown table](img/56c21932bdeb67b5407d18238e8ec7f3.png)](img/markdown_paste_table_v12_7.png) + +## References[](#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 语法的便捷工具. + +1. 这是脚注中的文本. [↩](#fnref:1) + +2. 这是另一个脚注. [↩](#fnref:footnote-42) +``` \ No newline at end of file diff --git a/docs/Releases.md b/docs/Releases.md new file mode 100644 index 0000000000000000000000000000000000000000..5642320f7e972af61c41afa4024746a172e79733 --- /dev/null +++ b/docs/Releases.md @@ -0,0 +1,315 @@ +# Releases[](#releases "Permalink") + +在 GitLab 11.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41766) . + +要在源代码历史记录中引入检查点,可以在发布时分配[Git 标签](https://git-scm.com/book/en/v2/Git-Basics-Tagging) . 但是,在大多数情况下,您的用户不仅需要原始源代码. 他们需要 CI / CD 系统输出的已编译对象或其他资产. + +GitLab *发行版*是与代码的发行版本相关联的源,构建输出,工件和其他元数据的快照. + +您可以在任何分支上创建一个 GitLab 版本. 创建发行版时: + +* manbetx 客户端打不开自动归档源代码,并将其与版本关联. +* GitLab 会自动创建一个 JSON 文件,其中列出了发行版中的所有内容,因此您可以比较和审核发行版. 该文件称为[发布证据](#release-evidence) . +* 您可以添加发行说明以及与发行版关联的标签的消息. + +创建发行版后,您可以将[里程碑与其关联](#associate-milestones-with-a-release) ,并附加[发行资产](#release-assets) ,例如运行手册或软件包. + +## View releases[](#view-releases "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/36667) . + +要查看版本列表: + +* 转到**项目概述>版本** ,或 + +* 在项目的概述页面上,如果存在至少一个版本,请单击版本数. + + [![Number of Releases](img/4b690260474eb340f7b3f6d25b0568d2.png "Incremental counter of Releases")](img/releases_count_v13_2.png) + + * 在公共项目上,此数字对所有用户可见. + * 在私有项目上,具有 Reporter [权限](../../permissions.html#project-members-permissions)或更高[权限的](../../permissions.html#project-members-permissions)用户可以看到此数字. + +## Create a release[](#create-a-release "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32812) . 可以在 GitLab UI 中直接创建发布. + +**注意:**只有具有开发者权限或更高权限的用户才能创建发行版. 阅读有关[释放权限的](../../../user/permissions.html#project-members-permissions)更多信息. + +您可以在用户界面中或使用[Releases API](../../../api/releases/index.html#create-a-release)创建发布. 我们建议使用 API​​添加发行说明,作为 CI / CD 发行流程中的最后步骤之一. + +要通过 GitLab UI 创建新版本: + +1. 导航到**项目概述>发布** ,然后单击**新发布**按钮. +2. 在[**标签名称**](#tag-name)框中,输入一个名称. +3. In the **从创建** list, select the branch or enter a tag or commit SHA. +4. 在" **消息"**框中,输入与标签关联的消息. +5. (可选)在" [**发行说明"**](#release-notes-description)字段中,输入发行说明. 您可以使用 Markdown 并将文件拖放到此字段. + * 如果将此字段留空,则只会创建一个标签. + * 如果您填充它,将同时创建标签和发行版. +6. Click **创建标签**. + +如果创建了发行​​版,则可以在**项目概述>发行版中**对其进行查看. 如果创建了标签,则可以在**存储库>标签中**查看它. + +现在,您可以编辑发布以[添加里程碑](#associate-milestones-with-a-release)和[发布资产](#release-assets) . + +### Schedule a future release[](#schedule-a-future-release "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38105) . + +您可以使用[Releases API](../../../api/releases/index.html#upcoming-releases)提前创建发行[版](../../../api/releases/index.html#upcoming-releases) . 当您设置将来的`released_at`日期时,将在发布标签旁边显示**即将发布**的发布标志. 经过`released_at`日期和时间后,会自动删除徽章. + +[![An upcoming release](img/7727ed12caef6b761b73e4bd379c7839.png)](img/upcoming_release_v12_7.png) + +## Edit a release[](#edit-a-release "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26016) . 在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/9427)了资产链接编辑. + +**注意:**只有具有开发者权限或更高权限的用户才能编辑发行版. 阅读有关[释放权限的](../../../user/permissions.html#project-members-permissions)更多信息. + +要编辑发布的详细信息: + +1. 导航到**项目概述>发布** . +2. 在您要修改的发行版的右上角,单击" **编辑此发行版"** (铅笔图标). +3. 在" **编辑版本"**页面上,更改版本的详细信息. +4. Click **保存更改**. + +您可以编辑发行标题,注释,关联的里程碑和资产链接. 要更改其他发行信息,例如标签或发行日期,请使用[Releases API](../../../api/releases/index.html#update-a-release) . + +## Add release notes to Git tags[](#add-release-notes-to-git-tags "Permalink") + +If you have an existing Git tag, you can add release notes to it. + +您可以在用户界面中或使用[Releases API](../../../api/releases/index.html)来执行此操作. 我们建议使用 API​​添加发行说明,作为 CI / CD 发行流程中的最后步骤之一. + +在界面中,要向新的 Git 标签添加发行说明: + +1. 导航到您项目的**Repository> Tags** . +2. Click **新的一天**. +3. 在**发行说明**字段中,输入发行说明. 您可以使用 Markdown 并将文件拖放到此字段. +4. Click **创建标签**. + +在界面中,要将发行说明添加到现有的 Git 标签: + +1. 导航到您项目的**Repository> Tags** . +2. 单击**编辑发行说明** (铅笔图标). +3. 在**发行说明**字段中,输入发行说明. 您可以在此字段中使用 Markdown,并将文件拖放到该字段中. +4. Click **保存更改**. + +## Associate milestones with a release[](#associate-milestones-with-a-release "Permalink") + +版本历史 + +* 在 GitLab 12.5 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/29020) . +* [已更新](https://gitlab.com/gitlab-org/gitlab/-/issues/39467) ,可在 GitLab 13.0 中的 UI 中编辑里程碑. + +您可以将一个版本与一个或多个[项目里程碑](../milestones/index.html#project-milestones-and-group-milestones)相关联. + +您可以在用户界面中执行此操作,也可以在对[Releases API 的](../../../api/releases/index.html#create-a-release)请求中包含一个`milestones`数组. + +在用户界面中,要将里程碑与版本关联: + +1. 导航到**项目概述>发布** . +2. 在您要修改的发行版的右上角,单击" **编辑此发行版"** (铅笔图标). +3. 从" **里程碑"**列表中,选择要关联的每个里程碑. 您可以选择多个里程碑. +4. Click **保存更改**. + +在" **项目概述">"发布"**页面上, **里程碑**列在顶部,以及有关里程碑问题的统计信息. + +[![A Release with one associated milestone](img/21967843cf3a12bcfa5e39a39b1b3f69.png)](img/release_with_milestone_v12_9.png) + +在" **问题">"里程碑"**页面上,以及当您单击此页面上的里程碑时,也可以看到发行版本. + +这是一个里程碑示例,分别没有发布,一个发布和两个发布. + +[![Milestones with and without Release associations](img/e6ef8c883764c13967c9c9fcc5617980.png)](img/milestone_list_with_releases_v12_5.png) + +## Get notified when a release is created[](#get-notified-when-a-release-is-created "Permalink") + +在 GitLab 12.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26001) . + +为您的项目创建新版本时,将通过电子邮件通知您. + +订阅发布通知: + +1. 导航到" **项目概述"** . +2. 单击**通知设置** (响铃图标). +3. 在列表中,点击**自定义** . +4. Select the **新品发布** check box. +5. 关闭对话框进行保存. + +## Prevent unintentional releases by setting a deploy freeze[](#prevent-unintentional-releases-by-setting-a-deploy-freeze "Permalink") + +在 GitLab 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/29382) . + +通过设置[*部署冻结*期,](../../../ci/environments/deployment_safety.html)可以在指定的时间内防止意外的生产发布. 冻结部署有助于减少自动化部署时的不确定性和风险. + +使用" [冻结时间" API](../../../api/freeze_periods.html)设置被定义为[crontab](https://crontab.guru/)条目的`freeze_start`和`freeze_end` . + +如果正在执行的作业处于冻结期,则 GitLab CI / CD 会创建一个名为`$CI_DEPLOY_FREEZE`的环境变量. + +为了防止执行部署作业,请在`gitlab-ci.yaml`创建一个`rules`条目,例如: + +``` +deploy_to_production: + stage: deploy + script: deploy_to_prod.sh + rules: + - if: $CI_DEPLOY_FREEZE == null +``` + +如果项目包含多个冻结期,则所有时期都适用. 如果它们重叠,则冻结将覆盖整个重叠期间. + +有关更多信息,请参阅[部署安全](../../../ci/environments/deployment_safety.html) . + +## Release fields[](#release-fields "Permalink") + +创建或编辑发行版时,以下字段可用. + +### Tag name[](#tag-name "Permalink") + +发行标签名称应包括发行版本. GitLab 在我们的发行版中使用[语义版本控制](https://semver.org/) ,我们建议您也这样做. 使用`(Major).(Minor).(Patch)` ,如[GitLab 版本控制政策](../../../policy/maintenance.html#versioning)中所述. + +例如,对于 GitLab 版本`10.5.7` : + +* `10`代表主要版本. 主要版本是`10.0.0` ,但通常称为`10.0` . +* `5`代表次要版本. 次要版本为`10.5.0` ,但通常称为`10.5` . +* `7`代表补丁号码. + +版本号的任何部分都可以是多个数字,例如`13.10.11` . + +### Release notes description[](#release-notes-description "Permalink") + +每个版本都有说明. 您可以添加任何您喜欢的文本,但是我们建议您添加一个变更日志来描述发行版本的内容. 这可以帮助用户快速扫描您发布的每个版本之间的差异. + +**注意:** [Git 的标记消息](https://git-scm.com/book/en/v2/Git-Basics-Tagging)和发行说明描述无关. 说明支持[Markdown](../../markdown.html) . + +### Release assets[](#release-assets "Permalink") + +当前,您可以将以下类型的资产添加到每个版本: + +* [Source code](#source-code) +* [Links](#links) + +manbetx 客户端打不开将在未来支持更多的资产类型,包括诸如预装包,合规性/安全证据或容器图像之类的对象. + +#### Permanent links to release assets[](#permanent-links-to-release-assets "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/27300) . + +与发布相关联的资产可通过永久 URL 访问. GitLab 将始终将此 URL 重定向到实际资产位置,因此,即使资产移动到其他位置,您也可以继续使用相同的 URL. 这是在[链接创建](../../../api/releases/links.html#create-a-link)或[更新](../../../api/releases/links.html#update-a-link)期间定义的. + +每个资产都有一个名称, *实际*资产位置的 URL,以及一个可选的`filepath`参数,如果您指定它,它将创建指向发布的资产的 URL. URL 的格式为: + +``` +https://host/namespace/project/releases/:release/downloads/:filepath +``` + +如果您对资产`v11.9.0-rc2`的发布`gitlab-org`命名空间和`gitlab-runner`项目上`gitlab.com` ,例如: + +``` +{ "name": "linux amd64", "filepath": "/binaries/gitlab-runner-linux-amd64", "url": "https://gitlab-runner-downloads.s3.amazonaws.com/v11.9.0-rc2/binaries/gitlab-runner-linux-amd64" } +``` + +该资产具有以下直接链接: + +``` +https://gitlab.com/gitlab-org/gitlab-runner/releases/v11.9.0-rc2/downloads/binaries/gitlab-runner-linux-amd64 +``` + +资产的物理位置可以随时更改,并且直接链接将保持不变. + +### Source code[](#source-code "Permalink") + +GitLab 会根据给定的 Git 标签自动生成`zip` , `tar.gz` , `tar.bz2`和`tar`归档的源代码. 这些是只读资产. + +### Links[](#links "Permalink") + +A link is any URL which can point to whatever you like: documentation, built binaries, or other related materials. These can be both internal or external links from your GitLab instance. + +链接的四种类型是" Runbook"," Package"," Image"和" Other". + +## Release evidence[](#release-evidence "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26019) . + +每次创建发行版时,GitLab 都会拍摄与之相关的数据快照. 此数据保存在 JSON 文件中,称为*发布证据* . 它包括链接的里程碑和问题,并且可以促进内部流程,例如外部审核. + +要访问发布证据,请在"发布"页面上,单击" **证据集合"**标题下列出的 JSON 文件的链接. + +您还可以[使用 API](../../../api/releases/index.html#collect-release-evidence-premium-only)生成现有版本的版本证据. 因此,每个版本可以具有多个版本证据快照. 您可以在"发布"页面上查看发布证据及其详细信息. + +**注意:**禁用问题跟踪器后, [将无法下载](https://gitlab.com/gitlab-org/gitlab/-/issues/208397)发布证据. + +这是释放证据对象的示例: + +``` +{ "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[](#collect-release-evidence-premium-only "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/199065) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.10. + +创建发布后,将自动收集发布证据. 要在其他任何时间启动证据收集,请使用[API 调用](../../../api/releases/index.html#collect-release-evidence-premium-only) . 您可以为一个发布多次收集发布证据. + +在"发布"页面上可以看到证据收集快照,以及收集证据的时间戳. + +### Include report artifacts as release evidence[](#include-report-artifacts-as-release-evidence-ultimate-only "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32773) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.2. + +创建发布时,如果[作业工件](../../../ci/pipelines/job_artifacts.html#artifactsreports)包含在最后运行的管道中,则它们会自动作为发布证据包含在发布中. + +尽管工作工件通常会过期,但发布证据中包含的工件不会过期. + +要启用作业工件收集,您需要同时指定两个: + +1. [`artifacts:paths`](../../../ci/yaml/README.html#artifactspaths) +2. [`artifacts:reports`](../../../ci/pipelines/job_artifacts.html#artifactsreports) + +``` +ruby: + script: + - gem install bundler + - bundle install + - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml + artifacts: + paths: + - rspec.xml + reports: + junit: rspec.xml +``` + +如果管道成功运行,则在创建发布时, `rspec.xml`文件将保存为发布证据. + +**注:**如果您[计划发布证据收集](#schedule-release-evidence-collection) ,则某些[证据](#schedule-release-evidence-collection)可能在证据收集时已经过期. 为了避免这种情况,可以使用[`artifacts:expire_in`](../../../ci/yaml/README.html#artifactsexpire_in)关键字. 了解更多在[这个问题上](https://gitlab.com/gitlab-org/gitlab/-/issues/222351) . + +### Schedule release evidence collection[](#schedule-release-evidence-collection "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23697) . + +在 API 中: + +* 如果您指定未来的`released_at`日期,则该发布将成为**即将发布的发布,**并且将在发布日期收集证据. 在此之前,您无法收集释放证据. +* 如果您使用过去的`released_at`日期,则不会收集任何证据. +* 如果您未指定`released_at`日期,则在创建发布的日期收集发布证据. + +### Disable release evidence display[](#disable-release-evidence-display-core-only "Permalink") + +`:release_evidence_collection`功能标志在 GitLab 自管理实例中默认启用. 要关闭它,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.disable(:release_evidence_collection) +``` + +**注意:**无论使用此功能标志如何,都将收集发布证据,该标志仅启用或禁用"发布"页面上的数据显示. + +## GitLab Releaser[](#gitlab-releaser "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab-releaser/-/merge_requests/6) . + +GitLab Releaser 是一个 CLI 工具,用于从命令行或 GitLab 的 CI / CD 配置文件`.gitlab-ci.yml`管理 GitLab 版本. + +有了它,您可以直接通过终端创建,更新,修改和删除发行版. + +有关详细信息,请阅读[GitLab Releaser 文档](https://gitlab.com/gitlab-org/gitlab-releaser/-/tree/master/docs/index.md) . \ No newline at end of file diff --git a/docs/SSH.md b/docs/SSH.md new file mode 100644 index 0000000000000000000000000000000000000000..33372114cc6a1283b59813187dae8438fb84f173 --- /dev/null +++ b/docs/SSH.md @@ -0,0 +1,344 @@ +# SSH密钥[](#SSH密钥 "Permalink") + +Git 是一个分布式版本控制系统,这意味着您可以在本地工作. 此外,您还可以将更改共享或"推送"到其他服务器. GitLab 支持使用 SSH 密钥在 Git 及其服务器之间进行安全通信. + +SSH 协议提供了这种安全性,并允许您向 GitLab 远程服务器进行身份验证,而无需每次都提供用户名或密码. + +该页面可以帮助您配置安全的 SSH 密钥,这些密钥可用于帮助保护与 GitLab 存储库的连接. + +* 如果您需要有关创建 SSH 密钥的信息,请从我们[的 SSH 密钥选项](#options-for-ssh-keys)开始. +* 如果您有专用于 GitLab 帐户的 SSH 密钥,则可能对[使用非默认 SSH 密钥对路径](#working-with-non-default-ssh-key-pair-paths)感兴趣. +* 如果您已经有了 SSH 密钥对,则可以转到[将 SSH 密钥添加到 GitLab 帐户的方法](#adding-an-ssh-key-to-your-gitlab-account) . + +## Requirements[](#requirements "Permalink") + +为了支持 SSH,GitLab 需要安装 OpenSSH 客户端,该客户端已预安装在 GNU / Linux 和 macOS 上,但未预先安装在 Windows 上. + +确保您的系统包括 SSH 6.5 或更高版本,因为它不包括现在不安全的 MD5 签名方案. 以下命令返回系统上安装的 SSH 版本: + +``` +ssh -V +``` + +尽管 GitLab 不[支持在 Microsoft Windows 上进行安装](../install/requirements.html#microsoft-windows) ,但是您可以设置 SSH 密钥以将 Windows 设置[为客户端](#options-for-microsoft-windows) . + +## Options for SSH keys[](#options-for-ssh-keys "Permalink") + +GitLab 支持使用 RSA,DSA,ECDSA 和 ED25519 密钥. + +* GitLab 在 GitLab 11.0 中已[弃用](https://about.gitlab.com/releases/2018/06/22/gitlab-11-0-released/#support-for-dsa-ssh-keys) DSA 密钥. +* 如[Go 实用密码术中](https://leanpub.com/gocrypto/read#leanpub-auto-ecdsa)所述,与 DSA 相关的安全性问题也适用于 ECDSA. + +**提示:**现有文档表明 ED25519 更安全. 如果使用 RSA 密钥,则美国国家科学技术研究院[出版物 800-57 第 3 部分(PDF)](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf)建议密钥大小至少为 2048 位. + +因此,我们的文档集中在 ED25519 和 RSA 密钥的使用上. + +管理员可以[限制应允许的密钥及其最小长度](../security/ssh_keys_restrictions.html) . + +## Review existing SSH keys[](#review-existing-ssh-keys "Permalink") + +如果您已有 SSH 密钥,则可以使用它们来帮助保护与 GitLab 存储库的连接. 默认情况下,Linux 和 macOS 系统上的 SSH 密钥存储在用户的主目录中的`.ssh/`子目录中. 下表包括每种 SSH 密钥算法的默认文件名: + +| Algorithm | 公钥 | 私钥 | +| --- | --- | --- | +| 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) . + +## Generating a new SSH key pair[](#generating-a-new-ssh-key-pair "Permalink") + +如果要创建: + +* ED25519 密钥,请阅读[ED25519 SSH 密钥](#ed25519-ssh-keys) . +* RSA 密钥,请阅读[RSA SSH 密钥](#rsa-ssh-keys) . + +### ED25519 SSH keys[](#ed25519-ssh-keys "Permalink") + +The book [Practical Cryptography With Go](https://leanpub.com/gocrypto/read#leanpub-auto-chapter-5-digital-signatures) suggests that [ED25519](https://ed25519.cr.yp.to/) keys are more secure and performant than RSA keys. + +随着 OpenSSH 6.5 在 2014 年引入 ED25519 SSH 密钥,它们应该在任何当前操作系统上都可用. + +您可以使用以下命令创建和配置 ED25519 密钥: + +``` +ssh-keygen -t ed25519 -C "" +``` + +`-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 keys[](#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)相关的问题. + +### Common steps for generating an SSH key pair[](#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 密钥设置[密码](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 +``` + +### RSA keys and OpenSSH from versions 6.5 to 7.8[](#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 密钥. + +如果您已经具有可用于 GitLab 的 RSA SSH 密钥对,请考虑对其进行升级以使用更安全的密码加密格式. 您可以使用以下命令进行操作: + +``` +ssh-keygen -o -f ~/.ssh/id_rsa +``` + +或者,您可以使用以下命令以更安全的加密格式生成新的 RSA 密钥: + +``` +ssh-keygen -o -t rsa -b 4096 -C "email@example.com" +``` + +**注意:**如`ssh-keygen`手册页所述,ED25519 已将密钥加密为更安全的 OpenSSH 格式. + +## Adding an SSH key to your GitLab account[](#adding-an-ssh-key-to-your-gitlab-account "Permalink") + +现在,您可以将创建的 SSH 密钥复制到您的 GitLab 帐户. 这样做,请按照下列步骤操作: + +1. 将您的**公共** 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. 导航到`http://gitlab.com`并登录. +3. 选择右上角的头像,然后单击**设置** +4. Click **SSH 密钥**. +5. 将复制的公共密钥粘贴到" **密钥"**文本框中. +6. 确保您的密钥在" **标题"**文本框中包含描述性名称,例如" *工作笔记本电脑"*或" *家用工作站"* . +7. 在"过期时间"部分下包含密钥的(可选)过期日期. (在[GitLab 12.9 中](https://gitlab.com/gitlab-org/gitlab/-/issues/36243)引入.) +8. 单击**添加键**按钮. + +使用此过程"过期"的 SSH 密钥在 GitLab 工作流程中仍然有效. 由于 GitLab 配置的到期日期不包含在 SSH 密钥本身中,因此您仍然可以根据需要导出公共 SSH 密钥. + +**注意:**如果您手动复制了公共 SSH 密钥,请确保复制了整个密钥,以`ssh-ed25519` (或`ssh-rsa` )开头,并以您的电子邮件地址结尾. + +## Testing that everything is set up correctly[](#testing-that-everything-is-set-up-correctly "Permalink") + +要测试是否正确添加了 SSH 密钥,请在终端中运行以下命令(将`gitlab.com`替换为 GitLab 的实例域): + +``` +ssh -T git@gitlab.com +``` + +The first time you connect to GitLab via SSH, you will be asked to verify the authenticity of the GitLab host that you’re connecting to. For example, when connecting to GitLab.com, answer `yes` to add GitLab.com to the list of trusted hosts: + +``` +The authenticity of host 'gitlab.com (35.231.145.151)' can't be established. +ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw. +Are you sure you want to continue connecting (yes/no)? yes +Warning: Permanently added 'gitlab.com' (ECDSA) to the list of known hosts. +``` + +**注意:**对于 GitLab.com,请查阅[SSH 主机密钥指纹](../user/gitlab_com/index.html#ssh-host-keys-fingerprints)一节,以确保您连接到正确的服务器. 例如,您会在链接的部分中看到上面显示的 ECDSA 密钥指纹. + +一旦添加到已知主机列表中,将不再要求您再次验证 GitLab 主机的真实性. 再次运行以上命令,您将只收到*欢迎使用 GitLab 的`@username` !* 信息. + +如果未出现欢迎消息,则可以通过使用以下命令在详细模式下运行`ssh`来解决问题: + +``` +ssh -Tvvv git@gitlab.com +``` + +## Working with non-default SSH key pair paths[](#working-with-non-default-ssh-key-pair-paths "Permalink") + +如果您为 GitLab SSH 密钥对使用了非默认文件路径,请配置 SSH 客户端以指向 GitLab 私有 SSH 密钥. + +要进行这些更改,请运行以下命令: + +``` +eval $(ssh-agent -s) +ssh-add +``` + +现在将这些设置保存到`~/.ssh/config`文件中. 这里显示了两个专用于 GitLab 的 SSH 密钥示例: + +``` +# GitLab.com Host gitlab.com + Preferredauthentications publickey + IdentityFile ~/.ssh/gitlab_com_rsa + +# Private GitLab instance Host gitlab.company.com + Preferredauthentications publickey + IdentityFile ~/.ssh/example_com_rsa +``` + +公用 SSH 密钥对于 GitLab 必须是唯一的,因为它们将绑定到您的帐户. SSH 密钥是通过 SSH 推送代码时唯一的标识符,这就是为什么它需要唯一地映射到单个用户的原因. + +## Per-repository SSH keys[](#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[](#multiple-accounts-on-a-single-gitlab-instance "Permalink") + +[每个存储库](#per-repository-ssh-keys)方法还适用于在单个 GitLab 实例中使用多个帐户. + +或者,可以直接在`~.ssh/config`为主机分配别名. 如果在`.ssh/config`中的`Host`块之外设置了`IdentityFile` ,则 SSH 和作为扩展的 Git 将无法登录. 这是由于 SSH 组装`IdentityFile`条目的方式,因此不能通过将`IdentitiesOnly`设置为`yes`来更改. `IdentityFile`条目应指向 SSH 密钥对的私钥. + +**注意:**私钥和公用密钥应仅由用户读取. 通过运行以下`chmod 0400 ~/.ssh/`在 Linux 和 macOS 上完成此操作: `chmod 0400 ~/.ssh/`和`chmod 0400 ~/.ssh/` . + +``` +# User1 Account Identity Host + Hostname gitlab.com + PreferredAuthentications publickey + IdentityFile ~/.ssh/ + +# User2 Account Identity Host + Hostname gitlab.com + PreferredAuthentications publickey + IdentityFile ~/.ssh/ +``` + +**注意:**为提高效率和透明度,示例`Host`别名定义为`user_1.gitlab.com`和`user_2.gitlab.com` . 高级配置更难以维护. 使用这种别名使使用其他工具(如`git remote`子命令)时更容易理解. SSH 可以将任何字符串理解为`Host`别名,因此`Tanuki1`和`Tanuki2`尽管提供了很少的上下文指向它们,也可以使用. + +克隆`gitlab`存储库通常如下所示: + +``` +git clone git@gitlab.com:gitlab-org/gitlab.git +``` + +要为`user_1`克隆它,请将`gitlab.com`替换为 SSH 别名`user_1.gitlab.com` : + +``` +git clone git@:gitlab-org/gitlab.git +``` + +使用`git remote`命令修复以前克隆的存储库. + +下面的示例假定远程存储库被别名为`origin` . + +``` +git remote set-url origin git@:gitlab-org/gitlab.git +``` + +## Deploy keys[](#deploy-keys "Permalink") + +阅读[有关部署密钥](../user/project/deploy_keys/index.html)的[文档](../user/project/deploy_keys/index.html) . + +## Applications[](#applications "Permalink") + +### Eclipse[](#eclipse "Permalink") + +如果使用的是[EGit](https://www.eclipse.org/egit/) ,则可以[将 SSH 密钥添加到 Eclipse](https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration) . + +## SSH on the GitLab server[](#ssh-on-the-gitlab-server "Permalink") + +GitLab 与系统安装的 SSH 守护程序集成,指定一个用户(通常名为`git` )来处理所有访问请求. 通过 SSH 连接到 GitLab 服务器的用户由其 SSH 密钥而不是其用户名标识. + +在 GitLab 服务器上执行的 SSH *客户端*操作将以该用户身份执行. 尽管可以修改此用户的 SSH 配置,例如提供专用 SSH 密钥来验证这些请求,但是这种做法**不受支持** ,并且强烈建议这样做,因为这样做会带来重大的安全风险. + +GitLab 检查过程包括对这种情况的检查,如果您的服务器配置如下,它将引导您进入本节,例如: + +``` +$ gitlab-rake gitlab:check + +Git user has default SSH configuration? ... no + Try fixing it: + mkdir ~/gitlab-check-backup-1504540051 + sudo mv /var/lib/git/.ssh/id_rsa ~/gitlab-check-backup-1504540051 + sudo mv /var/lib/git/.ssh/id_rsa.pub ~/gitlab-check-backup-1504540051 + For more information see: + doc/ssh/README.md in section "SSH on the GitLab server" + Please fix the error above and rerun the checks. +``` + +尽快删除自定义配置. 这些自定义项*明确不受支持,*并且可能随时停止工作. + +### Options for Microsoft 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[](#troubleshooting "Permalink") + +如果在 Git 克隆上,系统会提示您输入密码,例如`git@gitlab.com's password:` SSH 设置有问题. + +* 确保您正确生成了 SSH 密钥对,并将公共 SSH 密钥添加到了 GitLab 配置文件 +* 尝试使用`ssh-agent`手动注册您的私有 SSH 密钥,如本文档前面所述 +* 尝试通过运行`ssh -Tv git@example.com`调试连接(将 GitLab 域替换为`example.com` ) \ No newline at end of file diff --git "a/docs/Squash\345\220\210\345\271\266.md" "b/docs/Squash\345\220\210\345\271\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..3dac8567ae60493d05eba470b3aba6cf20ec710b --- /dev/null +++ "b/docs/Squash\345\220\210\345\271\266.md" @@ -0,0 +1,111 @@ +# Squash合并[](#Squash合并 "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 8.17 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/1024) . +* [移植](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18956)到 GitLab Core 11.0\. + +使用 squash 和 merge,您可以将所有合并请求的提交合并为一个并保留干净的历史记录. + +## Overview[](#overview "Permalink") + +通过压接,您可以在接受合并请求时整理分支的提交历史记录. 它将合并请求中的所有更改作为单个提交应用,然后使用为项目设置的合并方法合并该提交. + +换句话说,挤压合并请求会变成一长串提交: + +[![List of commits from a merge request](img/f2d420adddd87cc8087fea62246e7b67.png)](img/squash_mr_commits.png) + +合并为单个提交: + +[![A squashed commit followed by a merge commit](img/e81fe926a5b379f37dfc5af80b8f83f3.png)](img/squash_squashed_commit.png) + +压缩的提交的提交消息将是: + +* 取自合并中的第一条多行提交消息. +* 如果找不到多行提交消息,则合并请求的标题. + +**注意:**仅在至少 2 次提交时,此选项才生效. 由于没有什么可压缩的,因此如果只有 1 次提交,则提交消息不会更改. + +可以在合并合并请求之前对其进行自定义. + +[![A squash commit message editor](img/618ce3d47266d9b45262489065b68cf7.png)](img/squash_mr_message.png) + +**注意:**在此示例中,压缩的提交之后是合并提交,因为此示例存储库的合并方法使用了合并提交. + +压缩也适用于快进合并策略,有关更多详细信息,请参见[压缩和快进合并](#squash-and-fast-forward-merge) . + +## Use cases[](#use-cases "Permalink") + +在功能分支上工作时,有时您想提交当前进度,但实际上并不关心提交消息. 这些"进行中的提交"不一定包含重要的信息,因此,您宁愿不将其包含在目标分支中. + +使用 squash 和 merge,当准备好要合并的合并请求时,您要做的就是在按下 merge 之前将挤压启用,以将合并请求中的提交加入到单个提交中. + +这样,您的基本分支的历史记录将保留有意义的提交消息,并且: + +* 如有必要, [还原](revert_changes.html)更为简单. +* 合并的分支将保留完整的提交历史记录. + +## Enabling squash for a merge request[](#enabling-squash-for-a-merge-request "Permalink") + +可以创建或编辑合并请求的任何人都可以选择将其压缩在合并请求表单上: + +[![Squash commits checkbox on edit form](img/fd54213f0e98a4b2f6482ab98d497410.png)](img/squash_edit_form.png) + +然后可以在接受合并请求时覆盖它: + +[![Squash commits checkbox on accept merge request form](img/3667bc1901823963df25df8a2458047a.png)](img/squash_mr_widget.png) + +## Commit metadata for squashed commits[](#commit-metadata-for-squashed-commits "Permalink") + +压缩的提交具有以下元数据: + +* 消息:壁球提交消息或自定义消息. +* 作者:合并请求的作者. +* 提交者:发起壁球的用户. + +## Squash and fast-forward merge[](#squash-and-fast-forward-merge "Permalink") + +当项目[启用](fast_forward_merge.html#enabling-fast-forward-merges)了[快进合并设置时](fast_forward_merge.html#enabling-fast-forward-merges) ,合并请求必须能够不压缩而进行快速转发以进行压缩. 这是因为压缩仅在接受合并请求时可用,因此即使挤压本身可以被认为等同于重新基准化,也可能需要在压缩之前对合并请求进行重新基准化. + +## Squash Commits Options[](#squash-commits-options "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/17613) . +* 它部署在功能标记后面,默认情况下处于禁用状态. +* 在 GitLab.com 上已禁用. +* 不建议将其用于生产. +* 要在 GitLab 自管实例中使用它,请让 GitLab 管理员[启用它](#enable-or-disable-squash-commit-options-core-only) . + +使用 Squash Commits Options,您可以为项目配置 Squash 和 Merge 的行为. 要进行设置,请导航至项目的**设置>常规,**然后展开**合并请求** . 您将找到以下选项可供选择,这将影响提交给您的项目的现有和新合并请求: + +* **不允许** :用户不能在合并之前立即使用 Squash 和 Merge 来压缩所有提交. 启用或禁用它的复选框将被取消选中,并且对用户隐藏. +* **Allow**: users will have the option to enable Squash and Merge on a merge request basis. The checkbox will be unchecked (disabled) by default, but and the user is allowed to enable it. +* **鼓励** :用户可以选择在合并请求的基础上启用 Squash 和 Merge. 默认情况下会选中(启用)该复选框以鼓励使用,但允许用户禁用它. +* **要求** :对所有合并请求都启用了"挤压和合并",因此将始终执行. 启用或禁用它的复选框将被选中并向用户隐藏. + +创建合并请求以及编辑现有请求的描述时,将显示" Squash and Merge"复选框,但" Squash Commit Options"设置为**"不允许"**或" **Require"**时除外. + +**注意:**如果您的项目设置为**"不允许**挤压和合并",则用户仍然可以选择通过命令行在本地挤压提交,并在合并之前强制将其推送到其远程分支. + +### Enable or disable Squash Commit Options[](#enable-or-disable-squash-commit-options-core-only "Permalink") + +壁球提交选项正在开发中,尚未准备好用于生产. 它部署在**默认情况下禁用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/feature_flags.html)可以为您的实例启用它. 可以根据项目启用或禁用壁球提交选项. + +要启用它: + +``` +# Instance-wide +Feature.enable(:squash_options) +# or by project +Feature.enable(:squash_options, Project.find()) +``` + +禁用它: + +``` +# Instance-wide +Feature.disable(:squash_options) +# or by project +Feature.disable(:squash_options, Project.find()) +``` \ No newline at end of file diff --git a/docs/WebIDE.md b/docs/WebIDE.md new file mode 100644 index 0000000000000000000000000000000000000000..c4cea172e7ed10914bda58d09c723dfde0115074 --- /dev/null +++ b/docs/WebIDE.md @@ -0,0 +1,260 @@ +# Web IDE[](#web-ide "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 10.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/4539) . +* 在 10.7 版中[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/44157) GitLab Core. + +Web IDE 编辑器通过提供具有提交阶段的高级编辑器,可以更快,更轻松地为项目贡献更改. + +## Open the Web IDE[](#open-the-web-ide "Permalink") + +您可以从存储库文件列表和合并请求中查看文件时打开 Web IDE. + +[![Open Web IDE](img/7a0b5b2ee322d8676753d89561c1d3cb.png)](img/open_web_ide.png) + +## File finder[](#file-finder "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18323) in [GitLab Core](https://about.gitlab.com/pricing/) 10.8. + +通过文件查找器,您可以通过搜索快速打开当前分支中的文件. 使用键盘快捷键`Command-p` , `Control-p`或`t` (当编辑器不在焦点时)启动文件查找器. 输入文件名或文件路径片段以开始查看结果. + +## Syntax highlighting[](#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)存储库中找到更完整的受支持语言列表. 在幕后,摩纳哥使用[Monarch](https://microsoft.github.io/monaco-editor/monarch.html)库来突出显示语法. + +如果您缺少对任何语言的语法突出显示支持,我们准备了一份简短指南,介绍如何[为缺少的语言语法突出显示添加支持.](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/javascripts/ide/lib/languages/README.md) + +**注意:**单个文件编辑基于[Ace 编辑器](https://ace.c9.io) . + +### Themes[](#themes "Permalink") + +版本历史 + +* 在 13.0 版的 GitLab 中[引入](https://gitlab.com/groups/gitlab-org/-/epics/2389) . +* GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)了完全日光化黑暗主题. + +GitLab 支持的语法突出显示的所有主题都添加到了 Web IDE 的代码编辑器中. 您可以从个人[资料首选项中](../../profile/preferences.html)选择一个主题. + +主题仅在 Web IDE 文件编辑器中可用, [深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/209808)和[日光化深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)除外,它们适用于整个 Web IDE 屏幕. + +| 日光灯主题 | 日晒黑暗主题 | 黑暗主题 | +| --- | --- | --- | +| [![Solarized Light Theme](img/d79207e6e4f140448c9dd5e6ebe5e380.png)](img/solarized_light_theme_v13_0.png) | [![Solarized Dark Theme](img/c187176d6b8d40e19db360c4c68ffb46.png)](img/solarized_dark_theme_v13_1.png) | [![Dark Theme](img/30152366655be1543f687603c8d34d96.png)](img/dark_theme_v13_0.png) | + +## Configure the Web IDE[](#configure-the-web-ide "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/23352) in [GitLab Core](https://about.gitlab.com/pricing/) 13.1. + +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[](#commit-changes "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 10.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/4539) . +* 在 10.7 版中[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/44157) GitLab Core. +* 从[GitLab 12.7 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/33441) ,将自动暂存文件. +* 从[GitLab 12.9 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/196609) ,删除了对暂存文件的支持,以防止丢失未暂存的数据. 您当前的所有更改都必须提交或放弃. + +进行更改后,单击左下角的" **提交"**按钮以查看已更改文件的列表. + +完成更改后,可以添加提交消息,提交更改并直接创建合并请求. 如果您没有对所选分支的写访问权,则会看到警告,但仍然可以创建新分支并启动合并请求. + +要放弃特定文件中的更改,请在"更改"选项卡中单击该文件上的" **放弃更改"**按钮. 要放弃所有更改,请单击更改侧栏右上角的垃圾桶图标. + +[![Commit changes](img/bad584bc95c83e26be6c67a2b54b26ae.png)](img/commit_changes_v12_9.png) + +## Reviewing changes[](#reviewing-changes "Permalink") + +提交更改之前,可以通过切换到查看模式或从更改列表中选择文件来将它们与上一次提交进行比较. + +当您打开合并请求时,还可以使用其他查看模式,如果您提交更改,该模式将向您显示合并请求 diff 的预览. + +## View CI job logs[](#view-ci-job-logs "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19279) in [GitLab Core](https://about.gitlab.com/pricing/) 11.0. + +您可以使用 Web IDE 通过在 Web IDE 中打开分支或合并请求并打开失败作业的日志来快速修复失败的测试. 通过单击右上角的" **管道"**按钮,可以访问最新管道的所有作业的状态以及当前提交的作业跟踪. + +管道状态也始终显示在左下方的状态栏中. + +## Switching merge requests[](#switching-merge-requests "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19318) in [GitLab Core](https://about.gitlab.com/pricing/) 11.0. + +要在创作的和分配的合并请求之间切换,请单击侧栏顶部的下拉列表以打开合并请求列表. 在切换到其他合并请求之前,您将需要提交或放弃所有更改. + +## Switching branches[](#switching-branches "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/20850) in [GitLab Core](https://about.gitlab.com/pricing/) 11.2. + +To switch between branches of the current project repository, click the dropdown in the top of the sidebar to open a list of branches. You will need to commit or discard all your changes before switching to a different branch. + +## Markdown editing[](#markdown-editing "Permalink") + +版本历史 + +* [GitLab Core](https://about.gitlab.com/pricing/) 10.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18059)了 Markdown 预览. +* 支持在[GitLab Core](https://about.gitlab.com/pricing/) 13.1 中[引入的](https://gitlab.com/gitlab-org/gitlab/-/issues/22822)粘贴图像. + +在 Web IDE 中编辑 Markdown 文件时,可以通过单击文件编辑器上方的" **预览 Markdown"**选项卡来预览更改. Markdown 预览支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) . + +您还可以通过将任何本地图像直接粘贴到 Markdown 文件中来上传它们. 该图像将上传到同一目录,默认情况下命名为`image.png` . 如果已经存在相同名称的另一个文件,则将数字后缀自动添加到文件名. + +## Live Preview[](#live-preview "Permalink") + +版本历史 + +* 在[GitLab Core](https://about.gitlab.com/pricing/) 11.2 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19764) . +* 在 GitLab 13.0 中从*客户端评估* [重命名](https://gitlab.com/gitlab-org/gitlab/-/issues/213853)为*实时预览* . + +您可以使用 Web IDE 在浏览器中预览 JavaScript 项目. 此功能使用 CodeSandbox 编译和捆绑用于预览 Web 应用程序的 JavaScript. + +[![Web IDE Live Preview](img/7efae901a0febb2a8e969415dced271a.png)](img/live_preview_v13_0.png) + +Additionally, for public projects an **在 CodeSandbox 中打开** button is available to transfer the contents of the project into a public CodeSandbox project to quickly share your project with others. + +### Enabling Live Preview[](#enabling-live-preview "Permalink") + +需要在 GitLab 实例管理员设置中启用实时预览功能. 在 GitLab.com 上为所有项目启用了实时预览 + +[![Admin Live Preview setting](img/fb0d67715160a5a049ca0b8e7d7af698.png)](img/admin_live_preview_v13_0.png) + +完成此操作后,您可以使用`package.json`文件和 Web IDE 内的`main`入口点预览项目. 下面显示了一个示例`package.json` . + +``` +{ "main": "index.js", "dependencies": { "vue": "latest" } } +``` + +## Interactive Web Terminals for the Web IDE[](#interactive-web-terminals-for-the-web-ide "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/5426) . +* 在 13.1 版中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/211685) GitLab Core. + +**警告:** Web IDE 的交互式 Web 终端当前处于**Beta 中** . 共享运行程序[尚不支持交互式 Web 终端](https://gitlab.com/gitlab-org/gitlab/-/issues/24674) ,因此您需要使用自己的私有运行程序来使用此功能. + +[交互式 Web 终端](../../../ci/interactive_web_terminal/index.html)使项目[维护者](../../permissions.html#project-members-permissions)用户可以直接从 GitLab(包括通过 Web IDE)访问终端以与 Runner 进行交互. + +### Runner configuration[](#runner-configuration "Permalink") + +为了使交互式 Web 终端正常工作,需要在运行程序中配置一些内容: + +* 跑步者需要[正确配置`[session_server]`](https://docs.gitlab.com/runner/configuration/advanced-configuration.html) . 本部分至少需要一个`session_timeout`值(默认为 1800 秒)和一个`listen_address`值. 如果未定义`advertise_address` ,则使用`listen_address` . +* 如果您对 GitLab 实例使用反向代理,则需要[启用](../../../administration/integration/terminal.html#enabling-and-disabling-terminal-support) Web 终端. + +如果您打开终端并且作业已完成其任务,则终端将在[`[session_server].session_timeout`](https://docs.gitlab.com/runner/configuration/advanced-configuration.html)配置的持续时间内阻止作业完成,直到关闭终端窗口. + +**注意:**并非所有执行程序都[受支持](https://docs.gitlab.com/runner/executors/) . [文件同步](#file-syncing-to-web-terminal)功能仅在 Kubernetes 运行程序上受支持. + +### Web IDE configuration file[](#web-ide-configuration-file "Permalink") + +为了启用 Web IDE 终端,您需要在存储库根目录内创建文件`.gitlab/.gitlab-webide.yml` . 该文件与[CI 配置文件的](../../../ci/yaml/README.html)语法非常相似,但有一些限制: + +* 无法定义全局块(即: `before_script`或`after_script` ) +* 只能将一个名为`terminal`作业添加到该文件中. +* 仅允许使用关键字`image` , `services` , `tags` , `before_script` , `script`和`variables`来配置作业. +* 要连接到交互式终端, `terminal`作业必须仍然处于活动状态并且正在运行,否则终端将无法连接到作业的会话. 默认情况下, `script`关键字的值是`sleep 60`以防止作业结束并为 Web IDE 提供足够的连接时间. 这意味着,如果您覆盖默认`script`值,则必须添加一个使作业保持运行`sleep`的命令,例如`sleep` . + +在下面的代码中,有此配置文件的示例: + +``` +terminal: + # This can be any image that has the necessary runtime environment for your project. + image: node:10-alpine + before_script: + - apt-get update + script: sleep 60 + variables: + RAILS_ENV: "test" + NODE_ENV: "test" +``` + +终端启动后,将显示控制台,我们可以访问项目存储库文件. + +**重要的** . 终端作业取决于分支. 这意味着用于触发和配置终端的配置文件将是 Web IDE 所选分支中的配置文件. + +如果分支中没有配置文件,将显示错误消息. + +### Running interactive terminals in the Web IDE[](#running-interactive-terminals-in-the-web-ide "Permalink") + +如果交互式终端可供当前用户使用,则" **终端"**按钮将显示在 Web IDE 的右侧栏中. 单击此按钮可以打开或关闭终端选项卡. + +打开后,该选项卡将显示" **启动 Web 终端"**按钮. 如果环境配置不正确,则可能禁用此按钮. 如果是这样,状态消息将描述问题. 以下是可能会禁用" **启动 Web 终端"的**一些原因: + +* `.gitlab/.gitlab-webide.yml`不存在或设置错误. +* 该项目没有活跃的私人跑步者. + +如果处于活动状态,则单击" **启动 Web 终端"**按钮将加载终端视图并开始连接到跑步者的终端. 任何时候都可以关闭并重新打开**终端**选项卡,并且不会影响终端的状态. + +当终端启动并成功连接到跑步者时,跑步者的外壳提示将出现在终端中. 在这里,您可以输入将在跑步者的环境中执行的命令. 这类似于在本地终端或通过 SSH 运行命令. + +在终端运行时,可以通过单击**Stop Terminal**停止它. 这将断开终端并停止跑步者的终端工作. 在此处,单击" **重新启动终端"**以启动新的终端会话. + +### File syncing to web terminal[](#file-syncing-to-web-terminal "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/5276) . +* 在 13.1 版中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/211686) GitLab Core. + +Web IDE 中的文件更改可以同步到正在运行的 Web 终端. 这使用户能够在预配置的终端环境中测试其代码更改. + +**注意:**仅将 Web IDE 中的文件更改同步到终端. 在终端中所做的更改**不会**同步到 Web IDE. 此功能仅适用于 Kubernetes Runners. + +要使文件同步到 Web 终端, `.gitlab/.gitlab-webide.yml`文件需要配置`webide-file-sync`服务. 这是使用此服务的 Node JS 项目的示例配置: + +``` +terminal: + # This can be any image that has the necessary runtime environment for your project. + image: + name: node:10-alpine + services: + - name: registry.gitlab.com/gitlab-org/webide-file-sync:latest + alias: webide-file-sync + entrypoint: ["/bin/sh"] + command: ["-c", "sleep 5 && ./webide-file-sync -project-dir $CI_PROJECT_DIR"] + ports: + # The `webide-file-sync` executable defaults to port 3000. + - number: 3000 +``` + +* 项目目录可用**后** ,必须启动`webide-file-sync`可执行文件. 这就是为什么我们需要在`command`添加`sleep 5`的原因. 有关更多信息,请参[见此问题](https://gitlab.com/gitlab-org/webide-file-sync/-/issues/7) . +* `$CI_PROJECT_DIR`是 GitLab Runners 的[预定义环境变量](../../../ci/variables/predefined_variables.html) . 这是您项目的存储库所在的位置. + +一旦将 Web 终端配置为用于文件同步,则在启动 Web 终端后,状态栏中将显示**终端**状态. + +[![Web IDE Client Side Evaluation](img/37238acd557de0d61f0c3be198c56e00.png)](img/terminal_status.png) + +在以下情况下,通过 Web IDE 对文件所做的更改将同步到正在运行的终端: + +* 编辑文件时,按`Ctrl` + `S` (在 Mac 上为`Cmd` + `S` ). +* 编辑文件后,将单击文件编辑器之外的所有内容. +* 创建,删除或重命名文件或文件夹. + +### Limitations[](#limitations "Permalink") + +交互式终端处于 beta 阶段,并将在以后的发行版中继续进行改进. 同时,请注意,用户一次只能拥有一个活动终端. + +### Troubleshooting[](#troubleshooting "Permalink") + +* 如果终端的文本为灰色且无响应,则表明终端已停止,无法再使用. 停止的终端可以通过单击**Restart Terminal 重新启动** . +* 如果终端显示**Connection Failure** ,则终端无法连接到流道. 请尝试停止并重新启动终端. 如果问题仍然存在,请仔细检查流道配置. \ No newline at end of file diff --git a/docs/Wiki.md b/docs/Wiki.md new file mode 100644 index 0000000000000000000000000000000000000000..c03cfc0db3e31e86e9fa2ee0b5ae9befb500b72f --- /dev/null +++ b/docs/Wiki.md @@ -0,0 +1,180 @@ +# Wiki[](#wiki "Permalink") + +每个 GitLab 项目都内置了一个称为 Wiki 的独立文档系统. 默认情况下,所有新项目都启用此功能,您可以在项目的**Wiki**下找到它. + +如果您不想将文档保留在存储库中,但确实希望将其保留在代码所在的项目中,则 Wiki 非常方便. + +您可以在 Web 界面中或[使用 Git 在本地](#adding-and-editing-wiki-pages-locally)创建 Wiki 页面,因为每个 Wiki 都是单独的 Git 存储库. + +## First time creating the Home page[](#first-time-creating-the-home-page "Permalink") + +首次访问 Wiki 时,系统将指示您创建主页. 必须创建主页,因为它是查看 Wiki 时的登录页面. 您只需要填写**内容**部分,然后单击**创建页面** . 您以后可以随时对其进行编辑,因此继续写欢迎信息. + +[![New home page](img/909d20c0dd57155c8ac404a81c2a30cb.png)](img/wiki_create_home_page.png) + +## Creating a new wiki page[](#creating-a-new-wiki-page "Permalink") + +**注意:**需要开发者[权限](../../permissions.html) . + +通过单击可在所有 Wiki 页面中找到的" **新页面"**按钮来创建新页面. + +系统将要求您为新的 Wiki 页面填写标题. + +您可以通过在标题中使用" /"指示子目录来为 Wiki 页面指定完整路径. 任何丢失的目录将自动创建. 例如, `docs/my-page`的标题将创建一个 Wiki 页面,其路径为`/wikis/docs/my-page` . + +输入页面名称后,就该填写其内容了. GitLab Wiki 支持 Markdown,RDoc,AsciiDoc 和 Org. 对于基于 Markdown 的页面,所有[Markdown 功能](../../markdown.html)均受支持,对于链接,则存在一些[特定](../../markdown.html#wiki-specific-markdown)于[Wiki 的](../../markdown.html#wiki-specific-markdown)行为. + +在 Web 界面中,提交消息是可选的,但是 GitLab Wiki 是基于 Git 的,并且需要提交消息,因此如果您不输入消息,则会为您创建一条. + +When you’re ready, click the **建立页面** and the new page will be created. + +[![New page](img/0a61445809db70ca6bf85d986bf52223.png)](img/wiki_create_new_page.png) + +### Attachment storage[](#attachment-storage "Permalink") + +在 GitLab 11.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/33475) . + +从 GitLab 11.3 开始,通过 GitLab 界面上载到 Wiki 的任何文件都将存储在 Wiki Git 存储库中,如果您在本地克隆 Wiki 存储库,该文件将可用. GitLab 11.3 之前的所有上传文件都存储在 GitLab 本身中. 如果希望它们成为 Wiki 的 Git 存储库的一部分,则必须再次上传它们. + +### Special characters in page titles[](#special-characters-in-page-titles "Permalink") + +Wiki 页面作为文件存储在 Git 存储库中,因此某些字符具有特殊含义: + +* 存储页面时,空格会转换为连字符. +* 显示页面时,连字符( `-` )转换回空格. +* 不能使用斜杠( `/` ),因为它们用作路径分隔符. + +### Length restrictions for file and directory names[](#length-restrictions-for-file-and-directory-names "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/24364) . + +许多常见的文件系统[的文件名和目录名限制为 255 个字节](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits) ,尽管 Git 和 GitLab 都支持超出这些限制的路径,但是它们的存在使这些文件系统上的用户无法在本地检出 Wiki 存储库. + +为了避免这种情况,通过 GitLab Web 界面和 API 编辑页面时会强制执行以下限制: + +* 页面标题为 245 个字节(文件扩展名保留 10 个字节). +* 255 个字节的目录名称. + +请注意: + +* 非 ASCII 字符占用多个字节. +* 仍然可以通过 Git 在本地创建超出限制的文件和目录,但这可能会在其他人的计算机上中断. + +## Editing a wiki page[](#editing-a-wiki-page "Permalink") + +**注意:**需要开发者[权限](../../permissions.html) . + +要编辑页面,只需单击" **编辑"**按钮. 从那里开始,您可以更改其内容. 完成后,单击" **保存更改"**以使更改生效. + +### Adding a table of contents[](#adding-a-table-of-contents "Permalink") + +要从 Wiki 页面中的标题生成目录,请使用`[[_TOC_]]`标签. 有关示例,请参阅[目录](../../markdown.html#table-of-contents) . + +## Deleting a wiki page[](#deleting-a-wiki-page "Permalink") + +**注意:**需要维护者[权限](../../permissions.html) . + +仅在编辑页面时才能找到" **删除"**按钮. 单击它并确认您要删除页面. + +## Moving a wiki page[](#moving-a-wiki-page "Permalink") + +通过在[编辑](#editing-a-wiki-page)表单的 Wiki 页面标题中指定完整路径,可以将 Wiki 页面从一个目录移动到另一个目录. + +[![Moving a page](img/7a0180479e056fe1c4aa11c3e8684906.png)](img/wiki_move_page_1.png) + +[![After moving a page](img/70117ebf119dd375e0def463921cc363.png)](img/wiki_move_page_2.png) + +为了将 Wiki 页面移动到根目录,必须在 Wiki 页面标题前加上斜杠( `/` )字符. + +## Viewing a list of all created wiki pages[](#viewing-a-list-of-all-created-wiki-pages "Permalink") + +每个 Wiki 都有一个侧边栏,从中可以找到所创建页面的简短列表. 该列表按字母顺序排列. + +[![Wiki sidebar](img/03d3f984ea7608322b1fd6a7feba47c0.png)](img/wiki_sidebar.png) + +如果页面很多,则不会在侧边栏中列出所有页面. 单击**查看所有页面**以**查看所有页面** . + +## Viewing the history of a wiki page[](#viewing-the-history-of-a-wiki-page "Permalink") + +Wiki 页面随时间的变化记录在 Wiki 的 Git 存储库中,您可以通过单击**Page history**按钮来查看它们. + +从历史记录页面中,您可以看到页面的修订版(Git commit SHA),其作者,提交消息以及上次更新时间. 要查看页面的先前版本的外观,请在" **页面版本"**列中单击修订号. + +[![Wiki page history](img/2fdc2024eee83764328fb015ffd4e392.png)](img/wiki_page_history.png) + +### Viewing the changes between page versions[](#viewing-the-changes-between-page-versions "Permalink") + +在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/15242) . + +类似于版本化的差异文件视图,您可以看到在给定的 Wiki 页面版本中所做的更改: + +1. 导航到您感兴趣的 Wiki 页面. +2. 单击**页面历史记录**以查看所有页面版本. +3. 单击" **更改"**列中的提交消息以获取您感兴趣的版本: + + [![Wiki page changes](img/9cc2ca9eb5afc113cacfbc529374fe3b.png)](img/wiki_page_diffs_v13_2.png) + +## Wiki activity records[](#wiki-activity-records "Permalink") + +版本历史 + +* 在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/14902) . +* 它部署在功能标记后面,默认情况下处于禁用状态. +* 在 GitLab.com 上启用了它. +* 要在 GitLab 自管实例中使用它,请让 GitLab 管理员[启用它](#enable-or-disable-wiki-events-core-only) . + +Wiki 事件(创建,删除和更新)由 GitLab 跟踪,并显示在[用户个人资料](../../profile/index.html#user-profile) , [组](../../group/index.html#view-group-activity)和[项目](../index.html#project-activity)活动页面上. + +### Limitations[](#limitations "Permalink") + +只有在浏览器中或通过 API 进行的编辑才会记录其活动. 当前在活动列表中未列出通过 Git 进行和推送的编辑. + +### Enable or disable Wiki Events[](#enable-or-disable-wiki-events-core-only "Permalink") + +Wiki 事件活动正在开发中,尚未准备好用于生产. 它部署在**默认情况下禁用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/troubleshooting/navigating_gitlab_via_rails_console.html#starting-a-rails-console-session)可以为您的实例启用它. 欢迎您对其进行测试,但使用风险自负. + +要启用它: + +``` +Feature.enable(:wiki_events) +``` + +禁用它: + +``` +Feature.disable(:wiki_events) +``` + +## Adding and editing wiki pages locally[](#adding-and-editing-wiki-pages-locally "Permalink") + +由于 Wiki 基于 Git 存储库,因此您可以像在其他所有 Git 存储库中一样在本地克隆它们并进行编辑. + +在右侧栏上,单击" **克隆存储库",**然后按照屏幕上的说明进行操作. + +根据您要使用的标记语言,您在本地添加到 Wiki 的文件必须具有以下受支持的扩展名之一,否则当推送到 GitLab 时将不会显示这些文件: + +* Markdown 扩展名: `.mdown` , `.mkd` , `.mkdn` , `.md` , `.markdown` . +* AsciiDoc 扩展名: `.adoc` , `.ad` , `.asciidoc` . +* 其他标记扩展名: `.textile` , `.rdoc` , `.org` , `.creole` , `.wiki` , `.mediawiki` , `.rst` . + +## Customizing sidebar[](#customizing-sidebar "Permalink") + +在项目的 Wiki 页面上,有一个右侧导航,默认情况下呈现带有层次结构的完整 Wiki 页面列表. + +要自定义边栏,您可以创建一个名为`_sidebar`的文件以完全替换默认导航. + +**警告:**除非您从自定义导航链接`_sidebar`文件,否则要进行编辑,必须输入以下内容直接从浏览器的地址栏中访问: `https://gitlab.com///-/wikis/_sidebar` : `_sidebar` /- `https://gitlab.com///-/wikis/_sidebar` (对于自我管理的 GitLab 实例,将`gitlab.com`替换为实例的 URL). + +`_sidebar`示例(使用 Markdown 格式): + +``` +### [Home](home) + - [Hello World](hello) +- [Foo](foo) +- [Bar](bar) + --- + +- [Sidebar](_sidebar) +``` + +计划支持使用自定义侧面导航显示生成的目录. \ No newline at end of file diff --git "a/docs/url\345\257\274\345\205\245.md" "b/docs/url\345\257\274\345\205\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..1fad93b282989889173b92d39a7d07adceec6012 --- /dev/null +++ "b/docs/url\345\257\274\345\205\245.md" @@ -0,0 +1,12 @@ +# 通过URL导入[](#通过URL导入 "Permalink") + +您可以通过提供 Git URL 来导入现有存储库: + +1. 在您的 GitLab 仪表板中,单击" **新建项目".** +2. 切换到**导入项目**选项卡 +3. 点击**按 URL 回购**按钮 +4. 填写" Git 存储库 URL"和其余项目字段 +5. 单击**创建项目**开始导入过程 +6. 完成后,您将被重定向到新创建的项目 + +[![Import project by repo URL](img/731943edb4428a3eb27c86d8d454d0e0.png)](img/import_projects_from_repo_url.png) \ No newline at end of file diff --git "a/docs/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" "b/docs/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..41332df6b25a681b305cb6263d27e75f7366c675 --- /dev/null +++ "b/docs/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" @@ -0,0 +1,48 @@ +# 与群组共享项目[](#与群组共享项目 "Permalink") + +您可以与其他[小组](../../group/index.html)共享项目. 这样就可以通过一个操作将一组用户添加到项目中. + +## Groups as collections of users[](#groups-as-collections-of-users "Permalink") + +组主要用于[创建项目集合](../../group/index.html) ,但是您还可以利用以下事实:组定义了*用户*集合,即组成员. + +## Sharing a project with a group of users[](#sharing-a-project-with-a-group-of-users "Permalink") + +在 GitLab 中授予一组用户(例如"工程")访问项目(例如" Acme 项目")的主要机制是使"工程"组成为" Project Acme"的所有者. 但是,如果" Acme 项目"已经属于另一个小组,比如"开源",该怎么办? 这是可以使用组共享功能的地方. + +与"工程"组共享" Acme 项目": + +1. 对于" Acme 项目",请使用左侧导航菜单转到" **会员"** + + [![share project with groups](img/0d1c10a8d14f11dd831b96878fc521e5.png)](img/share_project_with_groups.png) + +2. 选择"与组共享"标签 +3. 添加具有您选择的最大访问权限级别的"工程"组 +4. 点击**共享**分享 + + [![share project with groups tab](img/0e2287fb4b32bf9dff45f3255ddd45fe.png)](img/share_project_with_groups_tab.png) + +5. 与"工程"共享"项目 Acme"后,该项目将列在组仪表板上 + + [!['Project Acme' is listed as a shared project for 'Engineering'](img/000b14e609fee563642c55e238caca88.png)](img/other_group_sees_shared_project.png) + +请注意,您只能与以下项目共享一个项目: + +* 您具有明确定义的成员资格的组 +* 包含嵌套子组或项目的组,您对其具有明确定义的角色 + +管理员可以与系统中的任何组共享项目. + +## Maximum access level[](#maximum-access-level "Permalink") + +在上面的示例中,"工程"成员的最大"开发人员"访问级别意味着"工程"中具有较高访问级别的用户("维护者"或"所有者")将仅对" Acme 项目"具有"开发者"访问权限'. + +## Sharing public project with private group[](#sharing-public-project-with-private-group "Permalink") + +与私有组共享公共项目时,项目的所有者和维护者将在`members`页面上看到该组的名称. 所有者还可以在问题或合并请求中提及他们时,可以看到他们无权访问的私人群组的成员. + +## Share project with group lock[](#share-project-with-group-lock "Permalink") + +可以防止一个组中[的项目与另一个组共享一个项目](../members/share_project_with_groups.html) . 这样可以更严格地控​​制项目访问. + +了解更多有关[使用组锁共享的信息](../../group/index.html#share-with-group-lock) . \ No newline at end of file diff --git "a/docs/\344\270\252\344\272\272\345\201\217\345\245\275.md" "b/docs/\344\270\252\344\272\272\345\201\217\345\245\275.md" new file mode 100644 index 0000000000000000000000000000000000000000..1de0f6b986ab30a3aed327290f604cf10339bdff --- /dev/null +++ "b/docs/\344\270\252\344\272\272\345\201\217\345\245\275.md" @@ -0,0 +1,144 @@ +# 个人偏好[](#个人偏好 "Permalink") + +用户的个人资料首选项页面允许用户自定义 GitLab 的各个方面. + +要导航至个人资料的首选项,请执行以下操作: + +1. 单击您的头像. +2. Select **Settings**. +3. 单击边栏中的**首选项** . + +## Navigation theme[](#navigation-theme "Permalink") + +GitLab 导航主题设置可让您个性化 GitLab 体验. 您可以从多个颜色主题中进行选择,这些主题可以为顶部导航和左侧导航添加独特的颜色. 使用单独的颜色主题可以帮助您区分不同的 GitLab 实例. + +默认主题为 Indigo. 您可以选择 10 个主题: + +* Indigo +* 浅靛蓝 +* Blue +* 浅蓝 +* Green +* 浅绿色 +* Red +* 红灯 +* Dark +* Light + +[![Profile preferences navigation themes](img/c6c38f70c273cc4412f6d3bd29af3829.png)](img/profil-preferences-navigation-theme.png) + +## Dark mode[](#dark-mode "Permalink") + +[介绍](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28252)在 GitLab 13.1 作为一个 alpha 版本. + +manbetx 客户端打不开已经开始在黑暗模式下工作! 深色[版本](https://about.gitlab.com/handbook/product/#alpha)的[Alpha 版本](https://about.gitlab.com/handbook/product/#alpha)本着迭代的精神和[Alpha 版本](https://about.gitlab.com/handbook/product/#alpha)的较低期望提供. + +[黑暗主题史诗中](https://gitlab.com/groups/gitlab-org/-/epics/2902)追踪了黑暗模式的进展. 见史诗: + +* 已知问题列表. +* 我们计划的方向和下一步. + +如果发现未列出的问题,请在史诗上发表评论或创建新的问题. + +出于 MVC 和兼容性原因,暗模式可用作导航主题. 将来,我们计划使其在自己的部分中可配置,同时支持[不同的导航主题](https://gitlab.com/gitlab-org/gitlab/-/issues/219512) . + +**注意:**深色主题当前仅适用于"深色"语法突出显示. + +## Syntax highlighting theme[](#syntax-highlighting-theme "Permalink") + +**注意:** GitLab 使用[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)库以突出显示语法. 有关支持的语言的列表,请访问相应库的文档. + +更改此设置可让您在 GitLab 上查看语法突出显示的代码时自定义颜色主题. + +默认语法主题为"白色",您可以在 5 个不同的主题中进行选择: + +* White +* Dark +* 日光灯 +* 日光暗 +* Monokai + +[![Profile preferences syntax highlighting themes](img/bde796b0c195045db9849eef2842bd0e.png)](img/profile-preferences-syntax-themes.png) + +您在 13.0 中[引入](https://gitlab.com/groups/gitlab-org/-/epics/2389)的主题也适用于[Web IDE](../project/web_ide/index.html)的代码编辑器和[Snippets](../snippets.html) . 主题仅在 Web IDE 文件编辑器中可用, [深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/209808)和[日光化深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)除外,它们适用于整个 Web IDE 屏幕. + +## Behavior[](#behavior "Permalink") + +以下设置可让您自定义 GitLab 布局的行为以及仪表板和项目登录页面的默认视图. + +### Layout width[](#layout-width "Permalink") + +可以根据喜好将 GitLab 设置为使用不同的宽度. 在固定(最大`1280px` )和流畅( `100%` )应用程序布局之间选择. + +**注意:**虽然使用固定版式时`1280px`是标准最大宽度,但是某些页面仍根据内容使用 100%宽度. + +### Default dashboard[](#default-dashboard "Permalink") + +对于有权访问大量项目但仅能跟上少数项目的用户,默认"仪表板"页面上的活动量可能会很大. 更改此设置可让您重新定义默认的仪表板. + +您可以在此处使用 8 个选项作为默认仪表板视图: + +* 您的项目(默认) +* 已加星标的项目 +* 您的项目活动 +* 已加星标项目的活动 +* 您的团体 +* Your [Todos](../todos.html) +* 分配的问题 +* 分配的合并请求 +* 操作仪表板 + +### Group overview content[](#group-overview-content "Permalink") + +网上**论坛概述内容**下拉菜单允许您选择网上论坛首页上显示的信息. + +您可以选择 2 个选项: + +* 详细信息(默认) +* [Security dashboard](../application_security/security_dashboard/index.html) + +### Project overview content[](#project-overview-content "Permalink") + +项目概述内容设置允许您选择想要在项目主页上看到的内容. + +您可以选择 3 个选项: + +* 文件和自述文件(默认) +* Readme +* Activity + +### Tab width[](#tab-width "Permalink") + +您可以在 GitLab 的各个部分设置标签字符的显示宽度,例如 blob,diff 和片段. + +**注意:** GitLab 的某些部分不遵守此设置,包括 WebIDE,文件编辑器和 Markdown 编辑器. + +## Localization[](#localization "Permalink") + +### Language[](#language "Permalink") + +从支持的语言列表中选择首选语言. + +*此功能是实验性的,翻译尚未完成.* + +### First day of the week[](#first-day-of-the-week "Permalink") + +可以针对日历视图和日期选择器自定义一周的第一天. + +您可以选择以下选项之一作为一周的第一天: + +* Saturday +* Sunday +* Monday + +如果选择**System Default** ,则将使用系统范围的默认设置. + +## Integrations[](#integrations "Permalink") + +使用第三方服务配置您的首选项,这些服务可增强您的 GitLab 体验. + +### Sourcegraph[](#sourcegraph "Permalink") + +**注意:**仅当 GitLab 管理员已启用 Sourcegraph 时,此设置才可见. + +管理由 Sourcegraph 支持的集成代码智能功能的可用性. 查看[Sourcegraph 功能文档](../../integration/sourcegraph.html#enable-sourcegraph-in-user-preferences)以获取更多信息. \ No newline at end of file diff --git "a/docs/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" "b/docs/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..9cadccd14a3089548843429e8caee680461346ba --- /dev/null +++ "b/docs/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" @@ -0,0 +1,95 @@ +# 个人访问令牌[](#个人访问令牌 "Permalink") + +版本历史 + +* 在 GitLab 8.8 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3749) . +* 在 GitLab 12.6 中添加了[有关令牌过期的通知](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) . +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.6 中添加了[令牌生存期限制](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) . + +If you’re unable to use [OAuth2](../../api/oauth2.html), you can use a personal access token to authenticate with the [GitLab API](../../api/README.html#personalproject-access-tokens). + +您还可以将个人访问令牌与 Git 一起使用,以通过 HTTP 或 SSH 进行身份验证. 启用[两因素身份验证(2FA)](../account/two_factor_authentication.html)时,需要个人访问令牌. 在这两种情况下,都可以使用令牌代替密码进行身份验证. + +个人访问令牌在您定义的日期 UTC 午夜到期. + +* GitLab 每天在世界标准时间 01:00 AM 进行检查,以识别将在 7 天内到期的个人访问令牌. 这些令牌的所有者通过电子邮件通知. +* 在 GitLab Ultimate 中,管理员可以[限制个人访问令牌的寿命](../admin_area/settings/account_and_limit_settings.html#limiting-lifetime-of-personal-access-tokens-ultimate-only) . +* 在 GitLab Ultimate 中,管理员可以[切换个人访问令牌到期的执行](../admin_area/settings/account_and_limit_settings.html#optional-enforcement-of-personal-access-token-expiry-ultimate-only) . + +有关如何使用个人访问令牌向 API 进行身份验证的示例,请参见[API 文档中](../../api/README.html#personalproject-access-tokens)的以下部分. + +GitLab 还提供了[模拟令牌](../../api/README.html#impersonation-tokens) ,这些[令牌](../../api/README.html#impersonation-tokens)是管理员通过 API 创建的. 它们非常适合作为特定用户的自动身份验证. + +## Creating a personal access token[](#creating-a-personal-access-token "Permalink") + +您可以在 GitLab 个人资料中创建任意数量的个人访问令牌. + +1. 登录到 GitLab. +2. 点击右上角的头像,然后选择**设置** . +3. 在" **用户设置"**菜单上,选择" **访问令牌"** . +4. 选择令牌的名称和可选的到期日期. +5. 选择[所需的范围](#limiting-scopes-of-a-personal-access-token) . +6. 单击**创建个人访问令牌**按钮. +7. 将个人访问令牌保存在安全的地方. 离开或刷新页面后,将无法再次访问它. + +### Revoking a personal access token[](#revoking-a-personal-access-token "Permalink") + +您可以随时单击" **活动个人访问令牌"**区域下的相应" **撤消"**按钮来撤消任何个人访问令牌. + +### Token activity[](#token-activity "Permalink") + +您可以从" **个人访问令牌"**页面**查看**上次使用**令牌的时间** . 令牌使用情况的更新每 24 小时固定一次. 对[API 资源](../../api/api_resources.html)和[GraphQL API 的](../../api/graphql/index.html)请求将更新令牌的用法. + +## Limiting scopes of a personal access token[](#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](../../api/users.html)中的任何`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) | 如果项目是私有的并且需要授权,则允许读取(拉出) [容器注册表](../packages/container_registry/index.html)图像. | +| `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 存储库是必需的. | + +## Programmatically creating a personal access token[](#programmatically-creating-a-personal-access-token "Permalink") + +您可以以编程方式创建预定的个人访问令牌,以用于自动化或测试. 您将需要足够的访问权限才能为 GitLab 实例运行[Rails 控制台会话](../../administration/troubleshooting/debug.html#starting-a-rails-console-session) . + +要使用用户名`automation-bot`创建属于用户的令牌,请在 Rails 控制台( `sudo gitlab-rails console` )中运行以下`sudo gitlab-rails console` : + +``` +user = User.find_by_username('automation-bot') +token = user.personal_access_tokens.create(scopes: [:read_user, :read_repository], name: 'Automation token') +token.set_token('token-string-here123') +token.save! +``` + +使用[GitLab Rails Runner](../../administration/troubleshooting/debug.html#using-the-rails-runner)可以将其简化为单行 shell 命令: + +``` +sudo gitlab-rails runner "token = User.find_by_username('automation-bot').personal_access_tokens.create(scopes: [:read_user, :read_repository], name: 'Automation token'); token.set_token('token-string-here123'); token.save!" +``` + +**注意:**令牌字符串的长度必须为 20 个字符,否则将不会被识别为个人访问令牌. + +有效范围的列表及其作用可以[在源代码中](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/auth.rb)找到. + +## Programmatically revoking a personal access token[](#programmatically-revoking-a-personal-access-token "Permalink") + +您可以通过编程方式撤消个人访问令牌. 您将需要足够的访问权限才能为 GitLab 实例运行[Rails 控制台会话](../../administration/troubleshooting/debug.html#starting-a-rails-console-session) . + +要撤销已知令牌`token-string-here123` ,请在 Rails 控制台( `sudo gitlab-rails console` )中运行以下`sudo gitlab-rails console` : + +``` +token = PersonalAccessToken.find_by_token('token-string-here123') +token.revoke! +``` + +可以使用[GitLab Rails Runner](../../administration/troubleshooting/debug.html#using-the-rails-runner)将其[简化](../../administration/troubleshooting/debug.html#using-the-rails-runner)为单行 shell 命令: + +``` +sudo gitlab-rails runner "PersonalAccessToken.find_by_token('token-string-here123').revoke!" +``` \ No newline at end of file diff --git "a/docs/\344\270\276\346\212\245\347\224\250\346\210\267.md" "b/docs/\344\270\276\346\212\245\347\224\250\346\210\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ace8269c163745f403ec47c3e3c7fee8d38aa86 --- /dev/null +++ "b/docs/\344\270\276\346\212\245\347\224\250\346\210\267.md" @@ -0,0 +1,53 @@ +# 举报用户[](#举报用户 "Permalink") + +您可以将其他 GitLab 用户的滥用情况报告给 GitLab 管理员. + +然后,GitLab 管理员[可以选择](admin_area/abuse_reports.html) : + +* 删除用户,这会将其从实例中删除. +* 阻止用户,这将拒绝他们访问实例. +* 或删除报告,以保留用户对实例的访问权限. + +您可以通过以下方式报告用户: + +* [Profile](#reporting-abuse-through-a-users-profile) +* [Comments](#reporting-abuse-through-a-users-comment) +* [Issues and Merge requests](#reporting-abuse-through-a-users-issue-or-merge-request) + +## Reporting abuse through a user’s profile[](#reporting-abuse-through-a-users-profile "Permalink") + +要从用户的个人资料页面举报滥用行为,请执行以下操作: + +1. 单击用户个人资料右上方的感叹号报告滥用按钮. +2. 完成滥用情况报告. +3. Click the **发送报告** button. + +## Reporting abuse through a user’s comment[](#reporting-abuse-through-a-users-comment "Permalink") + +要报告用户评论中的滥用行为,请执行以下操作: + +1. 单击垂直省略号(⋮)其他操作按钮以打开下拉列表. +2. Select **举报为滥用**. +3. 完成滥用情况报告. +4. 点击**发送报告**按钮. + +**注意:**在滥用情况报告的" **消息"**字段中,将预先填写报告用户评论的 URL. + +## Reporting abuse through a user’s issue or merge request[](#reporting-abuse-through-a-users-issue-or-merge-request "Permalink") + +**报告滥用**按钮显示在问题或合并请求的右上方: + +* 对于单击有权关闭问题或合并请求的用户,从单击" **关闭问题"**或" **关闭合并请求"**按钮时出现的菜单中选择**"报告滥用**情况". +* 查看问题或合并请求时,对于没有权限关闭问题或合并请求的用户. + +显示" **举报滥用行为"**按钮后,要提交滥用行为报告: + +1. 点击**举报滥用行为**按钮. +2. 提交滥用情况报告. +3. 点击**发送报告**按钮. + +**注意:**在滥用情况报告的" **消息"**字段中,将预先填写报告用户的问题或合并请求的 URL. + +## Managing abuse reports[](#managing-abuse-reports "Permalink") + +管理员能够查看和解决滥用报告. 有关更多信息,请参阅[滥用报告管理文档](admin_area/abuse_reports.html) . \ No newline at end of file diff --git "a/docs/\344\273\243\347\240\201\344\273\223\345\272\223.md" "b/docs/\344\273\243\347\240\201\344\273\223\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..28a60c4e0b378c6734a8b8726b4f8118d58cc52e --- /dev/null +++ "b/docs/\344\273\243\347\240\201\344\273\223\345\272\223.md" @@ -0,0 +1,181 @@ +# 代码仓库[](#代码仓库 "Permalink") + +[存储库](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)是用于将代码库存储在 GitLab 中并通过版本控制对其进行更改的存储库. 存储库是[项目的](../index.html)一部分,它具有许多其他功能. + +## Create a repository[](#create-a-repository "Permalink") + +要创建一个新的存储库,您需要做的就是[创建一个新项目](../../../gitlab-basics/create-project.html)或[创建](../../../gitlab-basics/create-project.html) [一个现有项目](forking_workflow.html) . + +创建新项目后,您可以通过 UI(请参阅以下部分)或通过命令行添加新文件. 要从命令行添加文件,请遵循创建新项目时在屏幕上显示的说明,或在[命令行基础](../../../gitlab-basics/start-using-git.html)文档中通读它们. + +> **重要提示:**出于安全原因,强烈建议您在使用命令行时[通过 SSH 与 GitLab 连接](../../../ssh/README.html) . + +## Files[](#files "Permalink") + +使用存储库将文件存储在 GitLab 中. 在[GitLab 12.10 及更高版本中](https://gitlab.com/gitlab-org/gitlab/-/issues/33806) ,您将在存储库的文件树中根据其扩展名在文件名旁边看到一个图标: + +[![Repository file icons](img/8489a6c45ad75964ea7b4b54b9d9fcaa.png)](img/file_ext_icons_repo_v12_10.png) + +### Create and edit files[](#create-and-edit-files "Permalink") + +通过将文件推送到 GitLab,将代码库托管在 GitLab 存储库中. 您可以使用用户界面(UI),也可以[通过命令行将](../../../gitlab-basics/command-line-commands.html#start-working-on-your-project)本地计算机与 GitLab 连接. + +要配置[GitLab CI / CD](../../../ci/README.html)来构建,测试和部署代码,请在存储库的根目录中添加一个名为[`.gitlab-ci.yml`](../../../ci/quick_start/README.html)的文件. + +**从用户界面:** + +GitLab 的用户界面允许您执行许多 Git 命令,而无需触摸命令行. 即使您定期使用命令行,有时[通过 GitLab UI](web_editor.html)也更容易做到: + +* [Create a file](web_editor.html#create-a-file) +* [Upload a file](web_editor.html#upload-a-file) +* [File templates](web_editor.html#template-dropdowns) +* [Create a directory](web_editor.html#create-a-directory) +* [Start a merge request](web_editor.html#tips) +* [Find file history](git_history.html) +* [Identify changes by line (Git blame)](git_blame.html) + +**在命令行中:** + +要开始使用命令行,请通读[命令行基础文档](../../../gitlab-basics/command-line-commands.html) . + +### Find files[](#find-files "Permalink") + +使用 GitLab 的[文件查找器](file_finder.html)在存储库中搜索文件. + +### Supported markup languages and extensions[](#supported-markup-languages-and-extensions "Permalink") + +GitLab 支持多种标记语言(有时称为[轻量标记语言](https://en.wikipedia.org/wiki/Lightweight_markup_language) ),您可以将其用于存储库中文件的内容. 它们主要用于文档目的. + +只需为文件选择正确的扩展名,GitLab 就会根据标记语言来渲染它们. + +| 标记语言 | Extensions | +| --- | --- | +| 纯文本 | `txt` | +| [Markdown](../../markdown.html) | `mdown`, `mkd`, `mkdn`, `md`, `markdown` | +| [reStructuredText](https://docutils.sourceforge.io/rst.html) | `rst` | +| [AsciiDoc](../../asciidoc.html) | `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` | + +### Repository README and index files[](#repository-readme-and-index-files "Permalink") + +当存储库中存在`README`或`index`文件时,它的内容将由 GitLab 自动预渲染,而无需打开它. + +它们可以是纯文本,也可以具有[受支持的标记语言](#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)文件用于许多领域的交互式计算,并且包含用户会话的完整记录,并包括代码,叙述性文本,方程式和丰富的输出. + +[Read how to use Jupyter notebooks with GitLab.](jupyter_notebooks/index.html) + +### OpenAPI viewer[](#openapi-viewer "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19515) . + +如果文件名包含`openapi`或`swagger`且扩展名为`yaml` , `yml`或`json` ,则 GitLab 可以使用其文件查看器呈现 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. 在 GitLab 的用户界面中导航至存储库中的 OpenAPI 文件. +2. 单击位于"显示源"和"编辑"按钮之间的"显示 OpenAPI"按钮(找到 OpenAPI 文件后,它将替换"显示渲染的文件"按钮). + +## Branches[](#branches "Permalink") + +有关详细信息,请参见[分支](branches/index.html) . + +## Commits[](#commits "Permalink") + +[提交更改时](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository) ,您会将这些更改引入分支机构. 通过命令行,您可以在提交之前多次提交. + +* **提交消息:**提交消息对于标识正在更改的内容以及更重要的原因至关重要. 在 GitLab 中,您可以将关键字添加到提交消息中,以执行以下操作之一: + * **触发 GitLab CI / CD 管道:**如果您的项目配置有[GitLab CI / CD](../../../ci/README.html) ,则将在每次推送而不是每次提交时触发一个管道. + * **跳过管道:**您可以在提交消息中添加关键字[`[ci skip]`](../../../ci/yaml/README.html#skip-pipeline) ,GitLab CI / CD 将跳过该管道. + * **交叉链接问题和合并请求:** [交叉链接](../issues/crosslinking_issues.html#from-commit-messages)非常适合跟踪工作流程中与之相关的内容. 如果您在提交消息中提到问题或合并请求,它们将显示在各自的线程上. +* **樱桃选择提交:**在 GitLab 中,您可以直接从 UI [樱桃选择提交](../merge_requests/cherry_pick_changes.html#cherry-picking-a-commit) . +* **还原提交:**轻松[将提交](../merge_requests/revert_changes.html#reverting-a-commit)从 UI [还原](../merge_requests/revert_changes.html#reverting-a-commit)到所选分支. +* **签署提交:**使用 GPG [签署您的提交](gpg_signed_commits/index.html) . + +## Project and repository size[](#project-and-repository-size "Permalink") + +在项目的" **详细信息"**页面上报告项目的大小. 报告的大小最多每 15 分钟更新一次,因此可能无法反映最近的活动. 显示的文件大小包括存储库文件,工件和 LFS. + +由于压缩,内务处理和其他因素,每个项目的项目规模可能会略有不同. + +[储存库大小限制](../../admin_area/settings/account_and_limit_settings.html)可以由管理员设置. GitLab.com 的存储库大小限制[由 GitLab 设置](../../gitlab_com/index.html#repository-size-limit) . + +## Contributors[](#contributors "Permalink") + +代码库的所有贡献者都显示在项目的**设置>贡献者下** . + +它们是从协作者中以最少的提交次数排序的,并显示在一个漂亮的图形上: + +[![contributors to code](img/d69ab181c07176aa054b0ceac08b702c.png)](img/contributors_graph.png) + +## Repository graph[](#repository-graph "Permalink") + +存储库图形以可视方式显示存储网络的历史记录,包括分支和合并. 这可以帮助您可视化存储库中使用的 Git 流策略: + +[![repository Git flow](img/a1efb7c23a97e2901852465c9168914f.png)](img/repo_graph.png) + +在您项目的**Repository> Graph**下找到它. + +## Repository Languages[](#repository-languages "Permalink") + +对于每个存储库的默认分支,GitLab 将确定使用了哪种编程语言,并将其显示在项目页面上. 如果缺少此信息,将在更新项目上的默认分支后添加. 此过程最多可能需要 5 分钟. + +[![Repository Languages bar](img/e2e835cd5cd1be1afaa876fde2475fe5.png)](img/repository_languages_v12_2.gif) + +Not all files are detected, among others; documentation, vendored code, and most markup languages are excluded. This behavior can be adjusted by overriding the default. For example, to enable `.proto` files to be detected, add the following to `.gitattributes` in the root of your repository. + +``` +*.proto linguist-detectable=true +``` + +## Locked files[](#locked-files-premium "Permalink") + +使用[文件锁定](../file_lock.html)来锁定文件,以防止发生任何冲突的更改. + +## Repository’s API[](#repositorys-api "Permalink") + +您可以通过[存储库 API](../../../api/repositories.html)访问您的[存储库](../../../api/repositories.html) . + +## Clone in Apple Xcode[](#clone-in-apple-xcode "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/45820) in GitLab 11.0 + +现在,可以使用位于用于克隆项目的 Git URL 旁边的新的" **在 Xcode 中打开"**按钮**在 Xcode 中**克隆包含`.xcodeproj`或`.xcworkspace`目录的项目. 该按钮仅在 macOS 上显示. + +## Download Source Code[](#download-source-code "Permalink") + +在 GitLab 11.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/24704)了对目录下载的支持. + +可以从 UI 下载存储在存储库中的源代码. 单击下载图标,将打开一个下拉列表,其中包含下载以下内容的链接: + +[![Download source code](img/0f88b0e1a49600472f2922218cec1ed7.png)](img/download_source_code.png) + +* **源代码:**允许用户在他们当前正在查看的分支上下载源代码. 可用扩展名: `zip` , `tar` , `tar.gz`和`tar.bz2` . +* **目录:**仅在查看子目录时显示. 这使用户可以下载他们当前正在查看的特定目录. 也可以在`zip` , `tar` , `tar.gz`和`tar.bz2` . +* **工件:**允许用户下载最新 CI 构建的工件. \ No newline at end of file diff --git "a/docs/\344\277\235\346\212\244Tag.md" "b/docs/\344\277\235\346\212\244Tag.md" new file mode 100644 index 0000000000000000000000000000000000000000..de5c80584ce99442e551708a6c3a8d84117d95a6 --- /dev/null +++ "b/docs/\344\277\235\346\212\244Tag.md" @@ -0,0 +1,48 @@ +# 保护Tag[](#保护Tag "Permalink") + +在 GitLab 9.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/10356) . + +受保护的标签可控制谁有权创建标签,并防止创建后意外更新或删除. 每个规则都允许您匹配单个标签名称,或使用通配符一次控制多个标签. + +此功能从[受保护的分支](protected_branches.html)演变而来 + +## Overview[](#overview "Permalink") + +受保护的标签将阻止任何人更新或删除标签,并且将根据您选择的权限阻止创建匹配的标签. 默认情况下,任何未经维护者许可的人都将无法创建标签. + +## Configuring protected tags[](#configuring-protected-tags "Permalink") + +为了保护标签,您需要至少具有维护者权限级别. + +1. 导航到项目的**"设置">"存储库"** : + + [![Repository Settings](img/bec396562e8fe025cb7009de091ff2aa.png)](img/project_repository_settings.png) + +2. 从**标签**下拉菜单中,选择要保护或输入的标签,然后点击**创建通配符** . 在下面的屏幕截图中,我们选择保护所有与`v*`匹配的标签: + + [![Protected tags page](img/8ab62c2dee9f26abae9b7f794b4f5fae.png)](img/protected_tags_page_v12_3.png) + +3. 从" **允许创建"**下拉列表中,选择谁有权创建匹配的标签,然后单击" **保护"** : + + [![Allowed to create tags dropdown](img/52fecb33c2f168630e9a8f7c95aaf517.png)](img/protected_tags_permissions_dropdown_v12_3.png) + +4. 完成后,受保护的标签将显示在" **受保护的标签"**列表中: + + [![Protected tags list](img/572645049ee5ab43733f62fc45312843.png)](img/protected_tags_list_v12_3.png) + +## Wildcard protected tags[](#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`也将沿用此设置. + +如果单击受保护标签的名称,将显示所有匹配标签的列表: + +[![Protected tag matches](img/cc52a99e48b72695add0c3e8efab158f.png)](img/protected_tag_matches.png) \ No newline at end of file diff --git "a/docs/\344\277\235\346\212\244\345\210\206\346\224\257.md" "b/docs/\344\277\235\346\212\244\345\210\206\346\224\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..aab8192a6fa597803e40ffd4024a1484610a47e2 --- /dev/null +++ "b/docs/\344\277\235\346\212\244\345\210\206\346\224\257.md" @@ -0,0 +1,156 @@ +# 保护分支[](#保护分支 "Permalink") + +GitLab 中的[权限](../permissions.html)基本上是围绕对存储库和分支具有读或写权限的想法定义的. 为了对某些分支机构施加进一步的限制,可以对其进行保护. + +## Overview[](#overview "Permalink") + +默认情况下,受保护的分支执行以下四个简单的操作: + +* 它会阻止除具有维护者权限的用户之外的所有用户创建它(如果尚未创建). +* 它可以防止除具有**允许的**权限的用户以外的其他任何人推送. +* 它可以防止**任何人**用力推动分支机构. +* 它可以防止**任何人**删除分支. + +**注意:**允许 GitLab 管理员推送到受保护的分支. + +有关随时间的变化,请参见" [更改日志"](#changelog)部分. + +默认的分支保护级别在[管理区域中](../admin_area/settings/visibility_and_access_controls.html#default-branch-protection)设置. + +## Configuring protected branches[](#configuring-protected-branches "Permalink") + +要保护分支,您需要至少具有维护者权限级别. 请注意,默认情况下`master`分支是受保护的. + +1. 导航到项目的**"设置"➔"存储库"** +2. 滚动查找" **受保护的分支"**部分. +3. 从" **分支"**下拉菜单中,选择要保护的分支,然后单击" **保护"** . 在下面的屏幕截图中,我们选择了`develop`分支. + + [![Protected branches page](img/c29b503c10922622f8ec612bd5168b10.png)](img/protected_branches_page_v12_3.png) + +4. 完成后,受保护的分支将出现在"受保护的分支"列表中. + + [![Protected branches list](img/265f035427185c0998b05886114d104b.png)](img/protected_branches_list_v12_3.png) + +## Using the Allowed to merge and Allowed to push settings[](#using-the-allowed-to-merge-and-allowed-to-push-settings "Permalink") + +在 GitLab 8.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) . + +从 GitLab 8.11 开始,我们增加了分支保护的另一层,它提供了对受保护分支的更精细的管理. "开发人员可以推送"选项由"允许推送"设置代替,该设置可以设置为允许/禁止维护者和/或开发人员推送到受保护的分支. + +使用"允许推送"和"允许合并"设置,您可以控制不同角色可以在受保护分支中执行的操作. 例如,您可以将"允许推送"设置为"无人",将"允许合并"设置为"开发人员+维护人员",以要求*每个人都*提交合并请求,以请求更改进入受保护分支. 这与[GitLab 工作](../../topics/gitlab_flow.html)流程等[工作流程](../../topics/gitlab_flow.html)兼容. + +但是,有些工作流程不需要这样做,只有防止强行推动和移除分支才有用. 对于这些工作流程,您可以通过将"允许推送"设置为"开发人员+维护人员"来允许具有写访问权的每个人推送到受保护的分支. + +您可以在创建受保护的分支时设置"允许推送"和"允许合并"选项,也可以在之后通过从"已保护"区域的下拉列表中选择所需的选项来设置. + +[![Developers can push](img/eca0c9ec85c6dfc8dbde06c368a9d94d.png)](img/protected_branches_devs_can_push_v12_3.png) + +如果在创建受保护的分支时未选择任何这些选项,则默认情况下会将它们设置为"维护者". + +## Restricting push and merge access to certain users[](#restricting-push-and-merge-access-to-certain-users-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) in [GitLab Starter](https://about.gitlab.com/pricing/) 8.11. + +使用 GitLab 企业版,您可以通过选择角色(维护者,开发者)以及某些用户来限制对受保护分支的访问. 从下拉菜单中选择您要合并或推送访问的角色和/或用户. + +[![Select roles and users](img/8fc9989164e038f62ee1015c2f477d84.png)](img/protected_branches_select_roles_and_users.png) + +单击" **保护"** ,该分支将出现在"受保护的分支"列表中. + +[![Roles and users list](img/0387751ed4b8717777ebac2706c2d637.png)](img/protected_branches_select_roles_and_users_list.png) + +## Wildcard protected branches[](#wildcard-protected-branches "Permalink") + +在 GitLab 8.10 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4665) . + +您可以指定一个通配符保护的分支,该分支将保护所有与通配符匹配的分支. 例如: + +| 通配符保护的分支 | 匹配分支 | +| --- | --- | +| `*-stable` | `production-stable`, `staging-stable` | +| `production/*` | `production/app-server`, `production/load-balancer` | +| `*gitlab*` | `gitlab`, `gitlab/staging`, `master/gitlab/production` | + +受保护的分支设置(如"开发人员可以推送")适用于所有匹配的分支. + +两个不同的通配符可能会匹配同一分支. 例如, `*-stable` `production-stable`和`production-*`都将与`production-stable`分支匹配. 在这种情况下,如果*这些*受保护的分支有这样一个设定"允许推送",然后`production-stable`也将继承这一设置. + +如果单击受保护分支的名称,将显示所有匹配分支的列表: + +[![Protected branch matches](img/09870a42c6e3e94e7553f338a65c0b6d.png)](img/protected_branches_matches.png) + +## Creating a protected branch[](#creating-a-protected-branch "Permalink") + +在 GitLab 11.9 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361) . + +当受保护的分支或通配符受保护的分支设置为" [**不允许任何人** **推送"时**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,只要允许开发人员(和具有较高[权限级别的](../permissions.html)用户) [**合并**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,就可以创建新的受保护分支. 这只能通过 UI 或 API 来完成(为避免意外地从命令行或 Git 客户端应用程序创建受保护的分支). + +通过用户界面创建新分支: + +1. Visit **资料库>分支机构**. +2. Click on **新分支**. +3. 填写分支名称,然后选择一个现有的分支,标记或确认新分支将基于该分支. 仅接受现有的受保护分支和已经在受保护分支中的提交. + +## Deleting a protected branch[](#deleting-a-protected-branch "Permalink") + +在 GitLab 9.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21393) . + +有时可能需要删除或清理受保护的分支. + +具有[维护者权限](../permissions.html)并具有[维护者权限的](../permissions.html)用户可以通过 GitLab 的 Web 界面手动删除受保护的分支: + +1. Visit **资料库>分支机构** +2. 单击您要删除的分支旁边的删除图标 +3. 为了防止意外删除,需要额外的确认 + + [![Delete protected branches](img/4e86bb665dcf8b8997d807441dbd60cd.png)](img/protected_branches_delete.png) + +只能通过 Web 界面而不是 Git 删除受保护的分支. 这意味着您不能从命令行或 Git 客户端应用程序中意外删除受保护的分支. + +## Protected Branches approval by Code Owners[](#protected-branches-approval-by-code-owners-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13251) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4. + +对于合并请求更改的文件,可能需要[代码所有者的](code_owners.html)至少一项批准. 可以在保护新分支时设置"代码所有者"批准,也可以将其设置为已经受保护的分支,如下所述. + +要保护新分支并获得代码所有者的批准: + +1. 导航到项目的**"设置">"存储库",**然后展开" **受保护的分支"** . +2. 向下滚动到**保护一个分支** ,选择**分支**或通配符你想保护,选择谁的**允许合并** **,**并**允许推** ,以及切换**需要从代码的业主**滑块**批准** . +3. Click **Protect**. + +[![Code Owners approval - new protected branch](img/9a996b513114d1fe39fa67c75e54df46.png)](img/code_owners_approval_new_protected_branch_v12_4.png) + +要使代码所有者批准已受保护的分支机构,请执行以下操作: + +1. 导航到项目的**"设置">"存储库",**然后展开" **受保护的分支"** . +2. 向下滚动到" **受保护"分支,**然后切换所选分支的**"代码所有者"批准**滑块. + +[![Code Owners approval - branch already protected](img/7a4195dce33a791e39b721499e4137ad.png)](img/code_owners_approval_protected_branch_v12_4.png) + +启用后,所有针对这些分支的合并请求都将需要代码所有者根据匹配的规则进行批准,然后才能合并. 此外,如果匹配规则,则拒绝直接推送到受保护的分支. + +## Running pipelines on protected branches[](#running-pipelines-on-protected-branches "Permalink") + +合并或推送到受保护分支的权限用于定义用户是否可以运行 CI / CD 管道并在与那些分支相关的作业上执行操作. + +有关管道安全模型的详细信息,请参阅[受保护分支上](../../ci/pipelines/index.html#pipeline-security-on-protected-branches)的安全性. + +## Changelog[](#changelog "Permalink") + +**11.9** + +* [允许](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361)开发人员(和具有更高权限级别的用户)通过 API 和用户界面[创建受保护的分支](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361) . + +**9.2** + +* 允许通过 Web 界面删除受保护的分支( [问题#21393](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21393) ). + +**8.11** + +* 允许创建无法推送到的受保护分支( [合并请求!5081](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) ). + +**8.10** + +* 允许没有推送访问权限的开发人员合并到受保护的分支中( [合并请求!4892](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4892) ). +* 允许使用通配符指定受保护的分支( [合并请求!4665](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4665) ). \ No newline at end of file diff --git "a/docs/\345\205\201\350\256\270\345\215\217\344\275\234.md" "b/docs/\345\205\201\350\256\270\345\215\217\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..0c69ce093d4f5a5f00f8aa12207321cc28f6ca28 --- /dev/null +++ "b/docs/\345\205\201\350\256\270\345\215\217\344\275\234.md" @@ -0,0 +1,54 @@ +# 允许Fork项目协助提交合并请求[](#允许Fork项目协助提交合并请求 "Permalink") + +在 GitLab 10.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17395) . + +当用户从派生打开合并请求时,将为他们提供允许上游成员在源分支上与其进行协作的选项. 这使上游项目的成员可以在合并之前进行小规模修复或重新分支,从而减少了接受外部贡献的来回过程. + +此功能可用于可公开访问的分支项目之间的合并请求. + +为合并请求启用后,对项目目标分支具有合并访问权限的成员将被授予对合并请求的源分支的写权限. + +## Enabling commit edits from upstream members[](#enabling-commit-edits-from-upstream-members "Permalink") + +只有具有对源项目的推送访问权限的用户才能启用该功能,并且只有在合并请求打开时才能持续使用. 启用后,上游成员也将能够重试合并请求的管道和作业: + +1. 在创建或编辑合并请求时启用贡献. + + [![Enable contribution](img/3794ce06aeeb9528fa1a66915cc69072.png)](img/allow_collaboration.png) + +2. 创建合并请求后,您将看到允许可以合并到目标分支的成员的提交. + + [![Check that contribution is enabled](img/381cb6fd4ceed7b2a8b3642926cb8cf2.png)](img/allow_collaboration_after_save.png) + +## Pushing to the fork as the upstream member[](#pushing-to-the-fork-as-the-upstream-member "Permalink") + +如果合并请求的创建者启用了上游成员的贡献,则可以直接推送到派生存储库的分支. + +假如说: + +* 分叉的项目 URL 为`git@gitlab.com:thedude/awesome-project.git` . +* 合并请求的分支是`update-docs` . + +流程如下所示: + +1. 首先,您需要获取合并请求已引入的更改. 单击" **签出"分支**按钮,其中包含可以运行的一些预填充命令. + + [![Check out branch button](img/e9dbc908a405f57008dbb80d1b8a9a70.png)](img/checkout_button.png) + +2. 使用复制按钮复制第一个命令并将其粘贴到您的终端中: + + ``` + git fetch git@gitlab.com:thedude/awesome-project.git update-docs + git checkout -b thedude-awesome-project-update-docs FETCH_HEAD + ``` + + 这将获取派生项目的分支,然后基于所获取的分支创建本地分支. + +3. Make any changes you want and commit. +4. 推送到分叉的项目: + + ``` + git push git@gitlab.com:thedude/awesome-project.git thedude-awesome-project-update-docs:update-docs + ``` + + 注意冒号( `:`两个分支之间). 上面的命令会将本地分支`thedude-awesome-project-update-docs` `git@gitlab.com:thedude/awesome-project.git`存储库的`update-docs`分支. \ No newline at end of file diff --git "a/docs/\345\205\245\351\227\250/\346\226\260\345\273\272\351\241\271\347\233\256.md" "b/docs/\345\205\245\351\227\250/\346\226\260\345\273\272\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b8bfc4e49b81782f75bf29a42d89f5c7f2582ea --- /dev/null +++ "b/docs/\345\205\245\351\227\250/\346\226\260\345\273\272\351\241\271\347\233\256.md" @@ -0,0 +1,118 @@ +# 新建项目[](#create-a-project "Permalink") + +GitLab 中的大多数工作都在一个[Project 中](../user/project/index.html)完成. 文件和代码保存在项目中,并且大多数功能都在项目范围内使用. + +## Create a project in GitLab[](#create-a-project-in-gitlab "Permalink") + +要在 GitLab 中创建项目: + +1. 在信息中心中,点击绿色的**新建项目**按钮或使用导航栏中的加号图标. 这将打开" **新项目"**页面. +2. 在" **新建项目"**页面上,选择是否要: + * 创建一个[空白项目](#blank-projects) . + * 使用可用的[项目模板](#project-templates)之一创建一个项目. + * 如果已在您的 GitLab 实例上启用,则从其他存储库[导入项目](../user/project/import/index.html) . 如果不可用,请与您的 GitLab 管理员联系. + * 运行[用于外部存储库的 CI / CD 管道](../ci/ci_cd_for_external_repos/index.html) . + +**注意:**有关不能用作项目名称的单词列表,请参见[保留的项目和组名称](../user/reserved_names.html) . + +### Blank projects[](#blank-projects "Permalink") + +要在" **新建项目"**页面上创建一个新的空白项目,请执行以下操作: + +1. 在" **空白项目"**选项卡上,提供以下信息: + * **项目名称**在**项目名称**字段中. 您不能使用特殊字符,但可以使用空格,连字符,下划线甚至表情符号. 添加名称时, **Project slug**将自动填充. slug 是 GitLab 实例将用作项目的 URL 路径的东西. 如果您要使用其他子弹,请先输入项目名称,然后再更改子弹. + * **Project slug**字段中项目的路径. 这是 GitLab 实例将使用的项目的 URL 路径. 如果**项目名称**为空白,则当您填写**项目 slug**时,它将自动填充. + * 使用" **项目描述"(可选)**字段,您可以为项目的仪表板输入描述,这将帮助其他人了解您的项目的含义. 尽管不是必需的,但这是个好主意. + * 更改" **可见性级别"**会修改用户的项目[查看和访问权限](../public_access/public_access.html) . + * 选择**使用 README 初始化存储库**选项将创建一个 README 文件,以便 Git 存储库被初始化,具有默认分支并可以被克隆. +2. Click **建立专案**. + +### Project templates[](#project-templates "Permalink") + +项目模板可以使用必要的文件预填充新项目,以使您快速入门. + +有两种类型的项目模板: + +* [内置模板](#built-in-templates) ,来自以下组: + * [`project-templates`](https://gitlab.com/gitlab-org/project-templates) + * [`pages`](https://gitlab.com/pages) +* [自定义项目模板](#custom-project-templates-premium) ,用于由 GitLab 管理员和用户配置的自定义模板. + +#### Built-in templates[](#built-in-templates "Permalink") + +内置模板是项目模板,它们是: + +* 在[`project-templates`](https://gitlab.com/gitlab-org/project-templates)和[`pages`](https://gitlab.com/pages)组中开发和维护. +* 与 GitLab 一起发布. + +要在" **新建项目"**页面上使用内置模板,请执行以下操作: + +1. 在" **从模板创建"**选项卡上,选择" **内置"**选项卡. +2. 从可用的内置模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +##### Enterprise templates[](#enterprise-templates-ultimate "Permalink") + +GitLab 正在开发企业模板,以帮助您根据选定的法规标准简化审核管理. 这些模板会自动导入与每个法规要求相对应的问题. + +要使用企业模板创建新项目,请在" **新建项目"**页面上: + +1. 在" **从模板创建"**选项卡上,选择" **内置"**选项卡. +2. 从可用的内置企业模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +可用的企业模板包括: + +* HIPAA 审核协议模板(在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/13756) ) + +**提示:**您可以按照[以下步骤](https://gitlab.com/gitlab-org/project-templates/contributing)改进现有的内置模板或在[`project-templates`](https://gitlab.com/gitlab-org/project-templates)和[`pages`](https://gitlab.com/pages)组中添加新的[`project-templates`](https://gitlab.com/gitlab-org/project-templates) . + +#### Custom project templates[](#custom-project-templates-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6860) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.2. + +Creating new projects based on custom project templates is a convenient option for quickly starting projects. + +自定义项目可以在[实例级别](../user/admin_area/custom_project_templates.html)从**实例**选项卡,或在[组级别](../user/group/custom_project_templates.html)从**组**选项卡,在**从模板**标签上的**创建** . + +要在" **新建项目"**页面上使用自定义项目模板: + +1. 在" **从模板创建"**选项卡上,选择" **实例"**选项卡或" **组"**选项卡. +2. 从可用的自定义模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +## Push to create a new project[](#push-to-create-a-new-project "Permalink") + +在 GitLab 10.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/26388) . + +当您在本地创建新的存储库时,无需直接在 GitLab 上手动创建一个新项目然后[在](start-using-git.html#clone-a-repository)本地[克隆该](start-using-git.html#clone-a-repository)存储库,而无需将其直接发送到 GitLab 即可创建新项目. 如果您具有关联的名称空间的访问权,则 GitLab 将在该 GitLab 名称空间下自动创建一个新项目,其可见性默认设置为 Private(您以后可以在[项目的设置中](../public_access/public_access.html#how-to-change-project-visibility)对其进行更改). + +这可以通过使用 SSH 或 HTTPS 来完成: + +``` +## Git push using SSH +git push --set-upstream git@gitlab.example.com:namespace/nonexistent-project.git master + +## Git push using HTTPS +git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master +``` + +推送成功完成后,将显示一条远程消息,指示将遥控器和 URL 设置为新项目的命令: + +``` +remote: +remote: The private project namespace/nonexistent-project was created. +remote: +remote: To configure the remote, run: +remote: git remote add origin https://gitlab.example.com/namespace/nonexistent-project.git +remote: +remote: To view the project, visit: +remote: https://gitlab.example.com/namespace/nonexistent-project +remote: +``` \ No newline at end of file diff --git "a/docs/\345\205\263\350\201\224Issue.md" "b/docs/\345\205\263\350\201\224Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..c243fca76a952277064a180e24dc977a88504b50 --- /dev/null +++ "b/docs/\345\205\263\350\201\224Issue.md" @@ -0,0 +1,41 @@ +# 关联Issue[](#关联issue "Permalink") + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +## From Commit Messages[](#from-commit-messages "Permalink") + +每次在提交消息中提及问题时,您都在开发工作流的两个阶段之间建立一种关系:问题本身以及与该问题相关的第一次提交. + +如果问题和您要提交的代码都在同一项目中,则只需在提交消息中添加`#xxx` ,其中`xxx`是问题编号. 如果它们不在同一项目中,则可以将完整的 URL 添加到问题中( `https://gitlab.com///issues/` ). + +``` +git commit -m "this is my commit message. Ref #xxx" +``` + +or + +``` +git commit -m "this is my commit message. Related to https://gitlab.com///issues/" +``` + +当然,您可以使用自己的 GitLab 实例的 URL 替换`gitlab.com` . + +**注意:**将您的第一次提交与您的问题相关联,对于通过[GitLab Cycle Analytics](https://about.gitlab.com/stages-devops-lifecycle/value-stream-analytics/)跟踪您的过程将非常重要. 它将测量计划该问题的实施所花费的时间,即从创建问题到进行第一次提交之间的时间. + +## From Related Issues[](#from-related-issues "Permalink") + +在合并请求中提及相关问题以及其他问题对于您的团队成员和协作者了解有关同一主题的未解决问题很有用. + +如上所述,当您[从提交消息中提到问题](#from-commit-messages)时,您可以执行此操作. + +当在问题`#222`提到问题`#111`时,问题`#111`还将在其跟踪器中显示一条通知. 也就是说,您只需提及一次关系即可在两个问题中均显示该关系. 在[合并请求中](#from-merge-requests)提及问题时,也是如此. + +[![issue mentioned in issue](img/b962444c71ad27ba05dfc6bfc69269f4.png)](img/mention_in_issue.png) + +## From Merge Requests[](#from-merge-requests "Permalink") + +Mentioning issues in merge request comments works exactly the same way as they do for [related issues](#from-related-issues). + +当您在合并请求说明中提到问题时,它将仅[将问题和合并请求链接在一起](#from-related-issues) . 此外,您还可以[将问题设置](managing_issues.html#closing-issues-automatically)为在合并请求合并后立即[自动关闭](managing_issues.html#closing-issues-automatically) . + +[![issue mentioned in MR](img/f36631c8d1fd9cb42fb7c58a495c24be.png)](img/mention_in_merge_request.png) \ No newline at end of file diff --git "a/docs/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" "b/docs/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..ce34a2bd7769474eb8b59cc74d11db0e5d973dba --- /dev/null +++ "b/docs/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" @@ -0,0 +1,202 @@ +# 减少仓库大小[](#减少仓库大小 "Permalink") + +随着时间的流逝,Git 存储库变得越来越大. 将大文件加到 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/). + +**危险:**重写存储库历史记录是一种破坏性操作. 在开始之前,请确保备份您的存储库. 备份存储库的最佳方法是[导出项目](../settings/import_export.html#exporting-a-project-and-its-data) .**注意:** Git LFS 文件只能由管理员使用[Rake 任务](../../../raketasks/cleanup.html)删除. [计划](https://gitlab.com/gitlab-org/gitlab/-/issues/223621)消除此限制. + +## Purge files from repository history[](#purge-files-from-repository-history "Permalink") + +为了使克隆项目更快,请重写分支和标签以删除不需要的文件. + +1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . + +2. 使用`--bare`克隆存储库的新副本: + + ``` + git clone --bare https://example.gitlab.com/my/project.git + ``` + +3. 使用`git filter-repo` ,从存储库的历史记录中清除所有文件. + + 要清除大文件,可以使用`--strip-blobs-bigger-than`选项: + + ``` + git filter-repo --strip-blobs-bigger-than 10M + ``` + + 要清除使用 Git LFS 存储的大文件,可以使用`--blob--callback`选项. 下面的示例使用回调从 Git LFS 指针读取文件大小,并删除大于 10MB 的文件. + + ``` + 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`选项: + + ``` + 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`会删除所有遥控器. 要为您的项目还原遥控器,请运行: + + ``` + git remote add origin https://example.gitlab.com//.git + ``` + +5. 强制推送更改以覆盖 GitLab 上的所有分支: + + ``` + git push origin --force --all + ``` + + [受保护的分支](../protected_branches.html)将导致此操作失败. 要继续,您必须删除分支保护,推送,然后重新启用受保护的分支. + +6. 要从标记的发行版中删除大文件,请强制将更改推送到 GitLab 上的所有标记: + + ``` + git push origin --force --tags + ``` + + [受保护的标签](../protected_tags.html)将导致此操作失败. 要继续,您必须删除标签保护,推送,然后重新启用受保护的标签. + +7. 手动执行[项目整理](../../../administration/housekeeping.html#manual-housekeeping) + +**注意:**为提高性能而缓存了项目统计信息. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降. + +## Purge files from GitLab storage[](#purge-files-from-gitlab-storage "Permalink") + +要减少 GitLab 中存储库的大小,必须删除 GitLab 内部引用以包含大文件的提交. 在完成这些步骤之前,请[从存储库历史记录中清除文件](#purge-files-from-repository-history) . + +除了[分支](branches/index.html)和标签(这是一种 Git 引用)之外,GitLab 还会自动创建其他引用. 这些引用可防止在查看合并请求时死链接到提交或丢失差异. [存储库清理](#repository-cleanup)可用于从 GitLab 中删除它们. + +以下内部参考文献不做广告: + +* `refs/merge-requests/*`用于合并请求. +* `refs/pipelines/*` for [pipelines](../../../ci/pipelines/index.html#troubleshooting-fatal-reference-is-not-a-tree). +* `refs/environments/*`用于环境. + +这意味着在获取时通常不包含它们,这使得获取速度更快. 另外, `refs/keep-around/*`是隐藏的 refs,以防止与讨论相关的提交被删除并且根本无法被获取. + +但是,可以从项目导出内的 Git 捆绑包访问这些引用. + +1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . + +2. [从项目中](../settings/import_export.html#exporting-a-project-and-its-data)生成一个新的[导出](../settings/import_export.html#exporting-a-project-and-its-data)并下载. + +3. 使用`tar`解压缩备份: + + ``` + tar xzf project-backup.tar.gz + ``` + + 这将包含一个由[`git bundle`](https://git-scm.com/docs/git-bundle)创建的`project.bundle`文件. + +4. 从包中克隆存储库的新副本: + + ``` + 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`选项: + + ``` + git filter-repo --strip-blobs-bigger-than 10M + ``` + + 要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项. + + ``` + 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[](#repository-cleanup "Permalink") + +在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19376) . + +仓库清理允许您上传对象的文本文件,并且 GitLab 将删除对这些对象的内部 Git 引用. 您可以使用[`git filter-repo`](https://github.com/newren/git-filter-repo)生成对象列表(在`commit-map`文件中),该对象列表可与存储库清理一起使用. + +要清理存储库: + +1. 转到存储库的项目. +2. 导航 **设置>存储库** . +3. 上载对象列表. 例如,一个`commit-map`文件. +4. Click **开始清理**. + +这将: + +* 删除所有对旧提交的内部 Git 引用. +* 针对存储库运行`git gc` . + +完成后,您将收到一封电子邮件. + +When using repository cleanup, note: + +* 项目统计信息已缓存. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降. +* 客房部修剪 2 周以上的松散物品. 这意味着在最近 2 周内添加的对象将不会立即删除. 如果您有权访问[Gitaly](../../../administration/gitaly/index.html)服务器,则可以运行`git gc --prune=now`立即修剪所有松散的对象. +* 此过程将从 GitLab 的缓存和数据库中删除一些重写提交的副本,但是覆盖范围仍然存在许多空白,并且某些副本可能会无限期地存在. [清除实例缓存](../../../administration/raketasks/maintenance.html#clear-redis-cache)可能有助于删除其中的一些[实例](../../../administration/raketasks/maintenance.html#clear-redis-cache) ,但出于安全考虑,不应依赖它! + +## Storage limits[](#storage-limits "Permalink") + +储存库大小限制: + +* 可以[由管理员](../../admin_area/settings/account_and_limit_settings.html#repository-size-limit-starter-only)在自我管理实例上设置. +* Are [set for GitLab.com](../../gitlab_com/index.html#repository-size-limit). + +当项目达到其大小限制时,您不能: + +* 推送到项目. +* 创建一个新的合并请求. +* 合并现有的合并请求. +* 上载 LFS 对象. + +您仍然可以: + +* 创造新问题. +* 克隆项目. + +如果超出存储库大小限制,则可以尝试: + +1. 删除一些数据. +2. 进行新的提交. +3. 推回存储库. + +也许您还可以: + +* 将一些斑点移到 LFS. +* 从历史记录中删除一些旧的依赖项更新. + +不幸的是,该工作流程无法正常工作. 实际上,在提交中删除文件并不会减小存储库的大小,因为早期的提交和 Blob 仍然存在. + +您需要做的是重写历史记录. 我们建议使用开源社区维护的工具[`git filter-repo`](https://github.com/newren/git-filter-repo) . + +**注意:**在 GitLab 端运行`git gc`之前,"已删除"的提交和 blob 仍将存在. 您还必须能够将重写的历史记录推送到 GitLab,如果您已经超过最大大小限制,则可能无法实现. + +为了解除这些限制,自我管理的 GitLab 实例的管理员必须增加对超出它的特定项目的限制. 因此,最好始终主动保持在限制之下. 如果您达到了极限,并且无法暂时提高极限,则唯一的选择是: + +1. 在本地修剪所有不需要的东西. +2. 在 GitLab 上创建一个新项目,然后开始使用它. + +**Caution:** This process is not suitable for removing sensitive data like password or keys from your repository. Information about commits, including file content, is cached in the database, and will remain visible even after they have been removed from the repository. \ No newline at end of file diff --git "a/docs/\345\210\206\346\224\257.md" "b/docs/\345\210\206\346\224\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..05b6aac8f740094fba608844801f1ae07cc2596a --- /dev/null +++ "b/docs/\345\210\206\346\224\257.md" @@ -0,0 +1,108 @@ +# 分支[](#分支 "Permalink") + +分支是项目工作树的版本. 您为所做的每组相关更改创建一个分支. 这样可以使每组更改彼此独立,从而可以并行进行更改,而不会互相影响. + +将更改推送到新分支后,您可以: + +* 创建[合并请求](../../merge_requests/index.html) +* 执行内联代码审查 +* 与团队[讨论](../../../discussions/index.html)实施情况 +* 使用[Review Apps](../../../../ci/review_apps/index.html)预览提交到新分支的更改. + +使用[GitLab Starter](https://about.gitlab.com/pricing/) ,您还可以请求经理的[批准](../../merge_requests/merge_request_approvals.html) . + +有关使用 GitLab UI 管理分支的更多信息,请参见: + +* [Default branches](#default-branch) +* [Create a branch](../web_editor.html#create-a-new-branch) +* [Protected branches](../../protected_branches.html#protected-branches) +* [Delete merged branches](#delete-merged-branches) +* [Branch filter search box](#branch-filter-search-box) + +您也可以使用[命令行](../../../../gitlab-basics/start-using-git.html#create-a-branch)管理分支. + +观看视频[GitLab Flow](https://www.youtube.com/watch?v=InKNIvky2KE) . + +也可以看看: + +* [Branches API](../../../../api/branches.html) ,有关使用 GitLab API 在存储库分支上进行操作的信息. +* [GitLab Flow](../../../../university/training/gitlab_flow.html) documentation. +* [Git](../../../../topics/git/index.html)和 GitLab [入门](../../../../topics/git/index.html) . + +## Default branch[](#default-branch "Permalink") + +创建新[项目时](../../index.html) ,GitLab 会将`master`设置为存储库的默认分支. 您可以在项目的**设置>存储库**下选择另一个分支作为项目的默认分支. + +通过[问题关闭模式](../../issues/managing_issues.html#closing-issues-automatically)直接从合并请求中[关闭问题时](../../issues/managing_issues.html#closing-issues-automatically) ,目标是项目的**默认分支** . + +初始还对默认分支进行了[保护,以](../../protected_branches.html#protected-branches)防止意外删除和强制推送. + +### Custom initial branch name[](#custom-initial-branch-name-core-only "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/221013) . +* 它部署在默认情况下启用的功能标志后面. +* 在 GitLab.com 上启用了它. +* 不能根据项目启用或禁用它. +* 建议用于生产. +* 对于 GitLab 自我管理的实例,GitLab 管理员可以选择[禁用它](#enable-or-disable-custom-initial-branch-name-core-only) . + +默认情况下,当您在 GitLab 中创建新项目时,初始分支称为`master` . 对于自我管理的实例,GitLab 管理员可以将初始分支名称自定义为其他名称. 这样,此后创建的每个新项目都将从自定义分支名称开始,而不是`master` . 为此: + +1. 转到 **在管理区域>设置>存储库中** ,展开**默认初始分支名称** . +2. 将默认的初始分支更改为您选择的自定义名称. +3. **保存更改**. + +#### Enable or disable custom initial branch name[](#enable-or-disable-custom-initial-branch-name-core-only "Permalink") + +正在设置默认的初始分支名称,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../../administration/feature_flags.html)可以选择为您的实例禁用它. + +禁用它: + +``` +Feature.disable(:global_default_branch_name) +``` + +要启用它: + +``` +Feature.enable(:global_default_branch_name) +``` + +## Compare[](#compare "Permalink") + +要比较存储库中的分支: + +1. 导航到项目的存储库. +2. 在边栏中选择**存储库>比较** . +3. 使用[分支过滤器搜索框](#branch-filter-search-box)选择要比较的[分支](#branch-filter-search-box) +4. 单击" **比较** "以内联查看更改: + +[![compare branches](img/b4e4d114d9b2244a7848961617e05a95.png)](img/compare_branches.png) + +## Delete merged branches[](#delete-merged-branches "Permalink") + +在 GitLab 8.14 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/6449) . + +[![Delete merged branches](img/6de450be845a1f48a3feae9ce8e7be6e.png)](img/delete_merged_branches.png) + +此功能允许合并的分支被批量删除. 作为此操作的一部分,只有已合并[但未受保护的](../../protected_branches.html)分支才会被删除. + +清理合并请求时未自动删除的旧分支尤其有用. + +## Branch filter search box[](#branch-filter-search-box "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22166) . + +[![Branch filter search box](img/f380fbb3646558d8becf561df5894c38.png)](img/branch_filter_search_box.png) + +此功能使您可以快速搜索和选择分支. 搜索结果按以下顺序显示: + +* 名称与搜索字词完全匹配的分支. +* 名称包含搜索词的其他分支,按字母顺序排序. + +有时,当您有数百个分支时,可能需要更灵活的匹配模式. 在这种情况下,您可以使用以下方法: + +* `^feature`将仅匹配以'feature'开头的分支名称. +* `feature$` will only match branch names that end with ‘feature’. \ No newline at end of file diff --git "a/docs/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" "b/docs/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..31a857b93fc16c04249a27351639fa2e6c48eeb2 --- /dev/null +++ "b/docs/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" @@ -0,0 +1,144 @@ +# 创建合并请求[](#创建合并请求 "Permalink") + +在创建合并请求之前,请通读"合并请求"的[简介,](getting_started.html)以熟悉概念,术语并了解如何使用它们. + +每个合并请求都从创建一个分支开始. 您可以通过[命令行](#new-merge-request-from-your-local-environment) ,Git CLI 应用程序或[GitLab UI](#new-merge-request-from-a-new-branch-created-through-the-ui)在本地进行操作. + +本文档介绍了创建合并请求的几种方法. + +启动新的合并请求时,无论使用哪种方法,都将转到" [**新合并请求"**页面,](#new-merge-request-page)以在其中添加有关合并请求的信息. + +如果将新分支推送到 GitLab,也不管使用哪种方法,都可以单击[**Create Merge Request**](#create-merge-request-button)按钮并从此处启动合并请求. + +## New Merge Request page[](#new-merge-request-page "Permalink") + +在" **新合并请求"**页面上,首先填写**合并请求**的标题和描述. 如果分支上已经有提交,则标题将用第一条提交消息的第一行预填充,描述将用提交消息中的任何其他行预填充. 在所有情况下,标题都是唯一的必填字段. + +在此处,您可以在其中填充信息(标题,描述,受让人,里程碑,标签,批准人),然后点击**创建合并请求** . + +在初始屏幕上,您还可以查看提交合并请求之前推送到分支的所有提交,管道和文件更改. + +[![New Merge Request page](img/9255a795b62eb0bbe1c91eab2f85c149.png)](img/new_merge_request_page_v12_6.png) + +**提示:**您可以在创建合并请求之前将一次或多次推送到 GitLab 中的分支. + +## Create Merge Request button[](#create-merge-request-button "Permalink") + +将新分支推送到 GitLab 后,请访问 GitLab 中的存储库,并在屏幕顶​​部看到一个号召性用语,您可以从中单击**创建合并请求**按钮. + +[![Create Merge Request button](img/2257f7989872604ba6ce6506ba811b15.png)](img/create_merge_request_button_v12_6.png) + +您还可以在以下页面的右上方看到" **创建合并请求"**按钮: + +* **Project** page. +* **资料库>文件** page. +* **合并请求** page. + +In this case, GitLab will use the most recent branch you pushed changes to as the source branch, and the default branch in the current project as the target. + +## New merge request by adding, editing, and uploading a file[](#new-merge-request-by-adding-editing-and-uploading-a-file "Permalink") + +当您选择通过 GitLab UI 编辑,添加或上传文件时,在文件末尾,您会看到以下选项:添加**Commit 消息** ,选择该**提交**的**Target 分支** ,然后选中**Start new**复选框. **具有这些更改的合并请求** . + +同样,如果通过 Web IDE 更改文件,则在左侧边栏中导航到" **提交"**时,将看到这些相同的选项. + +添加,编辑或上传文件后,请执行以下操作: + +1. 在提交消息中描述您的更改. +2. 选择一个现有分支以将您的提交添加到其中,或者,如果您想创建一个新分支,请键入新的分支名称(不带空格,大写字母或特殊字符). +3. 保持选中复选框以立即开始新的合并请求,或者取消选中该复选框以在开始合并请求之前向该分支添加更多更改. +4. Click **提交变更**. + +如果您选择开始合并请求,则将转到" [**新合并请求"**页面](#new-merge-request-page) ,您可以在其中填写信息并提交合并请求. + +合并请求将针对存储库的默认分支. 如果要更改它,可以稍后通过编辑合并请求来进行更改. + +## New merge request from a new branch created through the UI[](#new-merge-request-from-a-new-branch-created-through-the-ui "Permalink") + +要通过 GitLab UI 快速开始处理文件,请导航至项目的" **存储库">"分支"** ,然后单击" **新建分支"** . 将创建一个新分支,您可以开始编辑文件. + +提交并推送后,您可以单击" [**创建合并请求"**](#create-merge-request-button)按钮以打开" [**新合并请求"**页面](#new-merge-request-page) . 将使用当前分支作为源,并使用当前项目中的默认分支作为目标来启动新的合并请求. + +## New merge request from your local environment[](#new-merge-request-from-your-local-environment "Permalink") + +假设您已将存储库克隆到计算机中,并且想要开始处理文件更改,请先创建并签出一个新分支: + +``` +git checkout -b my-new-branch +``` + +处理文件更改,暂存并提交它们: + +``` +git add . +git commit -m "My commit message" +``` + +完成后, [将分支推送到 GitLab](../../../gitlab-basics/start-using-git.html#send-changes-to-gitlabcom) : + +``` +git push origin my-new-branch +``` + +在输出中,GitLab 将提示您一个直接链接来创建合并请求: + +``` +... +remote: To create a merge request for docs-new-merge-request, visit: +remote: https://gitlab-instance.com/my-group/my-project/merge_requests/new?merge_request%5Bsource_branch%5D=my-new-branch +``` + +复制该链接并将其粘贴到浏览器中,将显示" [**新合并请求"页面**](#new-merge-request-page) . + +在[通过命令行推送时](../push_options.html) , [还可以向命令添加](../push_options.html)一些[标志,](../push_options.html)以减少通过 UI 手动编辑合并请求的需要. + +如果您没有通过命令行将分支推送到 GitLab(例如,您使用 Git CLI 应用程序来推送更改),则可以通过单击" [**创建合并请求"**](#create-merge-request-button)按钮通过 GitLab UI [**创建合并请求**](#create-merge-request-button) . + +## New merge request from an issue[](#new-merge-request-from-an-issue "Permalink") + +您也可以[直接从 issue 创建一个新的合并请求](../repository/web_editor.html#create-a-new-branch-from-an-issue) . + +## New merge request from the Merge Requests page[](#new-merge-request-from-the-merge-requests-page "Permalink") + +您可以通过在项目中的" **合并请求"**页面上单击" **新建合并请求"**按钮来开始创建新的合并请求. 然后选择包含更改的源项目和分支,以及要将更改合并到的目标项目和分支. 单击**比较分支,然后继续**转到" [**新合并请求"**页面](#new-merge-request-page)并填写详细信息. + +## New merge request from a fork[](#new-merge-request-from-a-fork "Permalink") + +分叉项目并应用本地更改后,请完成以下步骤,从您的 fork 创建一个合并请求以贡献回主项目: + +1. 转到**项目>您的项目,**然后选择存储库的分支. +2. 在左侧菜单中,转到**合并请求** ,然后点击**新建合并请求** . +3. 在" **源分支"**下拉列表框中,在分支的存储库中选择您的分支作为源分支. +4. 在" **目标分支"**下拉列表框中,从上游存储库中选择分支作为目标分支. +5. 输入凭据后,单击" **比较分支",然后继续**将本地更改与上游存储库进行比较. +6. 分配用户以查看您的更改,然后点击**提交合并请求** . + +合并更改后,您的更改将按照规范添加到上游存储库和分支中. 合并工作后,如果您不想对上游项目做出任何其他贡献,则可以通过[删除分支关系](../settings/index.html#removing-a-fork-relationship) ,在**Settings> Advanced Settings**部分[中将 fork 与](../settings/index.html#removing-a-fork-relationship)上游项目断开链接. + +有关更多详细信息, [请参阅分叉工作流文档](../repository/forking_workflow.html) . + +## New merge request by email[](#new-merge-request-by-email-core-only "Permalink") + +*要使用此功能,需要由 GitLab 管理员配置[传入电子邮件](../../../administration/incoming_email.html)才能使用.* 它在 GitLab.com 中不可用. + +您可以通过将电子邮件发送到特定于用户的电子邮件地址来创建新的合并请求. 通过单击**将新的合并请求**通过**电子邮件发送到该项目**按钮,可以在合并请求页面上获取地址. 该主题将用作新合并请求的源分支名称,而目标分支将是项目的默认分支. 消息正文(如果不为空)将用作合并请求描述. 您需要启用["通过电子邮件回复"](../../../administration/reply_by_email.html)才能使用此功能. 如果您的实例未启用它,则可以要求您的 GitLab 管理员这样做. + +这是一个私人电子邮件地址,仅为您生成. **将其保存在自己**手中,因为拥有它的任何人都可以像您一样创建问题或合并请求. 您可以将此地址添加到您的联系人列表中以便于访问. + +[![Create new merge requests by email](img/4f0a47acf91c1135738d76e1c06eec3a.png)](img/create_from_email.png) + +*在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 但是,仍支持较旧的格式,从而允许现有别名或联系人继续工作.* + +### Adding patches when creating a merge request via e-mail[](#adding-patches-when-creating-a-merge-request-via-e-mail "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22723) . + +您可以通过将补丁添加为电子邮件的附件,将提交添加到正在创建的合并请求中. 文件名以`.patch`结尾的所有附件都将被视为补丁程序,并将按名称顺序对其进行处理. + +补丁的总大小可以是 2MB. + +如果主题的源分支不存在,那么将从存储库的 HEAD 或指定的目标分支创建源分支以应用补丁. 可以使用[`/target_branch`快速操作](../quick_actions.html)指定目标分支. 如果源分支已经存在,则将在其顶部应用补丁. + +## Reviewing and managing Merge Requests[](#reviewing-and-managing-merge-requests "Permalink") + +提交合并请求后,可以通过 GitLab 进行[审查和管理](reviewing_and_managing_merge_requests.html) . \ No newline at end of file diff --git "a/docs/\345\220\210\345\271\266\350\257\267\346\261\202.md" "b/docs/\345\220\210\345\271\266\350\257\267\346\261\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..846e514019ca8ddcd2d027cae196f1aa7b0ca25f --- /dev/null +++ "b/docs/\345\220\210\345\271\266\350\257\267\346\261\202.md" @@ -0,0 +1,79 @@ +# 合并请求[](#合并请求 "Permalink") + +合并请求使您可以可视化并协作对作为对指定 Git 分支的提交而存在的源代码的建议更改. + +[![Merge request view](img/44dfa1e85103f88c82598a4ef9f8d0ae.png)](img/merge_request.png) + +合并请求( **MR** )是 GitLab 作为代码协作和版本控制平台的基础. 顾名思义,它就是一个*将*一个分支*合并*到另一个分支的*请求* . + +## Use cases[](#use-cases "Permalink") + +答:考虑您是一个团队中的软件开发人员: + +1. 您签出新分支,并通过合并请求提交更改 +2. 您从团队中收集反馈 +3. 您可以使用["代码质量"报告来进行](code_quality.html)优化代码的实现 +4. 您可以在 GitLab CI / CD 中使用[JUnit 测试报告](../../../ci/junit_test_reports.html)来验证您的更改 +5. 通过" [许可证合规性"报告,](../../compliance/license_compliance/index.html)可以避免使用许可证与您的项目不兼容的依赖项 +6. 您要求您的经理[批准](merge_request_approvals.html) +7. 您的经理: + 1. 推动提交并进行最终审查 + 2. [批准合并请求](merge_request_approvals.html) + 3. 将其设置为[在管道成功时合并](merge_when_pipeline_succeeds.html) +8. 您的更改将通过[手动操作](../../../ci/yaml/README.html#whenmanual) GitLab CI / CD 部署到生产中 +9. 您的实施已成功交付给客户 + +B.考虑您是为您公司网站编写网页的 Web 开发人员: + +1. 您签出新分支,并通过合并请求提交新页面 +2. 您从审稿人那里收集反馈 +3. 您的更改将通过[Review Apps](../../../ci/review_apps/index.html)进行预览 +4. 您要求您的网页设计师实施 +5. 您要求您的经理[批准](merge_request_approvals.html) +6. 一旦批准,您的合并请求将被[压缩和合并](squash_and_merge.html) ,并[部署到带有 GitLab 页面的暂存中](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/) +7. 您的生产团队[选择](cherry_pick_changes.html)合并提交到生产中 + +## Overview[](#overview "Permalink") + +合并请求(也称为" MR")显示有关建议的更改的大量信息. MR 的主体包含其描述以及其小部件(显示有关 CI / CD 管道的信息,如果存在的话),然后是与该 MR 合作的人员的讨论线程. + +MR 还包含导航选项卡,从中可以查看线程上正在进行的讨论,提交列表,管道和作业列表,代码更改以及内联代码审阅. + +首先,请阅读[合并请求简介](getting_started.html) . + +## Merge request navigation tabs at the top[](#merge-request-navigation-tabs-at-the-top "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/33813) . 此定位是实验性的. + +到目前为止,在合并请求窗口小部件之后,位于合并请求中以显示" **讨论区"** ," **提交"** ," **管道** "和" **更改"**的导航选项卡. + +To facilitate this navigation without having to scroll up and down through the page to find these tabs, based on user feedback, we’re experimenting with a new positioning of these tabs. They are now located at the top of the merge request, with a new **Overview** tab, containing the description of the merge request followed by the widget. Next to **Overview**, you can find **Pipelines**, **Commits**, and **Changes**. + +[![Merge request tab positions](img/9e7b70cdf92b88509713225035e8e964.png)](img/merge_request_tab_position_v12_6.png) + +请注意,此更改当前位于默认情况下启用的功能标志之后. 对于自我管理的实例,GitLab 管理员可以通过 Rails 控制台使用以下命令将其禁用: + +``` +Feature.disable(:mr_tabs_position) +``` + +## Creating merge requests[](#creating-merge-requests "Permalink") + +Learn [how to create a merge request](creating_merge_requests.html). + +## Reviewing and managing merge requests[](#reviewing-and-managing-merge-requests "Permalink") + +查看可使用的功能来[查看和管理合并请求](reviewing_and_managing_merge_requests.html) . + +## Testing and reports in merge requests[](#testing-and-reports-in-merge-requests "Permalink") + +了解有关合并请求中的[测试](testing_and_reports_in_merge_requests.html)选项[和报告](testing_and_reports_in_merge_requests.html)更改的信息. + +## Authorization for merge requests[](#authorization-for-merge-requests "Permalink") + +使用 GitLab 进行合并请求的主要方法有两种: + +1. 在单个存储库中使用[受保护的分支](../protected_branches.html) +2. 使用权威项目的分支 + +[Learn more about the authorization for merge requests.](authorization_for_merge_requests.html) \ No newline at end of file diff --git "a/docs/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" "b/docs/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" new file mode 100644 index 0000000000000000000000000000000000000000..50b0e54993cf9e7e0431e80fbab2345d1bbe86df --- /dev/null +++ "b/docs/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" @@ -0,0 +1,41 @@ +# 合并请求版本[](#合并请求版本 "Permalink") + +每次您推送到与合并请求绑定的分支时,都会创建新版本的合并请求 diff. 当您访问包含多个推送的合并请求时,可以选择并比较那些合并请求差异的版本. + +[![Merge request versions](img/0d2f752f5d8c7352da5333f4f0d27835.png)](img/versions.png) + +## Selecting a version[](#selecting-a-version "Permalink") + +默认情况下,显示更改的最新版本. 但是,您可以从版本下拉列表中选择一个较旧的版本. + +[![Merge request versions dropdown](img/1864a1996bbb1636d65648dd8b0857df.png)](img/versions_dropdown.png) + +合并请求版本基于推送而不是提交. 因此,如果您单次推送了 5 次提交,那么下拉菜单中的选项就是一个. 如果您按了 5 次,则算上 5 个选项. + +您还可以将合并请求版本与旧版本进行比较,以查看此后发生了什么变化. + +[![Merge request versions compare](img/f0a8b71ac0a74f03724937e45e8782b9.png)](img/versions_compare.png) + +在查看过时的合并版本或与基本版本以外的版本进行比较时,将禁用注释. + +每次将新更改推送到分支时,系统都会显示一个用于比较最后更改的链接. + +[![Merge request versions system note](img/8201105b83669750c4d60036b41f6c6d.png)](img/versions_system_note.png) + +## Find the merge request that introduced a change[](#find-the-merge-request-that-introduced-a-change "Permalink") + +在 GitLab 10.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/2383) . + +在查看提交详细信息页面时,GitLab 将链接到包含该提交的合并请求(或合并请求,如果存在多个). + +这仅适用于最新版本的合并请求中的提交-如果某个提交位于合并请求中,然后根据该合并请求重新建立基础,则不会链接它们. + +## `HEAD` comparison mode for Merge Requests[](#head-comparison-mode-for-merge-requests "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/27008) . + +合并请求(尤其是" **更改"**选项卡)是查看和讨论源代码的地方. 在目标分支被合并到合并请求的源分支的情况下,源分支和目标分支中的更改可以显示为混合在一起,这使得很难理解目标分支中正在添加哪些更改以及已经存在哪些更改. + +在 GitLab 12.10 中,我们添加了一个比较模式,该模式显示了通过模拟合并后的差异计算出的差异-更准确地表示更改,而不是使用两个分支的基础. 通过选择**master(HEAD),**可以从比较目标下拉列表中使用新模式. 将来它将[替换](https://gitlab.com/gitlab-org/gitlab/-/issues/198458)当前的默认比较. + +[![Merge request versions compare HEAD](img/3478cae6da4e529f7c9cf2f4e71dd462.png)](img/versions_compare_head_v12_10.png) \ No newline at end of file diff --git "a/docs/\345\255\220\347\273\204\347\273\207.md" "b/docs/\345\255\220\347\273\204\347\273\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1b8080e8602cffe1a1dc260a74b85103d9b8518 --- /dev/null +++ "b/docs/\345\255\220\347\273\204\347\273\207.md" @@ -0,0 +1,89 @@ +# 子组织[](#子组织 "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) diff --git "a/docs/\345\270\256\345\212\251\346\226\207\346\241\243.md" "b/docs/\345\270\256\345\212\251\346\226\207\346\241\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..c039b421d52ef4c477ff81e3b02ad95343a09ebd --- /dev/null +++ "b/docs/\345\270\256\345\212\251\346\226\207\346\241\243.md" @@ -0,0 +1,161 @@ +*访问[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 diff --git "a/docs/\345\276\205\345\212\236\344\272\213\351\241\271.md" "b/docs/\345\276\205\345\212\236\344\272\213\351\241\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..12f14b440428cdd06a014de38e84f7cf31588ca1 --- /dev/null +++ "b/docs/\345\276\205\345\212\236\344\272\213\351\241\271.md" @@ -0,0 +1,126 @@ +# 待办事项[](#待办事项 "Permalink") + +在 GitLab 8.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2817) . + +当您登录到 GitLab 时,通常需要查看应该花些时间在哪里,采取一些措施或知道需要注意什么而无需大量电子邮件通知. GitLab 是您工作的地方,因此快速入门非常重要. + +待办事项列表在一个简单的仪表板中按时间顺序列出了等待您输入的项目. + +[![To Do screenshot showing a list of items to check on](img/aafa273009fd04415444f040f8b4c6cc.png)](img/todos_index.png) + +通过单击顶部导航中搜索栏旁边的对勾图标,可以快速访问待办事项列表. 如果计数为: + +* 小于 100 的蓝色数字是待办事项的数量. +* 大于或等于 100,则数字显示为 99+. 确切的数字显示在"任务列表"上. 你还有空. 否则,该数字将显示为 99+. 确切的数字显示在"任务列表"上. + +[![To Do icon](img/7f8f5e942a32629817a87b08e33d9071.png)](img/todos_icon.png) + +## What triggers a To Do[](#what-triggers-a-to-do "Permalink") + +在以下情况下,待办事项会显示在您的待办事项列表中: + +* 分配或合并请求已分配给您 +* 在以下内容的描述或评论中`@mentioned`您`@mentioned` : + * 问题 + * 合并请求 + * 史诗 +* 在以下评论中`@mentioned`您: + * 承诺 + * 设计 +* 您的合并请求的 CI / CD 管道失败 +* 由于冲突,一个打开的合并请求变得不可合并,并且满足以下条件之一: + * 你是作者 + * 您是将其设置为在管道成功后自动合并的用户 +* [从 GitLab 13.2 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/12136) ,合并请求将从[合并火车中](../ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.html)删除,您是添加请求的用户. + +待办事项触发器不受[GitLab 通知电子邮件设置的影响](profile/notifications.html) . + +**注意:**当用户不再有权访问与待办事项相关的资源(例如问题,合并请求,项目或组)时,出于安全原因,相关的待办事项将在下一小时内删除. 如果用户的访问被错误地取消,则删除操作会延迟以防止数据丢失. + +### Directly addressing a To Do[](#directly-addressing-a-to-do "Permalink") + +在 GitLab 9.0 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7926) . + +如果在一行的开头提到您,则您收到的待办事项将列为"直接处理". 例如,在此注释中: + +``` +@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[](#manually-creating-a-to-do "Permalink") + +您还可以通过在以下位置单击" **添加待办事项"**按钮,将以下内容添加到"待办事项列表": + +* Issue +* 合并请求 +* Epic + +[![Adding a To Do from the issuable sidebar](img/f44886a0dc98ed48e0854c7d2ac6a220.png)](img/todos_add_todo_sidebar.png) + +## Marking a To Do as done[](#marking-a-to-do-as-done "Permalink") + +采取以下任何措施都会将相应的待办事项标记为已完成: + +* Issue +* 合并请求 +* Epic + +取消待办事项的动作包括: + +* 更换受让人 +* 改变里程碑 +* 添加/删除标签 +* 对这个问题发表评论 + +Your To-Do List is personal, and items are only marked as done if the action comes from you. If you close the issue or merge request, your To Do is automatically marked as done. + +为防止其他用户在不通知您的情况下关闭问题,如果其他人关闭,合并或对以下任何一项采取了措施,则您的待办事项将保持待处理状态: + +* Issue +* 合并要求 +* Epic + +每种情况只有一个待办事项,因此在一个问题中提到用户一百次只会触发一个待办事项. + +如果不需要采取任何措施,您可以通过单击相应的**"完成"**按钮来手动将"待办事项"标记为已完成,该按钮将从您的"待办事项列表"中消失. + +[![A To Do in the To-Do List](img/235fdd047e32990019bc08c92ced8299.png)](img/todos_todo_list_item.png) + +您还可以通过单击以下边栏中的" **标记为已完成"**按钮将"待办事项" **标记为已完成** : + +* Issue +* 合并请求 +* Epic + +[![Mark as done from the issuable sidebar](img/5e63fee9a28bb3e02eb772646de82b5c.png)](img/todos_mark_done_sidebar.png) + +您可以通过单击**全部标记为已完成**按钮将所有待办事项**标记为已完成** . + +## Filtering your To-Do List[](#filtering-your-to-do-list "Permalink") + +您可以在待办事项列表中使用四种过滤器. + +| Filter | Description | +| --- | --- | +| Project | 按项目筛选 | +| Group | 按组筛选 | +| Author | 按触发待办事项的作者过滤 | +| Type | 按问题,合并请求,设计或史诗过滤 | +| Action | 按触发待办事项的动作过滤 | + +您还可以同时按多个过滤条件之一进行过滤. [上面描述了](#what-triggers-a-to-do)可能的操作,包括: + +* 任何行动 +* Assigned +* Mentioned +* Added +* Pipelines +* 直接寻址 \ No newline at end of file diff --git "a/docs/\345\276\275\347\253\240.md" "b/docs/\345\276\275\347\253\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..86d831192504e0bd5c6df82206bc469d030bfad3 --- /dev/null +++ "b/docs/\345\276\275\347\253\240.md" @@ -0,0 +1,50 @@ +# 徽章[](#徽章 "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 diff --git "a/docs/\345\277\253\346\215\267\351\224\256.md" "b/docs/\345\277\253\346\215\267\351\224\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..52642995e08e0bdcb5eb1c5eb85d15491a533c1e --- /dev/null +++ "b/docs/\345\277\253\346\215\267\351\224\256.md" @@ -0,0 +1,133 @@ +# 快捷键[](#快捷键 "Permalink") + +GitLab 有许多有用的键盘快捷键,使您可以更轻松地访问不同的功能. 您可以通过按`?`在 GitLab 本身中看到模式列表键盘快捷键`.` ,或单击右上角"帮助"菜单中的" **键盘快捷键"** . 在[GitLab 12.8 和更高版本中](https://gitlab.com/gitlab-org/gitlab/-/issues/22113) ,可以使用此模式窗口中的" **启用** / **禁用"**切换来禁用键盘快捷键. + +[全局快捷方式](#global-shortcuts)可在 GitLab 的任何区域使用,但是您必须在特定页面中才能使用其他快捷方式,如以下各节所述. + +## Global Shortcuts[](#global-shortcuts "Permalink") + +在 GitLab 的大多数区域中都可以使用这些快捷方式 + +| 键盘快捷键 | Description | +| --- | --- | +| `?` | 显示/隐藏快捷方式参考表. | +| `Shift` + `p` | 转到您的项目页面. | +| `Shift` + `g` | 转到您的网上论坛页面. | +| `Shift` + `a` | 转到"活动"页面. | +| `Shift` + `l` | 转到您的里程碑页面. | +| `Shift` + `s` | 转到您的代码段页面. | +| `s` | 将光标放在问题/合并请求搜索中. | +| `Shift` + `i` | 转到您的问题页面. | +| `Shift` + `m` | 转到"合并请求"页面. | +| `Shift` + `t` | 转到待办事项列表页面. | +| `p` + `b` | 显示/隐藏性能栏. | + +此外,在文本字段中编辑文本时,可以使用以下快捷方式,例如,注释,回复,问题描述和合并请求描述: + +| 键盘快捷键 | Description | +| --- | --- | +| `↑` | 编辑您的最后评论. 您必须在线程下方的空白文本字段中,并且该线程中必须已经至少有一个注释. | +| `⌘` (Mac)/ `Ctrl` + `Shift` + `p` | 在顶部具有" **编写"**和" **预览"**选项卡的文本字段中编辑文本时,切换 Markdown 预览. | + +## Project[](#project "Permalink") + +这些快捷方式可从项目中的任何页面获得. 您必须相对快速地键入它们才能工作,并且它们会将您带到项目中的另一个页面. + +| 键盘快捷键 | Description | +| --- | --- | +| `g` + `p` | 转到项目主页(" **项目">"详细信息"** ). | +| `g` + `v` | 转到项目活动提要(" **项目">"活动"** ). | +| `g` + `r` | 转到项目发布列表(" **项目">"发布"** ). | +| `g` + `f` | 转到[项目文件](#project-files)列表(" **存储库">"文件"** ). | +| `t` | 转到项目文件搜索页面. (" **存储库">"文件"** ,单击" **查找文件"** ). | +| `g` + `c` | 转到项目提交列表( **存储库>提交** ). | +| `g` + `n` | 转到[存储库图](#repository-graph)页面( **Repository> Graph** ). | +| `g` + `d` | Go to repository charts (**分析>存储库分析**). | +| `g` + `i` | 转到项目问题列表( **问题>列表** ). | +| `i` | 转到"新问题"页面(" **问题"** ,单击" **新问题"** ). | +| `g` + `b` | 转到项目问题委员会列表( **问题>委员会** ). | +| `g` + `m` | 转到项目合并请求列表( **合并请求** ). | +| `g` + `j` | 转到 CI / CD 作业列表( **CI / CD>作业** ). | +| `g` + `l` | 转到项目指标(" **操作">"指标"** ). | +| `g` + `e` | 转到项目环境(" **操作">"环境"** ). | +| `g` + `k` | 转到项目 Kubernetes 集群集成页面( **操作> Kubernetes** ). 请注意,您必须至少具有[`maintainer`权限](permissions.html)才能访问此页面. | +| `g` + `s` | 转到项目片段列表( **片段** ). | +| `g` + `w` | 转到项目 Wiki( **Wiki** )(如果已启用). | + +### Issues and Merge Requests[](#issues-and-merge-requests "Permalink") + +这些快捷方式在查看问题和合并请求时可用. + +| 键盘快捷键 | Description | +| --- | --- | +| `e` | 编辑说明. | +| `a` | 更改受让人. | +| `m` | 更改里程碑. | +| `l` | 更改标签. | +| `r` | 开始写评论. 如果选择了任何文本,它将在注释中引用. 不能用于在线程内回复. | +| `n` | 移至下一个未解决的讨论(仅合并请求). | +| `p` | 移至上一个未解决的讨论(仅合并请求). | +| `]` or `j` | 移至下一个文件(仅合并请求). | +| `[` or `k` | 移至上一个文件(仅合并请求). | +| `b` | 复制源分支名称(仅合并请求). | + +### Project Files[](#project-files "Permalink") + +这些快捷方式在浏览项目中的文件时可用(导航至**Repository** > **Files** ): + +| 键盘快捷键 | Description | +| --- | --- | +| `↑` | 向上移动选择. | +| `↓` | 向下移动选择. | +| `enter` | 打开选择. | +| `esc` | 返回文件列表屏幕(仅在搜索文件时," **存储库">"文件",**然后单击" **查找文件"** ). | +| `y` | 转到文件永久链接(仅在查看文件时). | + +### Web IDE[](#web-ide "Permalink") + +使用[Web IDE](project/web_ide/index.html)编辑文件时,可以使用以下快捷方式: + +| 键盘快捷键 | Description | +| --- | --- | +| `⌘` (Mac)/ `Ctrl` + `p` | 搜索,然后打开另一个文件进行编辑. | +| `⌘` (Mac)/ `Ctrl` + `Enter` | 提交(在编辑提交消息时). | + +### Repository Graph[](#repository-graph "Permalink") + +这些快捷方式在查看项目[存储库图形](project/repository/index.html#repository-graph)页面时可用(导航至**Repository> Graph** ): + +| 键盘快捷键 | Description | +| --- | --- | +| `←` or `h` | 向左滚动. | +| `→` or `l` | 向右滚动. | +| `↑` or `k` | 向上滚动. | +| `↓` or `j` | 向下滚动. | +| `Shift` + `↑` or `Shift` + `k` | 滚动到顶部. | +| `Shift` + `↓` or `Shift` + `j` | 滚动到底部. | + +### Wiki pages[](#wiki-pages "Permalink") + +查看[维基页面](project/wiki/index.html)时,可以使用此快捷方式: + +| 键盘快捷键 | Description | +| --- | --- | +| `e` | 编辑 Wiki 页面. | + +### Filtered Search[](#filtered-search "Permalink") + +这些快捷方式在使用[过滤的搜索输入](search/index.html)时可用: + +| 键盘快捷键 | Description | +| --- | --- | +| `⌘` (Mac)+ `⌫` | 清除整个搜索过滤器. | +| `⌥` (Mac)/ `Ctrl` + `⌫` | 一次清除一个令牌. | + +## Epics[](#epics-ultimate "Permalink") + +这些快捷方式在查看[Epics](group/epics/index.html)时可用: + +| 键盘快捷键 | Description | +| --- | --- | +| `r` | 开始写评论. 如果选择了任何文本,它将在注释中引用. 不能用于在线程内回复. | +| `e` | 编辑说明. | +| `l` | 更改标签. | \ No newline at end of file diff --git "a/docs/\345\277\253\350\277\233\345\220\210\345\271\266.md" "b/docs/\345\277\253\350\277\233\345\220\210\345\271\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..1f5ba4234e5fa9d53b8227cc36e3dbaa9febc2bd --- /dev/null +++ "b/docs/\345\277\253\350\277\233\345\220\210\345\271\266.md" @@ -0,0 +1,29 @@ +# 快进合并请求[](#快进合并请求 "Permalink") + +有时,工作流策略可能会强制要求没有合并提交的干净提交历史记录. 在这种情况下,快速合并是理想的选择. + +使用快速转发合并请求,您可以保留线性 Git 历史记录以及一种无需创建合并提交即可接受合并请求的方法. + +## Overview[](#overview "Permalink") + +启用快进合并( [`--ff-only`](https://git-scm.com/docs/git-merge#git-merge---ff-only) )设置时,将不会创建任何合并提交,并且所有合并都将被快速转发,这意味着仅当分支可以被快速转发时才允许合并. + +当无法进行快速合并时,将为用户提供重新设置基准的选项. + +## Enabling fast-forward merges[](#enabling-fast-forward-merges "Permalink") + +1. 导航到项目的**设置,**然后搜索"合并方法" +2. 选择**快速合并**选项 +3. 点击**保存更改**以使更改生效 + +现在,当您访问合并请求页面时, **只有在可能进行快速**合并的情况下,您才能接受它. + +[![Fast forward merge request](img/50ab118d473b61d3d08773d6ea65a8ac.png)](img/ff_merge_mr.png) + +如果无法进行快速合并,但可以进行无冲突的变基,则将提供一个变基按钮. + +[![Fast forward merge request](img/51192310b3785dec5f60b6d59717a7a6.png)](img/ff_merge_rebase.png) + +如果目标分支位于源分支的前面,并且无法进行无冲突的变基,则需要先在本地对源分支进行变基,然后才能进行快速合并. + +[![Fast forward merge rebase locally](img/d241e2868510cfa5755170c1f02c78f3.png)](img/ff_merge_rebase_locally.png) \ No newline at end of file diff --git "a/docs/\345\277\253\351\200\237\346\223\215\344\275\234.md" "b/docs/\345\277\253\351\200\237\346\223\215\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..c1d198012b6a700352803b9a3be4203ef41d6a95 --- /dev/null +++ "b/docs/\345\277\253\351\200\237\346\223\215\344\275\234.md" @@ -0,0 +1,97 @@ +# 快速操作[](#快速操作 "Permalink") + +版本历史 + +* 在[GitLab 12.1 中](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26672)引入:一旦执行了一项操作,成功执行快速操作后将显示一条警报. +* 在[GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/16877)和更高版本中,您可以在更新问题,史诗和合并请求的描述时使用快速操作. + +快速操作是针对问题,史诗,合并请求和提交的常见操作的文本快捷方式,通常可通过在 GitLab 用户界面中单击按钮或下拉菜单来完成. 您可以在说明中或问题,史诗,合并请求和提交的注释中输入这些命令. 每个命令应放在单独的行上,以便正确检测和执行. + +## Quick Actions for issues, merge requests and epics[](#quick-actions-for-issues-merge-requests-and-epics "Permalink") + +以下快速操作适用于其中的描述,讨论和主题: + +* Issues +* 合并要求 +* Epics + +| Command | Issue | 合并要求 | Epic | Action | +| --- | --- | --- | --- | --- | +| `/approve` |   | ✓ |   | 批准合并请求. | +| `/assign @user` | ✓ | ✓ |   | 分配一个用户. | +| `/assign @user1 @user2` | ✓ | ✓ |   | 分配多个用户. | +| `/assign me` | ✓ | ✓ |   | 分配自己. | +| `/award :emoji:` | ✓ | ✓ | ✓ | 切换表情符号奖. | +| `/child_epic ` |   |   | ✓ | 将子史诗添加到`` . ``值的格式应为`&epic` , `group&epic`或`group&epic`的 URL( [在 GitLab 12.0 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/7330) ). | +| `/clear_weight` | ✓ |   |   | 净重. | +| `/close` | ✓ | ✓ | ✓ | Close. | +| `/confidential` | ✓ |   |   | 保密. | +| `/copy_metadata ` | ✓ | ✓ |   | 从项目中的另一个合并请求中复制标签和里程碑. | +| `/copy_metadata <#issue>` | ✓ | ✓ |   | Copy labels and milestone from another issue in the project. | +| `/create_merge_request ` | ✓ |   |   | 从当前问题开始创建一个新的合并请求. | +| `/done` | ✓ | ✓ | ✓ | 将待办事项标记为已完成. | +| `/due ` | ✓ |   |   | 设置截止日期. 有效的``示例包括`in 2 days` ( `this Friday`和`December 31st` . | +| `/duplicate <#issue>` | ✓ |   |   | 关闭此问题,并将其标记为另一个问题的副本. 另外,将两者都标记为相关. | +| `/epic ` | ✓ |   |   | 添加到史诗`` . ``值的格式应为`&epic` , `group&epic`或`group&epic`的 URL. | +| `/estimate <w
d h m>` | ✓ | ✓ |   | 设置时间估计. 例如, `/estimate 1w 3d 2h 14m` . | +| `/iteration *iteration:iteration` | ✓ |   |   | 设置迭代( [在 GitLab 13.1 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/196795) ) | +| `/label ~label1 ~label2` | ✓ | ✓ | ✓ | 添加一个或多个标签. 标签名称也可以不使用波浪号( `~` )开头,但是不支持混合语法. | +| `/lock` | ✓ | ✓ |   | 锁定螺纹. | +| `/merge` |   | ✓ |   | 合并更改. 根据项目设置,这可能是[管道成功](merge_requests/merge_when_pipeline_succeeds.html) ,添加到" [合并火车](../../ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.html) "等时. | +| `/milestone %milestone` | ✓ | ✓ |   | 设定里程碑. | +| `/move ` | ✓ |   |   | 将此问题移到另一个项目. | +| `/parent_epic ` |   |   | ✓ | 将父级史诗设置为`` . ``值的格式应为`&epic` , `group&epic`或`group&epic`的 URL( [在 GitLab 12.1 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/10556) ). | +| `/promote` | ✓ |   |   | 将问题升级为史诗. | +| `/publish` | ✓ |   |   | 将问题发布到关联的[状态页](status_page/index.html) ( [在 GitLab 13.0 中引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30906) ) | +| `/reassign @user1 @user2` | ✓ | ✓ |   | 更改受让人. | +| `/relabel ~label1 ~label2` | ✓ | ✓ | ✓ | 用指定的标签替换现有的标签. | +| `/relate #issue1 #issue2` | ✓ |   |   | 将问题标记为相关. | +| `/remove_child_epic ` |   |   | ✓ | 从``删除儿童史诗. ``值的格式应为`&epic` , `group&epic`或`group&epic`的 URL( [在 GitLab 12.0 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/7330) ). | +| `/remove_due_date` | ✓ |   |   | 删除到期日. | +| `/remove_epic` | ✓ |   |   | 从史诗中删除. | +| `/remove_estimate` | ✓ | ✓ |   | 删除时间估计. | +| `/remove_iteration` | ✓ |   |   | 删除迭代( [在 GitLab 13.1 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/196795) ) | +| `/remove_milestone` | ✓ | ✓ |   | 删除里程碑. | +| `/remove_parent_epic` |   |   | ✓ | 从史诗中删除父史诗( [在 GitLab 12.1 中引入](https://gitlab.com/gitlab-org/gitlab/-/issues/10556) ). | +| `/remove_time_spent` | ✓ | ✓ |   | 消除花费的时间. | +| `/remove_zoom` | ✓ |   |   | 从此问题中删除 Zoom 会议( [在 GitLab 12.4 中引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609) ). | +| `/reopen` | ✓ | ✓ | ✓ | Reopen. | +| `/shrug ` | ✓ | ✓ | ✓ | 将注释附加到`¯\_(ツ)_/¯` . | +| `/spend h m)> )>` | ✓ | ✓ |   | 减去花费的时间. (可选)指定花费时间的日期. 例如`/spend time(-1h 30m)`或`/spend time(-1h 30m) date(2018-08-26)` . | +| `/spend h m)> )>` | ✓ | ✓ |   | 增加花费的时间. (可选)指定花费时间的日期. 例如`/spend time(1h 30m)`或`/spend time(1h 30m) date(2018-08-26)` . | +| `/submit_review` |   | ✓ |   | Submit a pending review ([introduced in GitLab 12.7](https://gitlab.com/gitlab-org/gitlab/-/issues/8041)). | +| `/subscribe` | ✓ | ✓ | ✓ | 订阅通知. | +| `/tableflip ` | ✓ | ✓ | ✓ | 在`(╯°□°)╯︵ ┻━┻`添加注释. | +| `/target_branch ` |   | ✓ |   | 设置目标分支. | +| `/title ` | ✓ | ✓ | ✓ | 更改标题. | +| `/todo` | ✓ | ✓ | ✓ | 添加待办事项. | +| `/unassign @user1 @user2` | ✓ | ✓ |   | 删除特定的受让人. | +| `/unassign` | ✓ | ✓ |   | 删除所有受让人. | +| `/unlabel ~label1 ~label2` or `/remove_label ~label1 ~label2` | ✓ | ✓ | ✓ | 删除所有或特定标签. | +| `/unlock` | ✓ | ✓ |   | 解锁线程. | +| `/unsubscribe` | ✓ | ✓ | ✓ | 退订通知. | +| `/weight ` | ✓ |   |   | 设定重量. 为有效选项``包括`0` , `1` , `2` ,依此类推. | +| `/wip` |   | ✓ |   | 切换"进行中"状态. | +| `/zoom ` | ✓ |   |   | 将 Zoom [Meeting](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609)添加到此问题( [在 GitLab 12.4 中引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609) ). | + +## Autocomplete characters[](#autocomplete-characters "Permalink") + +许多快速操作都需要一个参数,例如:用户名,里程碑和标签. 与从列表中选择项目相比, [自动完成字符](autocomplete_characters.html)可以使输入参数更加容易. + +## Quick actions parameters[](#quick-actions-parameters "Permalink") + +设置快速操作参数的最简单方法是使用自动完成功能. 如果您手动输入参数,则该参数必须用双引号( `"` )括起来,除非它仅包含以下字符: + +1. ASCII 字母. +2. 数字(0-9). +3. 下划线( `_` ),连字符( `-` ),问号( `?` ),点( `.` )或`&` ( `&` ). + +参数也区分大小写. 自动完成功能会自动处理此问题,并自动插入引号. + +## Quick actions for commit messages[](#quick-actions-for-commit-messages "Permalink") + +以下快速操作适用于提交消息: + +| Command | Action | +| --- | --- | +| `/tag v1.2.3 ` | 使用可选消息标记此提交 | \ No newline at end of file diff --git "a/docs/\346\210\252\346\255\242\346\227\245\346\234\237.md" "b/docs/\346\210\252\346\255\242\346\227\245\346\234\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..e5640e01e186870924d5a717721397ce6ef4e293 --- /dev/null +++ "b/docs/\346\210\252\346\255\242\346\227\245\346\234\237.md" @@ -0,0 +1,40 @@ +# 截止日期[](#截止日期 "Permalink") + +在 GitLab 8.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3614) . + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +Due dates can be used in issues to keep track of deadlines and make sure features are shipped on time. Users must have at least [Reporter permissions](../../permissions.html) to be able to edit them, but they can be seen by everybody with permission to view the issue. + +## Setting a due date[](#setting-a-due-date "Permalink") + +创建或编辑问题时,您可以单击**截止日期**字段,然后出现一个日历来帮助您选择所需的日期. 要删除日期,请选择日期文本并将其删除. 该日期与服务器的时区有关,而不与设置到期日期的用户的时区有关. + +[![Create a due date](img/36abd47af07b3b82f814e74be4619b4d.png)](img/due_dates_create.png) + +您还可以通过问题侧边栏设置截止日期. 展开边栏,然后单击" **编辑"**以选择截止日期或删除现有的日期. 更改将立即保存. + +[![Edit a due date via the sidebar](img/2dde5152cc249727c2d1016051d52131.png)](img/due_dates_edit_sidebar.png) + +设置截止日期的最后一种方法是直接在问题的描述或注释中使用[快速操作](../quick_actions.html) : + +* `/due ` :设置到期日. 有效的``示例包括`in 2 days` ( `this Friday`和`December 31st` . +* `/remove_due_date` :删除到期日. + +## Making use of due dates[](#making-use-of-due-dates "Permalink") + +具有到期日期的问题可以在问题跟踪器中轻松查看,并在它们旁边显示一个日期. 日期过期的问题将图标和日期标记为红色. 您可以从右侧的下拉菜单中按`Due soon` `Due later`或`Due later` `Due soon`问题对问题进行排序. + +[![Issues with due dates in the issues index page](img/371d1ca1640afbd824acc19b18bc40c9.png)](img/due_dates_issues_index_page.png) + +截止日期也会出现在您的[待办事项清单中](../../todos.html) . + +[![Issues with due dates in the todos](img/9d0b2e21b9be06d263674db132420176.png)](img/due_dates_todos.png) + +未解决问题的前一天,将向该问题的所有参与者发送电子邮件. 与截止日期一样,"截止日期之前的一天"由服务器的时区确定. + +截止日期的问题也可以导出为 iCalendar 供稿. 提要的 URL 可以添加到日历应用程序中. 通过单击以下页面上的**订阅日历**按钮可以访问该提要: + +* 在**分配的问题**页面上,该页面链接在 GitLab 标头的右侧 +* 在" **项目问题"**页面上 +* 在**组问题**页面上 \ No newline at end of file diff --git "a/docs/\346\211\271\351\207\217\347\274\226\350\276\221.md" "b/docs/\346\211\271\351\207\217\347\274\226\350\276\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd52244318e8a689a71f8db8a7d28db5daa2863c --- /dev/null +++ "b/docs/\346\211\271\351\207\217\347\274\226\350\276\221.md" @@ -0,0 +1,56 @@ +# 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) + +# 批量编辑 Issue 及合并请求[](#批量编辑issue及合并请求 "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 diff --git "a/docs/\346\216\250\351\200\201\351\200\211\351\241\271.md" "b/docs/\346\216\250\351\200\201\351\200\211\351\241\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..12d89147c8e772353f0e998f329d458ccedd3b00 --- /dev/null +++ "b/docs/\346\216\250\351\200\201\351\200\211\351\241\271.md" @@ -0,0 +1,97 @@ +# 推送选项[](#推送选项 "Permalink") + +在 GitLab 11.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) . + +GitLab 支持使用客户端[Git 推送选项](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)在推送更改的同时执行各种操作. 此外, [推送规则](../../push_rules/push_rules.html)提供服务器端控制和实施选项. + +当前,有推送选项可用于: + +* [Skipping CI jobs](#push-options-for-gitlab-cicd) +* [Merge requests](#push-options-for-merge-requests) + +**注意:** Git 推送选项仅在 Git 2.10 或更高版本中可用. + +对于 2.10 至 2.17 版本的 Git,请使用`--push-option` : + +``` +git push --push-option= +``` + +对于 2.18 及更高版本,可以使用以上格式,或更短的`-o` : + +``` +git push -o +``` + +## Push options for GitLab CI/CD[](#push-options-for-gitlab-cicd "Permalink") + +您可以使用推入选项跳过 CI / CD 管道或传递环境变量. + +| 推送选项 | Description | 版本介绍 | +| --- | --- | --- | +| `ci.skip` | 不要为最新推送创建 CI 管道. | [11.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) | +| `ci.variable="="` | 如果由于推送而创建了[环境变量](../../ci/variables/README.html) ,请提供要在 CI 管道中使用的[环境变量](../../ci/variables/README.html) . | [12.6](https://gitlab.com/gitlab-org/gitlab/-/issues/27983) | + +使用`ci.skip`的示例: + +``` +git push -o ci.skip +``` + +An example of passing some environment variables for a pipeline: + +``` +git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600" +``` + +## Push options for merge requests[](#push-options-for-merge-requests "Permalink") + +您可以在推送更改的同时使用 Git 推送选项对合并请求执行某些操作: + +| 推送选项 | Description | 版本介绍 | +| --- | --- | --- | +| `merge_request.create` | 为推送的分支创建一个新的合并请求. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.target=` | 将合并请求的目标设置为特定分支. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.merge_when_pipeline_succeeds` | 设置合并请求以[在其管道成功时](merge_requests/merge_when_pipeline_succeeds.html)进行[合并](merge_requests/merge_when_pipeline_succeeds.html) . | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.remove_source_branch` | 设置合并请求以在合并时删除源分支. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.title=""` | 设置合并请求的标题. 例如: `git push -o merge_request.title="The title I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.description="<description>"` | 设置合并请求的描述. 例如: `git push -o merge_request.description="The description I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.label="<label>"` | 将标签添加到合并请求. 如果标签不存在,它将被创建. 例如,对于两个标签: `git push -o merge_request.label="label1" -o merge_request.label="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) | +| `merge_request.unlabel="<label>"` | 从合并请求中删除标签. 例如,对于两个标签: `git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) | + +如果您使用要求文本带有空格的 push 选项,则需要用引号( `"` )括起来.如果没有空格,则可以省略引号.例如: + +``` +git push -o merge_request.label="Label with spaces" +git push -o merge_request.label=Label-with-no-spaces +``` + +您可以通过使用多个`-o` (或`--push-option` )标志来组合推送选项以一次完成多个任务. 例如,如果您要创建一个新的合并请求,并定位一个名为`my-target-branch` : + +``` +git push -o merge_request.create -o merge_request.target=my-target-branch +``` + +此外,如果希望合并请求在管道成功后立即合并,则可以执行以下操作: + +``` +git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.merge_when_pipeline_succeeds +``` + +## Useful Git aliases[](#useful-git-aliases "Permalink") + +如上所示,Git 推送选项可能导致 Git 命令增长很长. 如果您经常使用相同的 push 选项,则创建[Git 别名会](https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases)很有用. Git 别名是 Git 的命令行快捷方式,可以大大简化长 Git 命令的使用. + +### Merge when pipeline succeeds alias[](#merge-when-pipeline-succeeds-alias "Permalink") + +要[在管道成功执行 Git push 选项时](#push-options-for-merge-requests)为[合并](#push-options-for-merge-requests)设置 Git 别名: + +``` +git config --global alias.mwps "push -o merge_request.create -o merge_request.target=master -o merge_request.merge_when_pipeline_succeeds" +``` + +然后,为了在管道成功时快速推送将针对 master 并合并的本地分支: + +``` +git mwps origin <local-branch-name> +``` \ No newline at end of file diff --git "a/docs/\346\217\217\350\277\260\346\250\241\346\235\277.md" "b/docs/\346\217\217\350\277\260\346\250\241\346\235\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..5e98c49032262bac4eed5454ea4e0a728eefc7e0 --- /dev/null +++ "b/docs/\346\217\217\350\277\260\346\250\241\346\235\277.md" @@ -0,0 +1,117 @@ +# 描述模板[](#描述模板 "Permalink") + +我们都知道,项目开发人员更有可能及时解决提交的问题. + +使用描述模板,您可以为问题定义特定于上下文的模板,并为项目合并请求描述字段,并帮助从问题中过滤掉许多不必要的噪音. + +## Overview[](#overview "Permalink") + +通过使用描述模板,创建新发行或合并请求的用户可以选择描述模板,以帮助他们与其他贡献者进行有效沟通. + +每个 GitLab 项目都可以定义自己的一组描述模板,这些模板将被添加到 GitLab 项目存储库的根目录中. + +描述模板必须用[Markdown](../markdown.html)编写,并存储在项目的存储库中的`.gitlab`目录下. 仅考虑默认分支的模板. + +## Use-cases[](#use-cases "Permalink") + +* 添加一个模板,该模板将用于特定项目的每个问题,并提供说明和指南,要求提供特定于该主题的信息. 例如,如果您有一个用于跟踪新博客文章的项目,则可以要求标题,大纲,作者姓名,作者社交媒体信息等等. +* 在前面的示例之后,您可以为随新博客帖子提交的每个 MR 创建模板,要求提供有关帖子日期,前事数据,图像准则,相关问题的链接,审阅者姓名等信息. +* 您还可以为工作流的不同阶段创建问题并合并请求模板,例如功能建议,功能改进或错误报告. + +## Creating issue templates[](#creating-issue-templates "Permalink") + +在存储库的`.gitlab/issue_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +To create a Markdown file: + +1. 单击`master`旁边的`+`按钮,然后单击**New file** . +2. 将问题模板的名称添加到`master`旁边的**File name**文本字段中. 确保单词之间用下划线分隔,并且文件的扩展名为`.md` ,例如`feature_request.md` . +3. 提交并推送到您的默认分支. + +如果您的存储库中没有`.gitlab/issue_templates`目录,则需要创建它. + +要创建`.gitlab/issue_templates`目录: + +1. 单击`master`旁边的`+`按钮,然后选择**New directory** . +2. 将此新目录`.gitlab`并提交到默认分支. +3. 再次单击`master`旁边的`+`按钮,然后选择**New directory** .这次,n +4. 将目录`issue_templates`并提交到默认分支. + +要检查它是否正常工作,请[创建一个新问题,](./issues/managing_issues.html#create-a-new-issue)然后查看是否可以选择描述模板. + +## Creating merge request templates[](#creating-merge-request-templates "Permalink") + +与发布模板类似,在存储库的`.gitlab/merge_request_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +## Using the templates[](#using-the-templates "Permalink") + +让我们以创建了`.gitlab/issue_templates/Bug.md`文件`.gitlab/issue_templates/Bug.md` . 在创建或编辑问题时,这将启用`Bug`下拉选项. 选择`Bug` , `Bug.md`模板文件中的内容将被复制到问题描述字段. "重置模板"按钮将放弃您在选择模板后所做的任何更改,并将其恢复为初始状态. + +[![Description templates](img/6224c1a367d53cc7bb5c5536af96ec6e.png)](img/description_templates.png) + +## Setting a default template for merge requests and issues[](#setting-a-default-template-for-merge-requests-and-issues-starter "Permalink") + +版本历史 + +* 此功能是在[描述模板](#overview)之前引入的,可在[GitLab Starter 中使用](https://about.gitlab.com/pricing/) . 可以在项目设置中启用它. +* 问题模板在 GitLab EE 8.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28) . +* 在 GitLab EE 6.9 中[引入](https://gitlab.com/gitlab-org/gitlab/commit/7478ece8b48e80782b5465b96c79f85cc91d391b)了合并请求的模板. + +在项目的**"设置" /"可见性","项目功能","权限"**部分中,应将问题和/或合并请求的可见性设置为"每个人都可以访问"或"只有项目成员",否则模板文本区域将不会显示. 这是默认行为,因此在大多数情况下都可以. + +1. 转到项目的**"设置"** . +2. 单击**合并请求**标题下的**展开** . +3. 填写" **合并请求**的**默认描述模板"**文本区域. +4. Click **Expand** under **默认问题模板**. +5. 填写问题的**默认描述模板**文本区域. 由于 GitLab 合并请求和问题支持[Markdown](../markdown.html) ,因此您可以使用它来格式化标题,列表等. + +[![Default merge request description templates](img/c7ee3e55c50a5f7d0e3faceda16e2dc2.png)](img/description_templates_merge_request_settings.png) + +[![Default issue description templates](img/c9d2a45b5906d81d1118b63a832bbcd4.png)](img/description_templates_issue_settings.png) + +添加描述后,点击**保存更改**以使设置生效. 现在,每次创建新的合并请求或问题时,都将使用您在模板中输入的文本预先填充. + +## Description template example[](#description-template-example "Permalink") + +我们在 GitLab 社区版项目中使用问题和合并请求的描述模板. 请参考[`.gitlab`文件夹](https://gitlab.com/gitlab-org/gitlab/tree/master/.gitlab)中的一些示例. + +**提示:**可以在描述模板中使用[快速操作](quick_actions.html)来快速添加标签,受让人和里程碑. 仅当提交问题或合并请求的用户有权执行相关操作时,才执行快速操作. + +这是错误报告模板的示例: + +``` +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 diff --git "a/docs/\346\220\234\347\264\242.md" "b/docs/\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..afbdba04689866ded14013037bc988f121610841 --- /dev/null +++ "b/docs/\346\220\234\347\264\242.md" @@ -0,0 +1,169 @@ +# 搜索[](#搜索 "Permalink") + +## Issues and merge requests[](#issues-and-merge-requests "Permalink") + +要搜索问题并合并多个项目中的请求,可以使用屏幕右上角的" **问题"**或" **合并请求"**链接. + +它们两者都以相同的方式工作,因此,以下说明对两者均有效. + +右边显示的数字代表分配给您的问题和合并请求的数量. + +[![issues and MRs dashboard links](img/d0143a44aad793332527a786d79524f7.png)](img/dashboard_links.png) + +点击**问题时** ,您会立即看到分配给您的未解决问题: + +[![Issues assigned to you](img/41371f9efeaf03eb888ba8e19a486185.png)](img/issues_assigned_to_you.png) + +You can search through **Open**, **Closed**, or **All** issues. + +您还可以使用搜索和过滤器字段过滤结果,如下面的[过滤问题和合并请求列表中所述](#filtering-issue-and-merge-request-lists) . + +### Issues and MRs assigned to you or created by you[](#issues-and-mrs-assigned-to-you-or-created-by-you "Permalink") + +您还可以在屏幕右上角的搜索字段中找到问题的快捷方式,并合并由您创建或分配给您的请求: + +[![shortcut to your issues and mrs](img/a223e320ef570ec303a4e7346a899af7.png)](img/issues_mrs_shortcut.png) + +### Filtering issue and merge request lists[](#filtering-issue-and-merge-request-lists "Permalink") + +请按照以下步骤筛选项目和组中的" **问题**和**合并请求"**列表页面: + +1. 单击字段**搜索或过滤结果…** . +2. 在出现的下拉菜单中,选择您要过滤的属性: + * 作者 + * 受让人 + * [里程碑](../project/milestones/index.html) + * 释放 + * [标签](../project/labels.html) + * 我的反应 + * 机密 + * Epic(在 GitLab 12.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/195704) ),包括[儿童史诗](../group/epics/index.html#multi-level-child-epics-ultimate) (在[GitLab Ultimate](https://about.gitlab.com/pricing/) 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/9029) ) + * 搜索此文字 +3. 选择或键入用于过滤属性的运算符. 可以使用以下运算符: + * `=` :是 + * `!=` :不是(在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/18059) ) +4. 输入文本以按[过滤属性](#filters-autocomplete) . +5. 重复此过程以按多个属性进行过滤. 多个属性通过逻辑`AND` . + +例如,按作者`=` Jane 和 Milestone `!=` 12.6 进行过滤,以解决 Jane 是作者而里程碑不是 12.6 的问题. + +[![filter issues in a project](img/9570df3750a76ee8a88eddb48512daa3.png)](img/issue_search_filter_v12_7.png) + +### Filtering by **None** / **Any**[](#filtering-by-none--any "Permalink") + +一些过滤字段(例如里程碑和受让人)允许您按**None**或**Any**进行过滤. + +[![filter by none any](img/e1f4f357a93d9362f282810a575d73e3.png)](img/issues_filter_none_any.png) + +选择" **无"**将返回该字段为空值的结果. 例如:没有里程碑,没有受让人. + +选择" **任意** "则相反. 它返回该字段具有非空值的结果. + +### Searching for specific terms[](#searching-for-specific-terms "Permalink") + +您可以按标题或说明中包含的特定术语过滤问题并合并请求. + +* Syntax + * 搜索以任何顺序查找查询中的所有单词. 例如:搜索问题以寻找`display bug` ,将以任何顺序返回匹配这两个单词的所有问题. + * 要找到确切的术语,请使用双引号: `"display bug"` +* Limitation + * 出于性能原因,少于 3 个字符的术语将被忽略. 例如:搜索问题`included in titles`是一样`included titles` + * 每个查询只能搜索 4096 个字符和 64 个字词. + +[![filter issues by specific terms](img/e336833accfac93c8ed18718b667dab5.png)](img/issue_search_by_term.png) + +### Filtering by ID[](#filtering-by-id "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/39908) . + +您可以按 ID 将" **问题"**列表过滤到单个实例. 例如,输入过滤器`#10`仅返回问题 10.这同样适用于" **合并请求"**列表. 输入过滤器`#30`以仅返回合并请求 30. + +[![filter issues by specific id](img/1dcfd40d9306c4cfb80013c0cebdcac0.png)](img/issue_search_by_id.png) + +### Filtering merge requests by approvers[](#filtering-merge-requests-by-approvers-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/9468) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.9. + +要过滤单个批准者的合并请求,您可以键入(或从下拉列表中选择) **批准者**并选择用户. + +[![Filter MRs by an approver](img/5ec08a62b534de16956701e85c41e6b5.png)](img/filter_approver_merge_requests.png) + +### Filtering merge requests by “approved by”[](#filtering-merge-requests-by-approved-by-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30335) in [GitLab Starter](https://about.gitlab.com/pricing/) 13.0. + +要过滤已由特定个人批准的合并请求,您可以键入(或从下拉列表中选择)" **批准",**然后选择用户. + +[![Filter MRs by approved by](img/fe213f080418c1bd6d92faa7e49770d3.png)](img/filter_approved_by_merge_requests_v13_0.png) + +## Filters autocomplete[](#filters-autocomplete "Permalink") + +GitLab 在许多页面(问题,合并请求,史诗和管道等)中提供了许多过滤器,您可以使用它们来缩小搜索范围. 使用过滤器功能时,可以开始键入字符以显示相关用户或其他属性. + +为了优化性能,至少需要三个字符才能开始搜索. 例如,如果您要搜索受让人" Simone Presley"的问题,则您需要至少键入" Sim",然后自动完成才能给出任何相关结果. + +## Search history[](#search-history "Permalink") + +您可以通过单击搜索输入左侧的小箭头图标来查看最近的搜索. 单击搜索条目以再次运行该搜索. 此功能可用于问题和合并请求. 搜索结果存储在本地浏览器中. + +[![search history](img/3863add8513c90ad786112f7a200a568.png)](img/search_history.gif) + +## Removing search filters[](#removing-search-filters "Permalink") + +单击过滤器的(x)按钮或退格可以删除单个过滤器. 整个搜索过滤器可以通过点击搜索框的(X)按钮,或通过`⌘`键`(Mac)+⌫`被清除. + +要一次删除一个过滤器令牌,可以使用`⌥` (Mac)/ `Ctrl` + `⌫`键盘组合. + +## Filtering with multiple filters of the same type[](#filtering-with-multiple-filters-of-the-same-type "Permalink") + +某些过滤器可以多次添加. 这些包括但不限于受让人和标签. 当使用相同类型的多个过滤器进行过滤时,将应用"与"逻辑. 例如,如果您要过滤`assignee:@sam assignee:@sarah` ,那么您的结果将仅包含将受让人分配给 Sam 和 Sarah 的条目. + +[![multiple assignees filtering](img/1165fee2238c55848aeb09d59c76cf7b.png)](img/multiple_assignees.png) + +## Shortcut[](#shortcut "Permalink") + +您还可以在项目仪表板右上方的搜索字段中找到快捷方式,以快速访问问题并合并在该项目中创建或分配给您的请求: + +[![search per project - shortcut](img/3001efd4ffb849af0c15eb8dda4d4050.png)](img/project_search.png) + +## To-Do List[](#to-do-list "Permalink") + +可以通过"待办事项"和"完成"来搜索您[的待办事项列表](../todos.html#gitlab-to-do-list) . 您可以按项目,作者,类型和操作[过滤](../todos.html#filtering-your-to-do-list)它们. 另外,您可以按[**标签优先级**](../../user/project/labels.html#label-priority) , **最后创建**和**最早创建**对其进行排序. + +## Projects[](#projects "Permalink") + +您可以从左侧菜单中搜索项目,方法是依次点击菜单栏和**项目** . 在" **按名称过滤** "字段上,输入要查找的项目或组名称,GitLab 会在您键入时为您过滤它们. + +你也可以去找你的项目[出演](../project/index.html#star-a-project) ( **加星标的项目** ),并**探索**所有的公共和内部项目 GitLab.com 可用,从中你可以通过可视性筛选,通过**趋势** ,最好与**大多数明星**评分,或他们的**全部** . + +您还可以按**名称** , **最后创建** , **最旧创建** , **最后更新** , **最新更新** , **所有者**对它们进行排序,并选择隐藏或显示**已归档的项目** : + +[![sort projects](img/7ff67c276870da733a9bc04b2aa9d969.png)](img/sort_projects.png) + +## Groups[](#groups "Permalink") + +Similarly to [projects search](#projects), you can search through your groups from the left menu, by clicking the menu bar, then **Groups**. + +在" **按名称过滤** "字段上,输入要查找的组名,GitLab 将在您键入时为您过滤它们. + +您也可以**浏览**所有的公共和 GitLab.com 可用的内部组,您可以按照**最新创建的** , **最早建立** , **最后更新** ,或**最早的更新** . + +## Issue Boards[](#issue-boards "Permalink") + +在[问题板上](../../user/project/issue_board.html) ,您可以按**作者** , **受让人** , **里程碑**和**标签**过滤问题. 您还可以从键入时加载的字段中**按名称过滤** (按名称)(问题标题). + +当您要搜索要添加到**问题**面板中列表中的问题时,请点击屏幕右上角的**添加问题**按钮,打开一个模态窗口,除了按**名称**过滤它们之外,您还可以从中找到一个模式窗口**作者** , **受让人** , **里程碑**和**标签** ,选择多个问题以添加到您选择的列表中: + +[![search and select issues to add to board](img/e57526dd100a1b0a33bdae55e3bf32c7.png)](img/search_issues_board.png) + +## Advanced Global Search[](#advanced-global-search-starter "Permalink") + +利用 Elasticsearch 在整个 GitLab 实例上进行更快,更高级的代码搜索. + +[Learn how to use the Advanced Global Search.](advanced_global_search.html) + +## Advanced Syntax Search[](#advanced-syntax-search-starter "Permalink") + +使用高级查询获得更具针对性的搜索结果. + +[Learn how to use the Advanced Syntax Search.](advanced_search_syntax.html) \ No newline at end of file diff --git "a/docs/\346\223\215\344\275\234Issue.md" "b/docs/\346\223\215\344\275\234Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..155e599b006c7778743663e97e8f8ba43d5aac1b --- /dev/null +++ "b/docs/\346\223\215\344\275\234Issue.md" @@ -0,0 +1,231 @@ +# 操作Issue[](#操作Issue "Permalink") + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +## Parts of an Issue[](#parts-of-an-issue "Permalink") + +下图说明了问题的外观. 请注意,根据使用的 GitLab 版本和查看问题的用户权限,某些部分看起来可能会略有不同或不存在. + +您可以在一个屏幕上找到该问题的所有信息. + +[![Issue view](img/b6662e0dd306cb7949bbfd70db9b384c.png)](img/issues_main_view_numbered.png) + +* **1.** [New Issue, close issue (reopen issue, report issue)](#new-issue-close-issue-reopen-issue-report-issue) +* **2.** [To Do](#to-do) +* **3.** [Assignee](#assignee) + * **3.1.** [Multiple Assignees](#multiple-assignees-starter) +* **4.** [Epic](#epic-premium) +* **5.** [Milestone](#milestone) +* **6.** [Time tracking](#time-tracking) +* **7.** [Due date](#due-date) +* **8.** [Labels](#labels) +* **9.** [Weight](#weight-starter) +* **10.** [Confidentiality](#confidentiality) +* **11.** [Lock issue](#lock-issue) +* **12.** [Participants](#participants) +* **13.** [Notifications](#notifications) +* **14.** [Reference](#reference) +* **15.** [Edit](#edit) +* **16.** [Description](#description) +* **17.** [Mentions](#mentions) +* **18.** [Related Issues](#related-issues-starter) +* **19.** [Related Merge Requests](#related-merge-requests) +* **20.** [Award emoji](#award-emoji) +* **21.** [Show all activity](#show-all-activity) +* **22.** [Create Merge Request](#create-merge-request) +* **23.** [Issue history](#issue-history) + * [Activity sort order](#activity-sort-order) +* **24.** [Comments](#comments) +* **25.** [Submit comment, start a thread, or comment and close](#submit-comment-start-a-thread-or-comment-and-close) +* **26.** [Zoom meetings](#zoom-meetings) + +问题从状态(打开或关闭)开始,然后是作者,并包括许多其他功能,在上图中编号,以逐一解释其含义. + +当问题由其他用户更改时,问题屏幕的许多元素都会自动刷新,例如标题和说明. 注释和系统注释也会根据各种操作和内容更新自动更新. + +### New Issue, close issue (reopen issue, report issue)[](#new-issue-close-issue-reopen-issue-report-issue "Permalink") + +单击" **新问题"**将打开一个新窗口,以在同一项目中创建一个新问题. 单击**关闭问题**将关闭此问题,但不会被删除. 如果问题已经关闭,您仍然可以访问它,并且按钮将显示**Reopen issue** ,如下所示,您可以单击以重新打开问题. 重新开放的问题与其他任何问题都没有不同. + +[![Reopen Issue](img/136df5416c67f2d80606b4849658e289.png)](img/reopen-issue.png) + +如果您无权修改问题,则" **关闭问题"**按钮将替换为" **报告问题"** ,您可以单击该按钮以[提交](../../abuse_reports.html)有关该问题[的滥用情况报告](../../abuse_reports.html) . 如果您有权修改问题,但仅在关闭问题后,它也会显示. + +[![Report Abuse](img/16f0d7c3d19700b0e30aa6c1528acb91.png)](img/report-abuse.png) + +### To Do[](#to-do "Permalink") + +您可以在[GitLab 任务列表中](../../todos.html)添加问题或从中删除问题. + +执行此操作的按钮具有不同的标签,具体取决于问题是否已在"任务列表"中. 如果问题是: + +* 已在您的待办事项清单上:该按钮标有" **标记为已完成"** . 单击按钮以从您的任务列表中删除该问题. +* 不在您的待办事项清单上:该按钮标有**添加待办事项** . 单击按钮将问题添加到您的"任务列表"中. + +### Assignee[](#assignee "Permalink") + +可以将问题分配给: + +* Yourself. +* 另一个人. +* [Many people](#multiple-assignees-starter). + +可以根据需要频繁更改受让人. 想法是,受让人应对该问题负责,直到将其重新分配给其他人以解决该问题为止. 分配给某人后,它将显示在其分配的问题列表中. + +**提示:**如果用户不是该项目的成员,则只有他们自己创建问题后才能将其分配给他们. + +#### Multiple Assignees[](#multiple-assignees-starter "Permalink") + +通常,多个人会共同处理同一问题,而在拥有问题共享所有权的大型团队中,跟踪这些问题尤其困难. + +在[GitLab Starter 中](https://about.gitlab.com/pricing/) ,您可以[将多个人分配](multiple_assignees_for_issues.html)给一个问题. + +### Epic[](#epic-premium "Permalink") + +您可以将问题分配给[Epic](../../group/epics/index.html) ,从而可以更好地管理相关问题组. + +### Milestone[](#milestone "Permalink") + +选择一个[里程碑](../milestones/index.html) ,将问题归因于此. + +### Time tracking[](#time-tracking "Permalink") + +使用[GitLab 快速行动](../quick_actions.html)来[跟踪估计和花费在问题上的时间](../time_tracking.html) . 您可以添加解决问题[所需时间](../time_tracking.html#estimates)的[估计,](../time_tracking.html#estimates)还可以添加解决问题[所花费的时间](../time_tracking.html#time-spent) . + +### Due date[](#due-date "Permalink") + +当您的工作时间很紧时,重要的是要有一种方法来为实现和解决问题设置截止日期. 这可以在[截止日期](due_dates.html)元素中完成. 截止日期可以根据需要进行多次更改. + +### Labels[](#labels "Permalink") + +通过给它们加上[标签](../labels.html)来对问题进行分类. 它们有助于组织工作流程,并使您能够与[GitLab 发行委员会合作](index.html#issue-boards) . + +还可以为组标签分配问题,该组标签允许您对同一组内的所有项目使用相同的标签. 它们的工作原理完全相同,但可立即用于该组中的所有项目. + +**提示:**如果标签尚不存在,可以单击**编辑** ,它会打开一个下拉菜单,从中可以选择**创建新标签** . + +### Weight[](#weight-starter "Permalink") + +为问题[分配权重](issue_weight.html) . 使用较大的值表示完成此问题需要付出更多的努力. 仅允许正值或零. + +### Confidentiality[](#confidentiality "Permalink") + +您可以[将问题设置为机密](confidential_issues.html) . 设置后,未经授权的用户将无法访问该问题,也不会在项目问题委员会或问题列表中看到该问题. + +### Lock issue[](#lock-issue "Permalink") + +您可以[锁定问题中的线程](../../discussions/index.html#lock-discussions) ,以防止添加更多评论. + +### Participants[](#participants "Permalink") + +涉及该问题的所有用户. 他们要么参与了该[线程](../../discussions/index.html) ,要么在描述或线程中被提及. + +### Notifications[](#notifications "Permalink") + +单击该图标以启用/禁用该问题的[通知](../../profile/notifications.html#issue--epics--merge-request-events) . 如果您以任何方式参与该问题,它将自动启用. + +* **Enable**: If you are not a participant in the discussion on that issue, but want to receive notifications on each update, subscribe to it. +* **禁用** :如果您正在接收有关该问题的更新通知,但不再希望接收它们,请取消订阅. + +### Reference[](#reference "Permalink") + +* 快速"复制"按钮,这个问题的参考,它看起来像`foo/bar#xxx` ,其中`foo`是`username`或`groupname` , `bar`是`project-name` ,并且`xxx`是发行数量. + +### Edit[](#edit "Permalink") + +单击此图标可打开要编辑的问题,您将有权访问与创建问题时相同的所有字段. 如果用户没有编辑问题的权限,则不会显示此图标. + +### Description[](#description "Permalink") + +纯文本标题和问题描述位于问题页面的顶部中心. 该描述完全支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) ,允许许多格式选项. + +> [自 GitLab 12.6 起](https://gitlab.com/gitlab-org/gitlab/-/issues/10103) , [问题历史记录](#issue-history)中列出了对[问题](#issue-history)描述的更改. + +### Mentions[](#mentions "Permalink") + +您可以使用`@username`或`@groupname`提及您的 GitLab 实例中存在的用户或组,除非他们在配置文件设置中禁用了所有通知,否则它们将通过待办事项和电子邮件得到通知. 这是在[通知设置中](../../profile/notifications.html)控制的. + +自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们. + +**提示:**避免在问题中提及`@all`并合并请求,因为它会向该项目组的所有成员发送电子邮件通知,这可以解释为垃圾邮件. + +### Related Issues[](#related-issues-starter "Permalink") + +这里列出了被称为[相关问题的问题](related_issues.html) . 您也可以单击`+`添加更多相关问题. + +### Related Merge Requests[](#related-merge-requests "Permalink") + +该问题的描述或问题线程中提到的[合并请求](crosslinking_issues.html#from-merge-requests)在此处列为[相关合并请求](crosslinking_issues.html#from-merge-requests) . 另外,如果当前问题在另一个合并请求中被提及是相关的,则该合并请求将在此处列出. + +### Award emoji[](#award-emoji "Permalink") + +您可以为该问题授予表情符号. 有" thumbs_up"和" thumbs_down"的快捷方式,或者您可以单击浅灰色的" face"从可用的[GitLab 风味 Markdown Emoji](../../markdown.html#emoji)下拉列表中选择其他反应. + +**提示:在主题中**张贴" +1"作为评论会对该问题的所有订阅参与者造成垃圾邮件,会使主题混乱,因此不建议这样做. 授予表情符号是一种让他们知道您的反应而不会向其发送垃圾邮件的方法. + +### Show all activity[](#show-all-activity "Permalink") + +您可以通过单击**显示所有活动**并选择以下任一内容来过滤问题历史记录中**显示的内容** : + +* **仅显示评论** ,仅显示主题并隐藏问题的更新. +* **仅显示历史记录** ,它隐藏线程并且仅显示更新. + +Also: + +* 您可以使用`@username`或`@groupname`提及您的 GitLab 实例中存在的用户或组,除非他们已[禁用](#notifications)其配置文件设置中的[所有通知](#notifications) ,否则它们将通过待办事项和电子邮件得到[通知](#notifications) . +* 自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们. + +[![Show all activity](img/6a23362ee367dd144c2c8ea315b8dde0.png)](img/show-all-activity.png) + +### Create Merge Request[](#create-merge-request "Permalink") + +在一个动作中创建一个新的分支和[**草稿**合并请求](../merge_requests/work_in_progress_merge_requests.html) . 默认情况下,该分支将被命名为`issuenumber-title` ,但是您可以选择任何名称,并且 GitLab 会验证该分支尚未被使用. 合并请求将自动继承问题的里程碑和标签,并设置为在合并时关闭问题. + +[![Create MR from issue](img/2a301148b56e04c50113445dc7280c15.png)](img/create_mr_from_issue.png) + +(可选)您可以选择仅创建一个[新分支](../repository/web_editor.html#create-a-new-branch-from-an-issue) ,以该问题命名. + +### Issue history[](#issue-history "Permalink") + +All comments and updates to the issue are tracked and listed here, but this can be filtered, as shown above. + +#### Activity sort order[](#activity-sort-order "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/14588) . + +您可以颠倒默认顺序,并与按顶部的最新项目排序的活动供稿进行交互. 您的首选项通过本地存储保存,并自动应用于您查看的每个问题. + +要更改活动排序顺序,请单击**最旧的第一个**下拉菜单,然后选择最旧或最新的项目以首先显示. + +[![Issue activity sort order dropdown button](img/db92110fba2588fed57b9af6bb2a381c.png)](img/issue_activity_sort_order_v12_10.png) + +### Comments[](#comments "Permalink") + +通过在其主题中发布评论来协作解决问题. 该文本字段还完全支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) . + +### Submit comment, start a thread, or comment and close[](#submit-comment-start-a-thread-or-comment-and-close "Permalink") + +撰写评论后,您可以: + +* 单击**评论** ,您的评论将被发布. +* 选择从下拉列表中**启动线程** ,并启动一个新[的线程](../../discussions/index.html#threaded-discussions)这个问题的主线程中讨论具体的点. 这邀请其他参与者直接回复您的主题,并将相关评论分组在一起. + +[![Comment or thread](img/9cb5bb737c82aad68bc28e2a7357e05c.png)](img/comment-or-discussion.png) + +您也可以从此处关闭问题,因此无需滚动到问题页面的顶部. + +### Zoom meetings[](#zoom-meetings "Permalink") + +在 GitLab 12.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/31103) . + +您可以使用`/zoom`和`/remove_zoom` [快速动作](../quick_actions.html)将[GitLab](../../markdown.html#gitlab-flavored-markdown-gfm) `/remove_zoom` [Markdown](../../markdown.html#gitlab-flavored-markdown-gfm)作为附件添加和删除 Zoom 会议. + +附加问题的[Zoom](https://zoom.us)呼叫会导致问题顶部顶部标题下方的" **加入 Zoom"会议**按钮. + +详细了解如何[添加或删除缩放会议](associate_zoom_meeting.html) . + +### Publish an issue[](#publish-an-issue-ultimate "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30906) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.1. + +If a status page application is associated with the project, you can use the `/publish` [quick action](../quick_actions.html) to publish the issue. Refer to [GitLab Status Page](../status_page/index.html) for more information. \ No newline at end of file diff --git "a/docs/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" "b/docs/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..ff32771a7a9226c265b7f6217e5da5e84e237e6c --- /dev/null +++ "b/docs/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" @@ -0,0 +1,55 @@ +# 文件历史记录[](#文件历史记录 "Permalink") + +在 GitLab 0.8.0 中[引入](https://gitlab.com/gitlab-org/gitlab/blob/9ba1224867665844b117fa037e1465bb706b3685/app/controllers/commits_controller.rb) + +Git 文件历史记录提供有关与文件关联的提交历史记录的信息. + +您可以在项目中的每个文件中找到" **历史记录"**按钮. + +[![File history button](img/4b803fd891a7ec7f422522d2ff185864.png "History button")](img/file_history_button_v12_6.png) + +当选择" **历史记录"**按钮时,您将看到一个带有说明信息的屏幕: + +[![Git log output](img/0dad61d266449688c931d1703509bca3.png "History button output")](img/file_history_output_v12_6.png) + +如果将鼠标悬停在 UI 中的提交上,您将看到上次修改提交的确切日期和时间. + +## Associated `git` command[](#associated-git-command "Permalink") + +如果从命令行运行`git` ,则等效命令为`git log <filename>` . 例如,如果要在本地目录中找到有关`README.md`文件的`history`信息,请运行以下命令: + +``` +git log README.md +``` + +您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间: + +``` +commit 0e62ed6d9f39fa9bedf7efc6edd628b137fa781a +Author: Mike Jang <mjang@gitlab.com> +Date: Tue Nov 26 21:44:53 2019 +0000 + + Deemphasize GDK as a doc build tool + +commit 418879420b1e3a4662067bd07b64bb6988654697 +Author: Marcin Sedlak-Jakubowski <msedlakjakubowski@gitlab.com> +Date: Mon Nov 4 19:58:27 2019 +0100 + + Fix typo + +commit 21cc1fef11349417ed515557748369cfb235fc81 +Author: Jacques Erasmus <jerasmus@gitlab.com> +Date: Mon Oct 14 22:13:40 2019 +0000 + + Add support for modern JS + + Added rollup to the project + +commit 2f5e895aebfa5678e51db303b97de56c51e3cebe +Author: Achilleas Pipinellis <axil@gitlab.com> +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 diff --git "a/docs/\346\226\207\344\273\266\346\214\207\350\264\243.md" "b/docs/\346\226\207\344\273\266\346\214\207\350\264\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..31af0b09a22bacae0f74f675179d59395f432393 --- /dev/null +++ "b/docs/\346\226\207\344\273\266\346\214\207\350\264\243.md" @@ -0,0 +1,46 @@ +# 文件指责[](#文件指责 "Permalink") + +在 GitLab 2.5 中[引入](https://git.sphere.ly/staff/publicgitlab/commit/39c657930625ddc3ac8a921f01ffc83acadce68f) + +[Git blame](https://git-scm.com/docs/git-blame)提供有关文件中每一行的更多信息,包括最后修改时间,作者和提交哈希. + +您可以在项目中的每个文件中找到" **责备"**按钮. + +[![File blame button](img/1427a32ce32914c8100f7563817e3d64.png "Blame button")](img/file_blame_button_v12_6.png) + +选择" **责备"**按钮时,您会看到一个带有说明信息的屏幕: + +[![Git blame output](img/4a7c845c8d7b28d90af5923b08fb1e1d.png "Blame button output")](img/file_blame_output_v12_6.png) + +如果将鼠标悬停在 UI 中的提交上,您将看到该提交的确切日期和时间. + +## Blame previous commit[](#blame-previous-commit "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19299) . + +要查看特定行的早期修订,请**在此更改**之前单击" **查看责备",**直到找到您有兴趣查看的**更改**为止: + +[![Blame previous commit](img/dc12d72310a7e06d2981fd6774b0903d.png "Blame previous commit")](img/file_blame_previous_commit_v12_7.png) + +## Associated `git` command[](#associated-git-command "Permalink") + +如果从命令行运行`git` ,则等效命令为`git blame <filename>` . 例如,如果你想找到`blame`有关信息`README.md`在本地目录中的文件,运行以下命令: + +``` +git blame README.md +``` + +您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间: + +``` +62e2353a (Achilleas Pipinellis 2019-07-11 14:52:18 +0300 1) [![build status](https://gitlab.com/gitlab-org/gitlab-docs/badges/master/build.svg)](https://gitlab.com/gitlab-com/gitlab-docs/commits/master) +fb0fc7d6 (Achilleas Pipinellis 2016-11-07 22:21:22 +0100 2) +^764ca75 (Connor Shea 2016-10-05 23:40:24 -0600 3) # GitLab Documentation +^764ca75 (Connor Shea 2016-10-05 23:40:24 -0600 4) +0e62ed6d (Mike Jang 2019-11-26 21:44:53 +0000 5) This project hosts the repository used to generate the GitLab +0e62ed6d (Mike Jang 2019-11-26 21:44:53 +0000 6) documentation website and deployed to https://docs.gitlab.com. It uses the +``` + +## File blame through the API[](#file-blame-through-the-api "Permalink") + +您也可以通过[Git 文件指责 REST API](../../../api/repository_files.html#get-file-blame-from-repository)来获取此信息. \ No newline at end of file diff --git "a/docs/\346\226\207\344\273\266\346\237\245\346\211\276.md" "b/docs/\346\226\207\344\273\266\346\237\245\346\211\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..ee8bc159369f996a0ed3e1dd53fb57b256617212 --- /dev/null +++ "b/docs/\346\226\207\344\273\266\346\237\245\346\211\276.md" @@ -0,0 +1,29 @@ +# 文件查找[](#文件查找 "Permalink") + +在 GitLab 8.4 中[引入](https://github.com/gitlabhq/gitlabhq/pull/9889) . + +文件查找器功能使您可以使用 GitLab UI 在存储库中搜索文件. + +您可以在项目的" **文件"**部分中找到" **查找文件"**按钮. + +[![Find file button](img/264ee345c8d001f9b7cabf52e10f47bf.png)](img/file_finder_find_button_v12_10.png) + +对于那些喜欢用手指触摸键盘的人,还有一个[快捷按钮](../../shortcuts.html) ,您可以从项目中的*任何地方*调用它. + +在**问题** , **合并请求** , **里程碑**甚至项目设置中,按`t`键启动文件搜索功能. + +开始输入您要搜索的内容,然后观察魔术的发生. 使用向上/向下箭头,您可以向上和向下搜索结果,使用`Esc`可以关闭搜索并返回" **文件"** + +## How it works[](#how-it-works "Permalink") + +文件查找器功能由[模糊过滤器](https://github.com/jeancroy/fuzz-aldrin-plus)库提供支持. + +它通过突出显示来实现模糊搜索,并试图通过识别人们在搜索时使用的模式来提供直观的结果. + +例如,考虑[GitLab FOSS 存储库](https://gitlab.com/gitlab-org/gitlab-foss/tree/master) ,并且我们要打开`app/controllers/admin/deploy_keys_controller.rb`文件. + +使用模糊搜索,我们首先输入使我们更接近文件的字母. + +**提示:**要缩小搜索范围,请在搜索词中包含`/` . + +[![Find file button](img/ead8d62e426d9309f25a82da77770f59.png)](img/file_finder_find_file_v12_10.png) \ No newline at end of file diff --git "a/docs/\346\226\207\344\273\266\347\274\226\350\276\221.md" "b/docs/\346\226\207\344\273\266\347\274\226\350\276\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..3d536282755e29eb91019435759ab4ddafd25c42 --- /dev/null +++ "b/docs/\346\226\207\344\273\266\347\274\226\350\276\221.md" @@ -0,0 +1,113 @@ +# 文件编辑[](#文件编辑 "Permalink") + +有时,直接从 GitLab 界面进行快速更改要比克隆项目并使用 Gi​​t 命令行工具容易. 在此功能中,我们重点介绍如何从文件浏览器创建新文件,目录,分支或标记. 所有这些操作都可以通过一个下拉菜单获得. + +## Create a file[](#create-a-file "Permalink") + +在项目的文件页面中,单击分支选择器右侧的" +"按钮. 从下拉列表中选择**新文件** . + +[![New file dropdown menu](img/149fa515778bea7ce86903f0c8d9b31f.png)](img/web_editor_new_file_dropdown.png) + +在" **文件名"**框中输入文件名. 然后,在编辑器区域中添加文件内容. 添加描述性提交消息并选择一个分支. 分支字段将默认为您在文件浏览器中查看的分支. 如果输入新的分支名称,将出现一个复选框,允许您在提交更改后启动新的合并请求. + +当您对新文件感到满意时,请单击底部的" **提交更改** ". + +[![Create file editor](img/07e4663db45be7313a205a17ec342edb.png)](img/web_editor_new_file_editor.png) + +### Template dropdowns[](#template-dropdowns "Permalink") + +启动新项目时,新项目可能也需要一些通用文件. 因此,GitLab 将显示一条消息,以简化您的操作. + +[![First file for your project](img/1e0213e85ced3ac9dcc079f0e1831068.png)](img/web_editor_template_dropdown_first_file.png) + +当单击`LICENSE`或`.gitignore`等时,将显示一个下拉列表,为您提供适合您的项目的模板. + +[![MIT license selected](img/097706015c4d2abaaf34d0782cfac635.png)](img/web_editor_template_dropdown_mit_license.png) + +许可证, `.gitlab-ci.yml`日志,贡献指南或`.gitlab-ci.yml`文件也可以通过项目页面上的按钮添加. 在下面的示例中,许可证已经创建,这将创建指向许可证本身的链接. + +[![New file button](img/adc0d64a6c4c1979d43d8bf1d8d485e8.png)](img/web_editor_template_dropdown_buttons.png) + +> **Note:** The **设置 CI / CD** button will not appear on an empty repository. You have to at least add a file in order for the button to show up. + +## Upload a file[](#upload-a-file "Permalink") + +当内容为文本时,创建文件的能力非常出色. 但是,这不适用于二进制数据,例如图像,PDF 或其他文件类型. 在这种情况下,您需要上传文件. + +在项目的文件页面中,单击分支选择器右侧的" +"按钮. 从下拉菜单中选择上**载文件** . + +[![Upload file dropdown menu](img/671787cdf6cd1dde3e748fae72d46779.png)](img/web_editor_upload_file_dropdown.png) + +弹出上传对话框后,有两种方法可以上传文件. 可以在弹出窗口中拖放文件,也可以使用**点击上传**链接. 选择要上传的文件后,将显示文件预览. + +输入提交消息,选择一个分支,并在准备好后单击"上**载文件"** . + +[![Upload file dialog](img/2ed1719eefb651778ccd248f0bbe577c.png)](img/web_editor_upload_file_dialog.png) + +## Create a directory[](#create-a-directory "Permalink") + +为了使档案库中的文件井井有条,创建一个新目录通常会很有帮助. + +在项目的文件页面中,单击分支选择器右侧的加号按钮( `+` ). 从下拉菜单中选择" **新建目录** ". + +[![New directory dropdown](img/c65afb6da67de7dea9950e2b151cca40.png)](img/web_editor_new_directory_dropdown.png) + +在新目录对话框中,输入目录名称,提交消息并选择目标分支. 单击**创建目录**以完成. + +[![New directory dialog](img/0b804819bf30ce8e657ad538d376ecc5.png)](img/web_editor_new_directory_dialog.png) + +## Create a new branch[](#create-a-new-branch "Permalink") + +有多种方法可从 GitLab 的 Web 界面创建分支. + +### Create a new branch from an issue[](#create-a-new-branch-from-an-issue "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2808) . + +如果您的开发工作流程要求每个合并请求都存在问题,则可以直接从该问题快速创建分支,以加快流程. 新分支及其以后的合并请求将被标记为与此问题相关. 合并后,MR 将自动关闭问题. 您可以在问题说明下方看到" **创建合并请求"**下拉列表. + +**注意:**如果已经有一个具有相同名称的分支或一个引用的合并请求,或者您的项目具有活动的派生关系,则不会看到" **创建合并请求"**按钮. 如果您想显示此按钮,则可能的解决方法是[删除项目的 fork 关系](../settings/index.html#removing-a-fork-relationship) . 删除后,派生关系将无法恢复,您将不再能够将合并请求发送到源. + +[![Create Button](img/ab48b86f7a0dfe92d4358f705bf938a8.png)](img/web_editor_new_branch_from_issue_create_button_v12_6.png) + +该下拉列表包含选项**创建合并请求和分支**以及**创建分支** . + +[![New Branch Button](img/2f78c411d32ee05e95a1984ef90b2356.png)](img/web_editor_new_branch_from_issue_v_12_6.png) + +选择这些选项之一后,将基于项目的默认分支(默认为`master`创建新的分支或分支与合并请求. 分支名称将基于问题的标题,并作为前缀具有其内部 ID. 因此,上面的示例屏幕快照将创建一个名为`2-make-static-site-auto-deploy-and-serve`的分支. + +当您在一个空的存储库项目中单击**创建分支**按钮时,GitLab 会自动创建一个`master`分支, `README.md`提交一个空白的`README.md`文件,并根据问题标题创建并将您重定向到新分支. 如果您的[项目已经配置了](../integrations/overview.html) Kubernetes 等[部署服务](../integrations/overview.html) ,则 GitLab 会更进一步,并通过帮助您创建`.gitlab-ci.yml`文件来提示您设置[自动部署](../../../topics/autodevops/stages.html#auto-deploy) . + +创建分支后,您可以编辑存储库中的文件以解决此问题. 当基于新创建的分支创建合并请求时,描述字段将自动显示[问题关闭模式](../issues/managing_issues.html#closing-issues-automatically) `Closes #ID` ,其中`ID`为问题的 ID. 一旦合并请求被合并,这将解决问题. + +### Create a new branch from a project’s dashboard[](#create-a-new-branch-from-a-projects-dashboard "Permalink") + +如果要在创建新的合并请求之前对多个文件进行更改,则可以预先创建一个新的分支. 在项目的文件页面上,从下拉列表中选择" **新建分支** ". + +[![New branch dropdown](img/83a4859fc1c1d9fc2ea68819a53eaea8.png)](img/web_editor_new_branch_dropdown.png) + +输入新的**分支名称** . (可选)更改" **创建自"**字段以选择该新分支将来自哪个分支,标记或提交 SHA. 如果您开始键入现有的分支或标签,则此字段将自动完成. 单击**创建分支** ,您将返回到该新分支上的文件浏览器. + +[![New branch page](img/dc5fe88e82dc925a618598e1ac284f39.png)](img/web_editor_new_branch_page.png) + +现在,您可以根据需要更改任何文件. 当您准备好将更改合并回母版时,可以使用屏幕顶部的小部件. 在创建分支或修改文件后,此窗口小部件仅显示一段时间. + +[![New push widget](img/2279c6b38c41208a2726d04b0df15c37.png)](img/web_editor_new_push_widget.png) + +## Create a new tag[](#create-a-new-tag "Permalink") + +标签可用于标记主要的里程碑,例如生产版本,候选版本等等. 您可以从分支或提交 SHA 创建标签. 在项目的文件页面上,从下拉列表中选择" **新建标签** ". + +[![New tag dropdown](img/a8ac57717b491533848b3ebca40aae86.png)](img/web_editor_new_tag_dropdown.png) + +给标签起一个名字,例如`v1.0.0` . 选择您要从中创建此新标签的分支或 SHA. 您可以选择添加一条消息和发行说明. 发行说明部分支持 Markdown 格式,您也可以上传附件. 单击**创建标签** ,您将被带到标签列表页面. + +[![New tag page](img/36d97eaa1e64c3f6d5b78d205d1ce881.png)](img/web_editor_new_tag_page.png) + +## Tips[](#tips "Permalink") + +创建或上载新文件或创建新目录时,可以触发新的合并请求,而不是直接提交给 master. 在**目标分支**字段中输入新的分支名称. 您会注意到出现一个复选框,标**有"通过这些更改启动新的合并请求"** . 提交更改后,您将进入新的合并请求表单. + +[![Start a new merge request with these changes](img/f293e9e73b2cf8c4ef278104fbd068d5.png)](img/web_editor_start_new_merge_request.png) + +如果你*不*希望使用您的主电子邮件地址通过 Web 编辑器创建的提交,您可以选择使用其他的链接的电子邮件地址的从**用户设置>编辑个人资料**页面. \ No newline at end of file diff --git "a/docs/\346\226\260\345\273\272\351\241\271\347\233\256.md" "b/docs/\346\226\260\345\273\272\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b8bfc4e49b81782f75bf29a42d89f5c7f2582ea --- /dev/null +++ "b/docs/\346\226\260\345\273\272\351\241\271\347\233\256.md" @@ -0,0 +1,118 @@ +# 新建项目[](#create-a-project "Permalink") + +GitLab 中的大多数工作都在一个[Project 中](../user/project/index.html)完成. 文件和代码保存在项目中,并且大多数功能都在项目范围内使用. + +## Create a project in GitLab[](#create-a-project-in-gitlab "Permalink") + +要在 GitLab 中创建项目: + +1. 在信息中心中,点击绿色的**新建项目**按钮或使用导航栏中的加号图标. 这将打开" **新项目"**页面. +2. 在" **新建项目"**页面上,选择是否要: + * 创建一个[空白项目](#blank-projects) . + * 使用可用的[项目模板](#project-templates)之一创建一个项目. + * 如果已在您的 GitLab 实例上启用,则从其他存储库[导入项目](../user/project/import/index.html) . 如果不可用,请与您的 GitLab 管理员联系. + * 运行[用于外部存储库的 CI / CD 管道](../ci/ci_cd_for_external_repos/index.html) . + +**注意:**有关不能用作项目名称的单词列表,请参见[保留的项目和组名称](../user/reserved_names.html) . + +### Blank projects[](#blank-projects "Permalink") + +要在" **新建项目"**页面上创建一个新的空白项目,请执行以下操作: + +1. 在" **空白项目"**选项卡上,提供以下信息: + * **项目名称**在**项目名称**字段中. 您不能使用特殊字符,但可以使用空格,连字符,下划线甚至表情符号. 添加名称时, **Project slug**将自动填充. slug 是 GitLab 实例将用作项目的 URL 路径的东西. 如果您要使用其他子弹,请先输入项目名称,然后再更改子弹. + * **Project slug**字段中项目的路径. 这是 GitLab 实例将使用的项目的 URL 路径. 如果**项目名称**为空白,则当您填写**项目 slug**时,它将自动填充. + * 使用" **项目描述"(可选)**字段,您可以为项目的仪表板输入描述,这将帮助其他人了解您的项目的含义. 尽管不是必需的,但这是个好主意. + * 更改" **可见性级别"**会修改用户的项目[查看和访问权限](../public_access/public_access.html) . + * 选择**使用 README 初始化存储库**选项将创建一个 README 文件,以便 Git 存储库被初始化,具有默认分支并可以被克隆. +2. Click **建立专案**. + +### Project templates[](#project-templates "Permalink") + +项目模板可以使用必要的文件预填充新项目,以使您快速入门. + +有两种类型的项目模板: + +* [内置模板](#built-in-templates) ,来自以下组: + * [`project-templates`](https://gitlab.com/gitlab-org/project-templates) + * [`pages`](https://gitlab.com/pages) +* [自定义项目模板](#custom-project-templates-premium) ,用于由 GitLab 管理员和用户配置的自定义模板. + +#### Built-in templates[](#built-in-templates "Permalink") + +内置模板是项目模板,它们是: + +* 在[`project-templates`](https://gitlab.com/gitlab-org/project-templates)和[`pages`](https://gitlab.com/pages)组中开发和维护. +* 与 GitLab 一起发布. + +要在" **新建项目"**页面上使用内置模板,请执行以下操作: + +1. 在" **从模板创建"**选项卡上,选择" **内置"**选项卡. +2. 从可用的内置模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +##### Enterprise templates[](#enterprise-templates-ultimate "Permalink") + +GitLab 正在开发企业模板,以帮助您根据选定的法规标准简化审核管理. 这些模板会自动导入与每个法规要求相对应的问题. + +要使用企业模板创建新项目,请在" **新建项目"**页面上: + +1. 在" **从模板创建"**选项卡上,选择" **内置"**选项卡. +2. 从可用的内置企业模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +可用的企业模板包括: + +* HIPAA 审核协议模板(在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/13756) ) + +**提示:**您可以按照[以下步骤](https://gitlab.com/gitlab-org/project-templates/contributing)改进现有的内置模板或在[`project-templates`](https://gitlab.com/gitlab-org/project-templates)和[`pages`](https://gitlab.com/pages)组中添加新的[`project-templates`](https://gitlab.com/gitlab-org/project-templates) . + +#### Custom project templates[](#custom-project-templates-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6860) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.2. + +Creating new projects based on custom project templates is a convenient option for quickly starting projects. + +自定义项目可以在[实例级别](../user/admin_area/custom_project_templates.html)从**实例**选项卡,或在[组级别](../user/group/custom_project_templates.html)从**组**选项卡,在**从模板**标签上的**创建** . + +要在" **新建项目"**页面上使用自定义项目模板: + +1. 在" **从模板创建"**选项卡上,选择" **实例"**选项卡或" **组"**选项卡. +2. 从可用的自定义模板列表中,单击: + * **预览**按钮以查看模板源本身. + * **使用模板**按钮开始创建项目. +3. 通过填写项目的详细信息来完成创建项目. 该过程与创建[空白项目](#blank-projects)相同. + +## Push to create a new project[](#push-to-create-a-new-project "Permalink") + +在 GitLab 10.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/26388) . + +当您在本地创建新的存储库时,无需直接在 GitLab 上手动创建一个新项目然后[在](start-using-git.html#clone-a-repository)本地[克隆该](start-using-git.html#clone-a-repository)存储库,而无需将其直接发送到 GitLab 即可创建新项目. 如果您具有关联的名称空间的访问权,则 GitLab 将在该 GitLab 名称空间下自动创建一个新项目,其可见性默认设置为 Private(您以后可以在[项目的设置中](../public_access/public_access.html#how-to-change-project-visibility)对其进行更改). + +这可以通过使用 SSH 或 HTTPS 来完成: + +``` +## Git push using SSH +git push --set-upstream git@gitlab.example.com:namespace/nonexistent-project.git master + +## Git push using HTTPS +git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master +``` + +推送成功完成后,将显示一条远程消息,指示将遥控器和 URL 设置为新项目的命令: + +``` +remote: +remote: The private project namespace/nonexistent-project was created. +remote: +remote: To configure the remote, run: +remote: git remote add origin https://gitlab.example.com/namespace/nonexistent-project.git +remote: +remote: To view the project, visit: +remote: https://gitlab.example.com/namespace/nonexistent-project +remote: +``` \ No newline at end of file diff --git "a/docs/\346\227\266\351\227\264\350\267\237\350\270\252.md" "b/docs/\346\227\266\351\227\264\350\267\237\350\270\252.md" new file mode 100644 index 0000000000000000000000000000000000000000..e6b1bd14149f98dcd0987ae34ebbd17a5d971490 --- /dev/null +++ "b/docs/\346\227\266\351\227\264\350\267\237\350\270\252.md" @@ -0,0 +1,72 @@ +# 时间跟踪[](#时间跟踪 "Permalink") + +在 GitLab 8.14 中引入. + +时间跟踪允许您跟踪估计和花费在问题上的时间以及在 GitLab 中合并请求. + +## Overview[](#overview "Permalink") + +时间跟踪使您能够: + +* 记录处理问题或合并请求所花费的时间. +* 添加完成问题或合并请求所需时间的估计. + +您不必输入估算值即可输入花费的时间,反之亦然. + +有关时间跟踪的数据显示在问题/合并请求侧栏上,如下所示. + +[![Time tracking in the sidebar](img/05a0790512923394006a9c3face18d58.png)](img/time_tracking_sidebar_v8_16.png) + +## How to enter data[](#how-to-enter-data "Permalink") + +时间跟踪使用了 GitLab 通过此新功能引入的两个[快速操作](quick_actions.html) : `/spend`和`/estimate` . + +快速操作既可以用于问题或合并请求的正文中,也可以用于问题或合并请求的注释中. + +下面是一个示例,说明如何在评论中使用这些新的快速操作. + +[![Time tracking example in a comment](img/37cb6e38ded4ec606f9bc7776f765e70.png)](img/time_tracking_example_v12_2.png) + +添加时间条目(花费的时间或估计的时间)仅限于项目成员. + +### Estimates[](#estimates "Permalink") + +要输入估算值,请输入`/estimate` ,然后输入时间. 例如,如果您需要输入 3 天 5 小时 10 分钟的估算值,则可以输入`/estimate 3d 5h 10m` . 我们支持的时间单位列在此帮助页面的底部. + +每次输入新的时间估算值时,任何先前的时间估算值都将被该新值覆盖. 在发布或合并请求中应该只有一个有效的估计. + +要完全删除估算,请使用`/remove_estimate` . + +### Time spent[](#time-spent "Permalink") + +要输入花费的时间,请使用`/spend 3d 5h 10m` . + +每个新花费的时间条目将被添加到当前用于发布或合并请求的总时间中. + +您可以通过输入负数来减少时间: `/spend -3d`将从总花费时间中删除 3 天. 您所花费的时间不能少于 0 分钟,因此,如果您删除的时间量与已输入的时间相比更长,则 GitLab 将自动重置所花费的时间. + +要删除一次花费的所有时间,请使用`/remove_time_spent` . + +## Configuration[](#configuration "Permalink") + +以下时间单位可用: + +* 月(mo) +* 周(w) +* Days (d) +* 小时(h) +* 分钟(米) + +默认转换率是 1mo = 4w,1w = 5d 和 1d = 8h. + +### Limit displayed units to hours[](#limit-displayed-units-to-hours-core-only "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/29469/) . + +在 GitLab 自我管理实例中,可以通过**"** **本地化** **"**下**"管理">"设置">"首**选项"中的选项将时间单位的显示限制为小时. + +启用此选项后,将显示`75h`而不是`1w 4d 3h` . + +## Other interesting links[](#other-interesting-links "Permalink") + +* [Time Tracking landing page in the GitLab handbook](https://about.gitlab.com/solutions/time-tracking/) \ No newline at end of file diff --git "a/docs/\346\234\215\345\212\241\345\217\260.md" "b/docs/\346\234\215\345\212\241\345\217\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..5e72493821ac19cb5f524b1a72d95d57be5742b2 --- /dev/null +++ "b/docs/\346\234\215\345\212\241\345\217\260.md" @@ -0,0 +1,189 @@ +# 服务台[](#服务台 "Permalink") + +Version history + +* [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/149) in [GitLab Premium](https://about.gitlab.com/pricing/) 9.1. +* 在 13.0 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/214839) [GitLab Starter](https://about.gitlab.com/pricing/) . +* 在 13.2 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/215364) [GitLab Core](https://about.gitlab.com/pricing/) . + +## Overview[](#overview "Permalink") + +Service Desk 是一个模块,可让您的团队直接在 GitLab 内部通过电子邮件与任何外部方联系. 无需外部工具. 在构建软件的过程中进行的持续对话可确保用户反馈直接在需要的地方结束,从而帮助您构建正确的功能来解决用户的实际问题. + +借助 Service Desk,您可以为客户提供有效的电子邮件支持,他们现在可以通过电子邮件向您发送错误报告,功能请求或常规反馈,这些问题将作为新问题最终出现在您的 GitLab 项目中. 反过来,您的团队可以直接从项目中做出回应. + +由于 Service Desk 直接内置在 GitLab 中,因此消除了多种工具和外部集成的复杂性和低效率,从而大大缩短了从反馈到软件更新的周期时间. + +有关概述,请查看[GitLab 服务](https://about.gitlab.com/blog/2017/05/09/demo-service-desk/)台上的视频演示. + +## Use cases[](#use-cases "Permalink") + +例如,假设您为 iOS 或 Android 开发游戏. 该代码库托管在您的 GitLab 实例中,并通过 GitLab CI / CD 构建和部署. + +这是 Service Desk 为您工作的方式: + +1. 您向付费客户提供特定于项目的电子邮件地址,他们可以直接从应用程序内向您发送电子邮件. +2. 他们发送的每封电子邮件都会在相应的项目中产生一个问题. +3. 您的团队成员导航到 Service Desk 问题跟踪器,在这里他们可以查看新的支持请求并在内部相关问题中做出响应. +4. 您的团队与客户进行来回沟通以了解请求. +5. 您的团队开始着手实施代码以解决客户的问题. +6. 当您的团队完成实施后,合并请求将合并,问题将自动关闭. +7. 该客户将通过电子邮件成功出席,而无需真正访问您的 GitLab 实例. +8. 您的团队无需离开 GitLab(或设置任何集成)即可跟进客户,从而节省了时间. + +## How it works[](#how-it-works "Permalink") + +GitLab 服务台是一种简单的方法,使人们无需自己的用户帐户即可在您的 GitLab 实例中创建问题. + +它为最终用户提供了一个在项目中创建问题的唯一电子邮件地址,并且可以通过 GitLab 界面或通过电子邮件发送答复. 最终用户将仅通过电子邮件看到该主题. + +## Configuring Service Desk[](#configuring-service-desk "Permalink") + +**注意:**在 GitLab.com 上启用了 Service Desk. 您可以跳过下面的步骤 1; 您只需要为每个项目启用它. + +如果您具有项目维护者访问权限,则可以选择设置服务台. 请按照以下步骤操作: + +1. 为 GitLab 实例[设置传入电子邮件](../../administration/incoming_email.html#set-it-up) . + + * 我们建议使用[电子邮件子地址](../../administration/incoming_email.html#email-sub-addressing) ,但在 GitLab 11.7 及更高版本中,您也可以使用[全部接收邮箱](../../administration/incoming_email.html#catch-all-mailbox) . +2. 导航到项目的**"设置">"常规",**然后找到" **服务台"**部分. +3. 启用**激活服务台**切换. 这显示了一个唯一的电子邮件地址,可将问题发送给项目. 这些问题将是[机密的](issues/confidential_issues.html) ,因此它们仅对项目成员可见. 请注意,在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 仍然支持较旧的格式,但是允许现有的别名或联系人继续工作. + + **危险:**任何人都可以使用此电子邮件地址在此项目上创建问题,无论他们是否有权访问您的 GitLab 实例. 我们建议**将其放在别名后面,**以便可以根据需要进行更改,并在您的 GitLab 实例上**[启用 Akismet](../../integration/akismet.html)**来向该服务添加垃圾邮件检查. 畅通无阻的电子邮件垃圾邮件将导致创建许多垃圾邮件问题. + + 如果存储库中有[模板](description_templates.html) ,则可以选择从选择器菜单中选择一个[模板](description_templates.html) ,以将其附加到所有 Service Desk 问题上. + + [![Service Desk enabled](img/d32d8400522e9b5c9dd295fba00e1255.png)](img/service_desk_enabled.png) + +现在已为此项目启用 Service Desk! 您应该能够从项目导航的" **问题"**菜单中访问它. + +[![Service Desk Navigation Item](img/c42e6852cdd2c45b0a814f7a659ee5d2.png)](img/service_desk_nav_item.png) + +### Using customized email templates[](#using-customized-email-templates "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2460) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.7. + +当用户使用 Service Desk 提交新问题时,或在 Service Desk 问题上创建新便笺时,将向作者发送电子邮件. + +这些电子邮件的正文可以使用模板进行自定义. 要创建新的自定义模板,请在存储库的`.gitlab/service_desk_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +#### Thank you email[](#thank-you-email "Permalink") + +**谢谢电子邮件**是用户提交问题后发送给用户的电子邮件. 模板的文件名必须为`thank_you.md` . 您可以使用`%{ISSUE_ID}`占位符,它将由电子邮件中的问题 IID 替换;而`%{ISSUE_PATH}`占位符,将由项目路径和问题 IID 替换. 由于服务台问题被创建为机密(只有项目成员才能看到),因此回复电子邮件中没有提供问题链接. + +#### New note email[](#new-note-email "Permalink") + +**新笔记电子邮件**是当用户提交的问题有新评论时发送给用户的电子邮件. 模板的文件名必须为`new_note.md` . 您可以使用`%{ISSUE_ID}`占位符(将在电子邮件中替换为问题 IID), `%{ISSUE_PATH}`占位符(将替换为项目路径)以及问题 IID 和`%{NOTE_TEXT}`占位符(将替换为注释文本) . + +### Using custom email display name[](#using-custom-email-display-name "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/7529) . + +您可以自定义电子邮件显示名称. 从服务台发送的电子邮件在" `From`标题中将具有此名称. 默认显示名称是`GitLab Support Bot` . + +### Using custom email address[](#using-custom-email-address "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2201) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.0. + +**注意:**默认情况下禁用此功能. 有关启用它的步骤,请参阅[启用自定义电子邮件地址](#enable-custom-email-address) . + +如果在配置中启用了`service_desk_email`功能标记,则可以通过将电子邮件发送到自定义 Service Desk 电子邮件地址来创建 Service Desk 问题,该电子邮件地址应采用以下格式: `project_contact+%{key}@example.com` . + +`%{key}`部分用于查找应在其中创建问题的项目. `%{key}`部分组合了项目的路径和可配置的项目名称后缀: `<project_full_path>-<project_name_suffix>` . + +您可以在项目的服务台设置中设置项目名称后缀. 它只能包含小写字母( `az` ),数字( `0-9` )或下划线( `_` ). + +[![Setting custom Service Desk email address](img/210e34a4dbdbe21aba5083c6f7dac9cb.png)](img/service_desk_custom_email_address_v13_0.png) + +您可以将以下代码片段添加到您的配置中. + +从源安装的示例: + +``` +service_desk_email: + enabled: true + address: "project_contact+%{key}@example.com" + user: "project_support@example.com" + password: "[REDACTED]" + host: "imap.gmail.com" + port: 993 + ssl: true + start_tls: false + log_path: "log/mailroom.log" + mailbox: "inbox" + idle_timeout: 60 + expunge_deleted: true +``` + +Omnibus GitLab 安装示例: + +``` +gitlab_rails['service_desk_email_enabled'] = true + +gitlab_rails['service_desk_email_address'] = "project_contact+%{key}@gmail.com" + +gitlab_rails['service_desk_email_email'] = "project_support@gmail.com" + +gitlab_rails['service_desk_email_password'] = "[REDACTED]" + +gitlab_rails['service_desk_email_mailbox_name'] = "inbox" + +gitlab_rails['service_desk_email_idle_timeout'] = 60 + +gitlab_rails['service_desk_email_log_file'] = "/var/log/gitlab/mailroom/mail_room_json.log" + +gitlab_rails['service_desk_email_host'] = "imap.gmail.com" + +gitlab_rails['service_desk_email_port'] = 993 + +gitlab_rails['service_desk_email_ssl'] = true + +gitlab_rails['service_desk_email_start_tls'] = false +``` + +在这种情况下,假设`mygroup/myproject`项目 Service Desk 设置的项目名称后缀设置为`support` ,并且用户将电子邮件发送到`project_contact+mygroup-myproject-support@example.com` . 结果,将在`mygroup/myproject`项目中从此电子邮件中创建一个新的 Service Desk 问题. + +#### Enable custom email address[](#enable-custom-email-address "Permalink") + +默认情况下,此功能附带`service_desk_custom_address`功能标志. 要打开此功能,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.enable(:service_desk_custom_address) +``` + +配置选项与配置[传入电子邮件](../../administration/incoming_email.html#set-it-up)相同. + +## Using Service Desk[](#using-service-desk "Permalink") + +### As an end user (issue creator)[](#as-an-end-user-issue-creator "Permalink") + +要创建服务台问题,最终用户无需了解有关 GitLab 实例的任何信息. 他们只是将电子邮件发送到给定的地址,然后收到一封确认回执的电子邮件: + +[![Service Desk enabled](img/3b8b0bcac599d7207d90ed8194bed83e.png)](img/service_desk_confirmation_email.png) + +这也使最终用户可以选择退订. + +如果他们不选择退订,那么添加到该问题的任何新评论都将作为电子邮件发送: + +[![Service Desk reply email](img/85055487485aff8bd5dc0cf97f711d52.png)](img/service_desk_reply.png) + +他们发送的所有回复都将显示在问题本身中. + +### As a responder to the issue[](#as-a-responder-to-the-issue "Permalink") + +For responders to the issue, everything works as usual. They will see a familiar looking issue tracker, where they can see issues created via customer support requests and filter and interact with them just like other GitLab issues. + +[![Service Desk Issue tracker](img/daa9468beb587bb748cbb9ec37bbb43f.png)](img/service_desk_issue_tracker.png) + +来自最终用户的消息将显示为来自特殊的支持机器人用户,但是除此之外,您可以像平常一样阅读和编写评论: + +[![Service Desk issue thread](img/1b69e9fcb692fa835e9b7e06fa856aee.png)](img/service_desk_thread.png) + +注意: + +* 项目的可见性(私有,内部,公共)不会影响 Service Desk. +* 项目的路径,包括其组或名称空间,将显示在电子邮件中. + +### Support Bot user[](#support-bot-user "Permalink") + +在后台,服务台由支持机器人的特殊用户创建问题. 该用户不计入许可证限制数. \ No newline at end of file diff --git "a/docs/\346\234\272\345\257\206Issue.md" "b/docs/\346\234\272\345\257\206Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..f07a77678e6e1f2334bbb7f1751b3fb39a8a856b --- /dev/null +++ "b/docs/\346\234\272\345\257\206Issue.md" @@ -0,0 +1,85 @@ +# 机密 Issue[](#机密issue "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3282) . + +机密性问题是仅对具有[足够权限](#permissions-and-access-to-confidential-issues)的项目成员可见的问题. 开源项目和公司都可以使用机密问题来使安全漏洞不公开或防止意外泄漏. + +## Making an issue confidential[](#making-an-issue-confidential "Permalink") + +您可以在创建问题或编辑现有问题的过程中将其保密. + +创建新问题时,可以在文本区域下方的复选框中将问题标记为机密. 选中该框,然后点击" **提交问题"**按钮以创建问题. 对于现有问题,请对其进行编辑,选中机密复选框,然后点击**保存更改** . + +[![Creating a new confidential issue](img/43a1d5a081bb166e1d43d6e671f250e1.png)](img/confidential_issues_create.png) + +## Modifying issue confidentiality[](#modifying-issue-confidentiality "Permalink") + +有两种方法可以更改问题的机密性. + +第一种方法是编辑问题并标记/取消标记机密复选框. 保存问题后,它将更改问题的机密性. + +第二种方法是在边栏中找到"保密性"部分,然后单击" **编辑"** . 应该会出现一个弹出窗口,并为您提供打开或关闭机密性的选项. + +| 关闭机密性 | Turn on confidentiality | +| --- | --- | +| [![Turn off confidentiality](img/429e9751a8b0336bb8b7e3faab15a373.png)](img/turn_off_confidentiality.png) | [![Turn on confidentiality](img/3252759837ced64a222db48c62becdd3.png)](img/turn_on_confidentiality.png) | + +系统注释在问题注释中指出了从常规到机密(反之亦然)的每项更改. + +[![Confidential issues system notes](img/b66dc4137ac73e81c66e408cf9fcf391.png)](img/confidential_issues_system_notes.png) + +## Indications of a confidential issue[](#indications-of-a-confidential-issue "Permalink") + +> **注意:**如果您没有[足够的权限](#permissions-and-access-to-confidential-issues) ,您将根本看不到机密问题. + +有几件事在视觉上将机密问题与常规问题分开. 在问题索引页面视图中,您可以在标记为机密的问题旁边看到斜线图标. + +[![Confidential issues index page](img/8cebf5d928a8666adcfc25eccfeec89e.png)](img/confidential_issues_index_page.png) + +* * * + +同样,在问题内部,您可以在问题编号旁边看到斜线图标,但在注释区域中也有一个指示符,表明您正在评论的问题是机密的. + +[![Confidential issue page](img/ea665ae1d507d66f5a44d05ff9e32613.png)](img/confidential_issues_issue_page.png) + +侧边栏上还有一个指示保密性的指示器. + +| 机密问题 | 非机密问题 | +| --- | --- | +| [![Sidebar confidential issue](img/813e077e7aa22bb747b5f237984f1b22.png)](img/sidebar_confidential_issue.png) | [![Sidebar not confidential issue](img/6a33d33154553990ed15338a6f9c7b35.png)](img/sidebar_not_confidential_issue.png) | + +## Permissions and access to confidential issues[](#permissions-and-access-to-confidential-issues "Permalink") + +对于机密问题,有两种级别的访问权限. 一般规则是,机密问题仅对具有[Reporter 访问权限](../../permissions.html#project-members-permissions)的项目成员可见. 但是,来宾用户也可以创建机密问题,但只能查看他们自己创建的问题. + +对于非特权用户,机密问题也隐藏在搜索结果中. 例如,这是具有"维护者"和"访客"访问权限的用户分别在项目的搜索结果中看到的内容. + +| 维护者访问 | 来宾访问 | +| --- | --- | +| [![Confidential issues search master](img/30460bec4b16c49e4f5d5ccc7ac92601.png)](img/confidential_issues_search_master.png) | [![Confidential issues search guest](img/2bb7640bbe66bec0d43070f6f4053758.png)](img/confidential_issues_search_guest.png) | + +## Merge Requests for Confidential Issues[](#merge-requests-for-confidential-issues "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/58583) . + +为了帮助防止机密信息在解决机密问题的过程中从公共项目中泄露,可以通过创建私有派生的合并请求来解决机密问题. + +创建的合并请求将针对私有派生的默认分支,而不是公共上游项目的默认分支. 这样可以防止合并请求,分支和提交进入公共存储库,以及过早地泄露机密信息. 当准备好将机密提交公开时,可以通过打开从私有派生到公共上游项目的合并请求来完成. + +**最佳实践:**如果您在原始上游的同一组或子组中创建了一个长期的私有派生,则具有开发者成员身份的公共项目的所有用户在私有项目中也将具有相同的权限. 这样,所有有权查看机密问题的开发人员都将拥有简化的工作流程来解决这些问题. + +### How it works[](#how-it-works "Permalink") + +关于机密问题," **创建机密合并请求"**按钮可用. 单击它会打开一个下拉列表,您可以在其中选择**创建机密合并请求和分支**或**创建分支** : + +| 创建机密合并请求 | 创建分支 | +| --- | --- | +| [![Create Confidential Merge Request Dropdown](img/17d0ef7b105be8069a4258a758bd25bb.png)](img/confidential_mr_dropdown_v12_1.png) | [![Create Confidential Branch Dropdown](img/4f9a7d54cb4f539c606eaef8fd65b8ed.png)](img/confidential_mr_branch_dropdown_v12_1.png) | + +**项目**下拉列表包括用户所属的私有派生列表,至少是开发人员,并且合并请求已启用. + +每当" **分支名称"**和" **源(分支或标记)"**字段更改时,将检查目标或源分支的可用性. 两个分支都应在所选的私有派生中可用. + +通过单击**创建机密合并请求**按钮,GitLab 将在私有分支中创建分支和合并请求. 当选择**Create branch 时** ,GitLab 将仅创建分支. + +在私有分支中创建分支后,开发人员现在可以将代码推送到该分支以解决机密问题. \ No newline at end of file diff --git "a/docs/\346\240\207\347\255\276.md" "b/docs/\346\240\207\347\255\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..69ec11790ebe74939ffa97aac2b24953b291e679 --- /dev/null +++ "b/docs/\346\240\207\347\255\276.md" @@ -0,0 +1,188 @@ +# 标签[](#标签 "Permalink") + +## Overview[](#overview "Permalink") + +随着您在 GitLab 中问题,合并请求和史诗数量的增长,跟踪这些项目变得越来越困难. 尤其是随着您的组织从只有几个人发展到成百上千. 标签就是在这里出现的.它们可以帮助您组织和标记工作,以便您可以跟踪和找到您感兴趣的工作项. + +标签是[发行板](issue_board.html)的关键部分. 使用标签,您可以: + +* 使用颜色和描述性标题(例如`bug` , `feature request`或`docs`对史诗,问题和合并请求进行分类. +* 动态过滤和管理史诗,问题和合并请求. +* [搜索问题列表,合并请求和史诗](../search/index.html#issues-and-merge-requests)以及[问题面板](../search/index.html#issue-boards) . + +## Project labels and group labels[](#project-labels-and-group-labels "Permalink") + +GitLab 中有两种类型的标签: + +* **项目标签**只能分配给该项目,并且只能合并该项目中的请求. +* 可以将**组标签**分配给选定组或其子组中的任何项目中的问题并合并请求. + * 也可以将它们分配给所选组或其子组中的史诗. + +## Assign and unassign labels[](#assign-and-unassign-labels "Permalink") + +每个问题,合并请求和史诗都可以分配任意数量的标签. 标签在右侧栏中管理,您可以在其中根据需要分配或取消分配标签. + +要将标签分配给问题,请合并请求或史诗: + +1. 在侧边栏的标签部分,点击**编辑** ,然后: + * 在列表中,单击所需的标签. 每个标签都带有复选标记. + * 通过输入搜索查询并单击搜索来查找标签( ),然后点击它们. 您可以反复搜索并添加更多标签. +2. 单击**X**或标签部分之外的任何位置,然后将应用标签. + +您也可以使用[`/assign @username`快速操作](quick_actions.html)来分配标签. + +## Label management[](#label-management "Permalink") + +具有 Reporter 或更高[权限级别](../permissions.html)的用户可以创建和编辑标签. + +### Project labels[](#project-labels "Permalink") + +通过转到项目并单击**问题>标签**来查看项目标签列表. 该列表包括在项目级别定义的所有标签,以及从直接父组继承的所有标签. 您可以通过在顶部输入搜索查询并点击搜索( ). + +要创建一个新的项目标签: + +1. 导航到项目中的" **问题">"标签** ". +2. 单击**新建标签**按钮. + * 输入标题. + * (可选)输入描述. + * (可选)通过单击可用颜色来选择背景颜色,或输入特定颜色的十六进制颜色值. +3. 单击**创建标签**以创建标签. + +您也可以从发布或合并请求中创建新的项目标签. 在问题或合并请求的右侧栏中的标签部分: + +1. Click **Edit**. +2. Click **创建项目标签**. + * 填写名称字段. 请注意,如果以此方式创建标签,则无法指定描述. 您可以稍后通过编辑标签来添加描述(请参见下文). + * (可选)通过单击可用颜色来选择颜色,或输入特定颜色的十六进制颜色值. +3. Click **Create**. + +创建标签后,您可以通过点击铅笔( ),或通过单击三个点( )旁边的" **订阅"**按钮,然后选择" **删除"** . + +#### Promote a project label to a group label[](#promote-a-project-label-to-a-group-label "Permalink") + +如果您以前创建了项目标签,现在想使其可用于同一组中的其他项目,则可以将其升级为组标签. + +如果同一组中的其他项目具有相同标题的标签,则它们将全部与新的组标签合并. 如果存在具有相同标题的组标签,则它也会被合并. + +所有发行,合并请求,发行板列表,发行板过滤器以及带有旧标签的标签订阅都将分配给新的组标签. + +警告: **警告:**提升标签是永久性的操作,不能撤消. + +要将项目标签提升为组标签: + +1. 导航到项目中的" **问题">"标签** ". +2. 单击三个点( )旁边的**订阅**按钮,然后选择**升级为组标签** . + +### Group labels[](#group-labels "Permalink") + +通过转到组并单击**问题>标签**来查看组标签列表. 该列表包括仅在组级别定义的所有标签. 它没有列出项目中定义的任何标签. 您可以通过在顶部输入搜索查询并点击搜索( ). + +要创建**组标签** ,请导航到**组中的"** **问题">"标签"** ,并按照与[创建项目标签](#project-labels)相同的过程进行操作. + +#### Create group labels from epics[](#create-group-labels-from-epics-ultimate "Permalink") + +您可以从 Epic 侧边栏创建组标签. 您创建的标签将属于该史诗所属的直接组. 该过程与根据[发布或合并请求](#project-labels)创建[项目标签](#project-labels)的过程相同. + +### Generate default labels[](#generate-default-labels "Permalink") + +如果项目或组没有标签,则可以从标签列表页面生成一组默认的项目或组标签. 如果列表为空,该页面将显示一个" **生成默认标签集"**按钮,单击该按钮会将以下默认标签添加到项目中: + +* `bug` +* `confirmed` +* `critical` +* `discussion` +* `documentation` +* `enhancement` +* `suggestion` +* `support` + +## Scoped labels[](#scoped-labels-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9175) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10. + +范围标签允许团队使用标签功能来注释问题,合并请求和具有互斥标签的史诗. 通过防止某些标签一起使用,可以启用更复杂的工作流程. + +当标签标题中使用特殊的双冒号( `::` :)语法时,该标签将成为作用域,例如: + +[![Sample scoped labels](img/eeadc0bb054ceec8f09d2c44982f4103.png)](img/labels_key_value_v12_1.png) + +issue,merge request 或 epic 不能具有形式为`key::value`且具有相同`key`两个范围标签. 使用相同的`key`添加一个新标签,但是使用不同的`value`将导致以前的`key`标签被新标签替换. + +用例示例: + +1. 一个问题被标识为低优先级,并向其添加了`priority::low`项目标签. +2. 经过更多审查后,问题优先级增加了,并添加了`priority::high`标签. +3. manbetx 客户端打不开会自动删除`priority::low`标签,因为一个问题不应同时具有两个优先级标签. + +### Workflows with scoped labels[](#workflows-with-scoped-labels "Permalink") + +假设您要在问题中创建一个自定义字段,以跟踪功能所针对的操作系统平台,而每个问题只应针对一个平台. 然后,您将创建三个标签`platform::iOS` , `platform::Android` , `platform::Linux` . 在给定的问题上应用这些标签中的任何一个都会自动删除以`platform::`开头的任何其他现有标签. + +可以将相同的模式应用于代表团队的工作流状态. 假设您具有标签以下标签`workflow::development` , `workflow::review`和`workflow::deployed` . 如果一个问题已经应用了标签`workflow::development` ,并且开发人员想要将该问题推进到`workflow::review` ,他们将简单地应用该标签,然后`workflow::development`标签将被自动删除. 当您在整个标签列表中移动的问题这种行为已经存在[问题板](issue_board.html#create-workflows) ,但现在,谁可能无法在一个问题板上工作的团队成员直接将仍然能够推进工作流程中的问题始终国家本身. + +在有关[将范围标签用于自定义字段和工作流](https://www.youtube.com/watch?v=4BCBby6du3c)的视频中演示了此功能. + +### Scoped labels with nested scopes[](#scoped-labels-with-nested-scopes "Permalink") + +创建标签时,可以使用多个双冒号`::`来创建具有嵌套作用域的标签. 在这种情况下,最后一个`::`之前的所有内容都将成为作用域. + +例如, `workflow::backend::review`和`workflow::backend::development`是有效的作用域标签,但是它们**不能同时**存在于同一问题上,因为它们都共享相同的作用域, `workflow::backend` . + +此外, `workflow::backend::review`和`workflow::frontend::review`是有效的范围标签,并且它们**可以同时**存在于同一问题上,因为它们都具有不同的范围, `workflow::frontend`和`workflow::backend` . + +## Subscribing to labels[](#subscribing-to-labels "Permalink") + +在项目标签列表页面和组标签列表页面中,您可以单击任何标签右侧的**订阅**以启用该标签的[通知](../profile/notifications.html) . 只要将标签分配给史诗,发行或合并请求,您就会收到通知. + +如果要从项目内订阅组标签,则可以选择仅订阅项目或整个组的标签通知. + +[![Labels subscriptions](img/074834195e0c24213cffeef5ef08a9e1.png)](img/labels_subscriptions_v12_1.png) + +## Label priority[](#label-priority "Permalink") + +版本历史 + +* 在 GitLab 8.9 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/14189) . +* 优先级排序仅基于最高优先级标签. [讨论中](https://gitlab.com/gitlab-org/gitlab/-/issues/14523)考虑改变这一点. + +标签可以具有相对优先级,在史诗,发布和合并请求列表页面的" **标签优先级"**和" **优先级"**排序顺序中使用. 组标签和项目标签的优先级都在项目级别进行,不能从组标签列表中进行. + +在项目标签列表页面上,在标签上加上星号以表明它具有优先级. + +[![Labels prioritized](img/2fe480e26b1b89b82607729986e5b13a.png)](img/labels_prioritized_v12_1.png) + +在列表中上下拖动已加星标的标签以更改其优先级,列表中的较高表示优先级较高. + +[![Drag to change label priority](img/9e837ca8522bced4f7b219416c893fe4.png)](img/labels_drag_priority_v12_1.gif) + +在史诗般的,合并请求和问题列表页面上(针对组和项目),您可以按`Label priority`或`Priority`进行排序. + +如果您按`Label priority`排序,则 GitLab 将使用以下排序比较顺序: + +1. 具有较高优先级标签的项目. +2. 没有优先标签的项目. + +领带被任意打破. 请注意,只会检查优先级最高的标签,而忽略优先级较低的标签. 有关更多信息,请参见此[相关问题](https://gitlab.com/gitlab-org/gitlab/-/issues/14523) . + +[![Labels sort label priority](img/3636c78ef6cb3ccc1462dd451c7f3efc.png)](img/labels_sort_label_priority.png) + +如果您按`Priority`排序,则 GitLab 将使用以下排序比较顺序: + +1. 具有里程碑的截止日期的项目,最早分配的[里程碑](milestones/index.html)在此列出. +2. 具有里程碑的项目,没有截止日期. +3. 具有较高优先级标签的项目. +4. 没有优先标签的项目. + +领带被任意打破. + +[![Labels sort priority](img/640bc8c28d8cd3035fbe0c4c1018d2d1.png)](img/labels_sort_priority.png) + +## Troubleshooting[](#troubleshooting "Permalink") + +### Some label titles end with `_duplicate<number>`[](#some-label-titles-end-with-_duplicatenumber "Permalink") + +在特定情况下,可以在同一名称空间中创建具有重复标题的标签. + +为了解决重复问题, [在 GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21384)和更高版本中,某些重复标签的标题后面`_duplicate<number>` . + +如果愿意,可以安全地更改这些标签的标题. 有关原始问题的详细信息,请参见[问题 30390](https://gitlab.com/gitlab-org/gitlab/issues/30390) . \ No newline at end of file diff --git "a/docs/\346\246\202\350\247\210.md" "b/docs/\346\246\202\350\247\210.md" new file mode 100644 index 0000000000000000000000000000000000000000..fb989660d65cd51fa5728b3e350b15b804ec69b3 --- /dev/null +++ "b/docs/\346\246\202\350\247\210.md" @@ -0,0 +1,163 @@ +# 帮助文档 + +*访问[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 diff --git "a/docs/\347\224\250\346\210\267.md" "b/docs/\347\224\250\346\210\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..c40bb03fa1b56081e375527df3b52906b39e9cd9 --- /dev/null +++ "b/docs/\347\224\250\346\210\267.md" @@ -0,0 +1,143 @@ +# 用户文档[](#用户文档 "Permalink") + +欢迎来到 GitLab! 我们很高兴您在这里! + +作为 GitLab 用户,您将有权访问您的[订阅](https://about.gitlab.com/pricing/)包括的所有功能,但[GitLab 管理员](../administration/index.html)设置除外,除非您具有安装,配置和升级 GitLab 实例的管理员权限. + +[GitLab.com 的](https://gitlab.com/)管理员特权仅限于 GitLab 团队. + +有关配置 GitLab 自管理实例的更多信息,请参阅[管理员文档](../administration/index.html) . + +## Overview[](#overview "Permalink") + +GitLab 是一个完全集成的软件开发平台,使您的团队能够在同一平台上保持透明,快速,有效和凝聚力,从讨论新想法到正式生产. + +有关更多信息,请参见[所有 GitLab 功能](https://about.gitlab.com/features/) . + +### Concepts[](#concepts "Permalink") + +要熟悉在 GitLab 上开发代码所需的概念,请阅读以下文章: + +* [Demo: Mastering Code Review With GitLab](https://about.gitlab.com/blog/2017/03/17/demo-mastering-code-review-with-gitlab/). +* [GitLab Workflow: An Overview](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/#gitlab-workflow-use-case-scenario). +* [教程:在 GitLab 中都已连接](https://about.gitlab.com/blog/2016/03/08/gitlab-tutorial-its-all-connected/) :与 GitLab 进行代码协作的概述. +* [Trends in Version Control Land: Microservices](https://about.gitlab.com/blog/2016/08/16/trends-in-version-control-land-microservices/). +* [Trends in Version Control Land: Innersourcing](https://about.gitlab.com/blog/2016/07/07/trends-version-control-innersourcing/). + +## Use cases[](#use-cases "Permalink") + +GitLab 是一个基于 Git 的平台,它集成了许多用于软件开发和部署以及项目管理的基本工具: + +* 通过版本控制在存储库中托管代码. +* 使用功能齐全的[问题跟踪器](project/issues/index.html#issues-list)跟踪有关新实现,错误报告和反馈的建议. +* 组织和[发行委员会的](project/issues/index.html#issue-boards)优先次序. +* 使用[Review Apps](../ci/review_apps/index.html)查看[合并请求中](project/merge_requests/index.html)每个分支的实时预览更改中的代码. +* 使用内置的[持续集成进行](../ci/README.html)构建,测试和部署. +* 使用[GitLab Pages](project/pages/index.html)部署个人和专业静态网站. +* 通过使用[GitLab 容器注册表](packages/container_registry/index.html)与 Docker 集成. +* 通过使用[GitLab 价值流分析](project/cycle_analytics.html)跟踪开发生命周期. +* 提供[服务台](project/service_desk.html)支持. + +使用 GitLab 企业版,您还可以: + +* 通过以下方式改善协作: + * [合并请求批准](project/merge_requests/merge_request_approvals.html) . + * [问题的多个受让人](project/issues/multiple_assignees_for_issues.html) . + * [多个发行委员会](project/issue_board.html#multiple-issue-boards) . +* 在[相关问题](project/issues/related_issues.html)之间创建正式关系. +* 使用[Burndown Charts](project/milestones/burndown_charts.html)可以在冲刺期间或在使用其新版本软件时跟踪进度. +* 利用[Elasticsearch](../integration/elasticsearch.html)和[Advanced Global Search](search/advanced_global_search.html)和[Advanced Syntax Search](search/advanced_search_syntax.html)在整个 GitLab 实例上进行更快,更高级的代码搜索. +* [Authenticate users with Kerberos](../integration/kerberos.html). +* 从本地服务器上的其他地方[镜像存储库](project/repository/repository_mirroring.html) . +* [Export issues as CSV](project/issues/csv_export.html). +* 使用[Multiple-Project Pipelines](../ci/multi_project_pipeline_graphs.html)查看涉及多个项目的整个 CI / CD [管道](../ci/multi_project_pipeline_graphs.html) . +* [锁定文件](project/file_lock.html)以防止冲突. +* 使用[Deploy Boards](project/deploy_boards.html)查看在 Kubernetes 上运行的每个 CI 环境的当前运行状况和状态. +* 利用[Canary 部署的](project/canary_deployments.html)连续交付方法. +* 扫描您的代码中的漏洞, [并在合并请求中显示它们](application_security/sast/index.html) . + +您还可以[将](project/integrations/overview.html) GitLab 与众多第三方应用程序[集成](project/integrations/overview.html) ,例如 Mattermost,Microsoft Teams,HipChat,Trello,Slack,Bamboo CI,Jira 等. + +## Projects[](#projects "Permalink") + +在 GitLab 中,您可以创建[项目](project/index.html)来托管代码,跟踪问题,在代码上进行协作以及使用内置的 GitLab CI / CD 持续构建,测试和部署应用程序. 或者,您可以从一个项目中一次完成所有操作. + +* [存储库](project/repository/index.html) :将代码[库](project/repository/index.html)托管在具有版本控制的存储库中,并作为完全集成平台的一部分. +* [问题](project/issues/index.html) :探索 GitLab 问题的最佳功能. +* [合并请求](project/merge_requests/index.html) :在代码,评论,每个分支的实时预览更改方面进行协作,并通过合并请求请求批准. +* [里程碑](project/milestones/index.html) :处理多个问题,并与里程碑在同一目标日期合并请求. + +## GitLab CI/CD[](#gitlab-cicd "Permalink") + +使用内置的[GitLab CI / CD](../ci/README.html)直接从 GitLab 测试,构建和部署应用程序. 无需第三方集成. + +* [GitLab Auto Deploy](../topics/autodevops/stages.html#auto-deploy) :通过 GitLab Auto Deploy 开箱即用地部署您的应用程序. +* [Review Apps](../ci/review_apps/index.html) :实时预览带有 Review Apps 的合并请求所引入的更改. +* [GitLab 页面](project/pages/index.html) :使用 GitLab 页面直接从 GitLab 发布您的静态站点. 您可以使用 Pages 构建,测试和部署任何静态站点生成器. +* [GitLab Container Registry](packages/container_registry/index.html) :使用 Container Registry 构建和部署 Docker 映像. + +## Account[](#account "Permalink") + +您可以自定义和配置很多东西,以享受 GitLab 的最佳体验. + +* [设置](profile/index.html) :管理用户设置以更改您的个人信息,个人访问令牌,授权的应用程序等. +* [身份验证](../topics/authentication/index.html) :通读 GitLab 中可用的身份验证方法. +* [权限](permissions.html) :了解每种用户类型(访客,记者,开发人员,维护人员,所有者)的不同权限级别集. +* [功能亮点](feature_highlight.html) :了解有关应用周围的小蓝点的更多信息,这些小点可以解释某些功能. +* [滥用报告](abuse_reports.html) :向 GitLab 管理员报告用户的[滥用情况](abuse_reports.html) . + +## Groups[](#groups "Permalink") + +使用 GitLab [组,](group/index.html)您可以将相关项目组合在一起,并授予成员一次访问多个项目的权限. + +组也可以嵌套在[子组中](group/subgroups/index.html) . + +## Discussions[](#discussions "Permalink") + +在 GitLab 中,您可以在问题,合并请求,代码段和提交中注释和提及合作者. + +通过合并请求对代码库的实现执行内联检查时,可以通过[可解析的线程](discussions/index.html#resolvable-comments-and-threads)收集反馈. + +### GitLab Flavored Markdown (GFM)[](#gitlab-flavored-markdown-gfm "Permalink") + +通读[GFM 文档,](markdown.html)以了解如何在线程,注释,问题和合并请求描述以及所有支持 GFM 的其他地方应用最好的 GitLab 风味 Markdown. + +## Todos[](#todos "Permalink") + +Never forget to reply to your collaborators. [GitLab Todos](todos.html) are a tool for working faster and more effectively with your team, by listing all user or group mentions, as well as issues and merge requests you’re assigned to. + +## Search[](#search "Permalink") + +[搜索和筛选](search/index.html)组,项目,问题,合并请求,文件,代码等. + +## Snippets[](#snippets "Permalink") + +[片段](snippets.html)是您要存储在 GitLab 中的代码块,您可以从中快速访问它们. 您还可以通过" [讨论"](#discussions)收集有关它们的反馈. + +## Keyboard shortcuts[](#keyboard-shortcuts "Permalink") + +GitLab 中有许多[键盘快捷键](shortcuts.html) ,可帮助您在页面之间导航并更快地完成任务. + +## Integrations[](#integrations "Permalink") + +[将 GitLab](../integration/README.html)与您喜欢的工具(例如 Trello,Jira 等) [集成](../integration/README.html) . + +## Webhooks[](#webhooks "Permalink") + +配置[webhook](project/integrations/webhooks.html)以侦听特定事件,例如推送,问题或合并请求. GitLab 会将带有数据的 POST 请求发送到 webhook URL. + +## API[](#api "Permalink") + +通过[API](../api/README.html)自动化 GitLab. + +## Git and GitLab[](#git-and-gitlab "Permalink") + +了解什么是[Git](../topics/git/index.html)及其最佳实践. + +## Instance statistics[](#instance-statistics "Permalink") + +查看您的 GitLab 实例的[各种统计信息](instance_statistics/index.html) . + +## Operations Dashboard[](#operations-dashboard-premium "Permalink") + +See [Operations Dashboard](operations_dashboard/index.html) for a summary of each project’s operational health. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/Markdown.md" "b/docs/\347\224\250\346\210\267/Markdown.md" new file mode 100644 index 0000000000000000000000000000000000000000..85c54893b4f40cd585d790d6ae7c5c8fa570aacf --- /dev/null +++ "b/docs/\347\224\250\346\210\267/Markdown.md" @@ -0,0 +1,2 @@ +# Markdown + diff --git "a/docs/\347\224\250\346\210\267/\344\270\276\346\212\245\347\224\250\346\210\267.md" "b/docs/\347\224\250\346\210\267/\344\270\276\346\212\245\347\224\250\346\210\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..f2086679f52d095df58ef088bf28de7b8ee8ee45 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\344\270\276\346\212\245\347\224\250\346\210\267.md" @@ -0,0 +1,2 @@ +# 举报用户 + diff --git "a/docs/\347\224\250\346\210\267/\345\276\205\345\212\236\344\272\213\351\241\271.md" "b/docs/\347\224\250\346\210\267/\345\276\205\345\212\236\344\272\213\351\241\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..4b8a52f5de234ab9931019060cccf1064122f81f --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\345\276\205\345\212\236\344\272\213\351\241\271.md" @@ -0,0 +1,2 @@ +# 待办事项 + diff --git "a/docs/\347\224\250\346\210\267/\345\277\253\346\215\267\351\224\256.md" "b/docs/\347\224\250\346\210\267/\345\277\253\346\215\267\351\224\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..5de01966cd55e7e3122e52f312367c17eca885ed --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\345\277\253\346\215\267\351\224\256.md" @@ -0,0 +1,2 @@ +# 快捷键 + diff --git "a/docs/\347\224\250\346\210\267/\346\220\234\347\264\242.md" "b/docs/\347\224\250\346\210\267/\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..be76bf7202773dff41186454839210ba3ae24be7 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\346\220\234\347\264\242.md" @@ -0,0 +1,2 @@ +# 搜索 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\346\235\203\351\231\220.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\346\235\203\351\231\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..a3197918a6c71b35d4e23fb682e0208775c373a1 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\346\235\203\351\231\220.md" @@ -0,0 +1,2 @@ +# 用户权限 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..79e2c1ff52dc07aae968c684d8e78202a3e87d8d --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267.md" @@ -0,0 +1,2 @@ +# 用户账号 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..9cbffd6d9b76c3326200889e2c979a1da743336a --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" @@ -0,0 +1,2 @@ +# 电子邮件通知 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\231\273\345\275\225\346\227\245\345\277\227.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\231\273\345\275\225\346\227\245\345\277\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..eea24d9be38fa9b3ac20464c7eab29319d56e6ae --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\264\246\345\217\267/\347\231\273\345\275\225\346\227\245\345\277\227.md" @@ -0,0 +1,2 @@ +# 登录日志 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\345\201\217\345\245\275.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\345\201\217\345\245\275.md" new file mode 100644 index 0000000000000000000000000000000000000000..f13f9c06fc40ec20356136dd57638558466e9781 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\345\201\217\345\245\275.md" @@ -0,0 +1,2 @@ +# 个人偏好 + diff --git "a/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..b63e8b20a15b930c3dda956828e6d9ed5d555d20 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\224\250\346\210\267\350\265\204\346\226\231/\344\270\252\344\272\272\350\256\277\351\227\256\344\273\244\347\211\214.md" @@ -0,0 +1,2 @@ +# 个人访问令牌 + diff --git "a/docs/\347\224\250\346\210\267/\347\273\204\347\273\207.md" "b/docs/\347\224\250\346\210\267/\347\273\204\347\273\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..e7c4c19241826b0107825b9e2f6e34eceb4a40b4 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\273\204\347\273\207.md" @@ -0,0 +1,337 @@ +# 组织[](#组织 "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 diff --git "a/docs/\347\224\250\346\210\267/\347\273\204\347\273\207/\345\255\220\347\273\204\347\273\207.md" "b/docs/\347\224\250\346\210\267/\347\273\204\347\273\207/\345\255\220\347\273\204\347\273\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..b1b8080e8602cffe1a1dc260a74b85103d9b8518 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\347\273\204\347\273\207/\345\255\220\347\273\204\347\273\207.md" @@ -0,0 +1,89 @@ +# 子组织[](#子组织 "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) diff --git "a/docs/\347\224\250\346\210\267/\350\256\250\350\256\272.md" "b/docs/\347\224\250\346\210\267/\350\256\250\350\256\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..49c956e1bbdf4f74bf794c359cdff9beb142d4d0 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\350\256\250\350\256\272.md" @@ -0,0 +1,2 @@ +# 探讨 + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..5afd08d49db8120788b901ab70eb45525340e637 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256.md" @@ -0,0 +1,188 @@ +# 项目[](#项目 "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) + +** CI / CD:** + +* [CI / CD](../../ci/README.html) :内置的持续集成,交付和部署工具 + * [容器注册表](../packages/container_registry/index.html) :开箱即用地构建和推送 Docker 映像 + * [自动部署](../../topics/autodevops/stages.html#auto-deploy) :配置 CI / CD 以自动设置应用程序的部署 + * [启用和禁用 CI / CD](../../ci/enable_or_disable_ci.html) + * [Pipelines](../../ci/pipelines/index.html) :从 UI 配置和可视化 GitLab CI / CD 管道 + * [计划的Pipeline](../../ci/pipelines/schedules.html) :计划管道以在选定的时间开始 + * [Pipeline图](../../ci/pipelines/index.html#visualize-pipelines) :通过WEB查看整个管道 + * [作业工件](../../ci/pipelines/job_artifacts.html) :定义,浏览和下载作业工件 + * [Pipeline设置](../../ci/pipelines/settings.html) :设置 Git 策略(选择从作业中的 GitLab 提取存储库的默认方式),超时(定义可以运行作业的最长时间(以分钟为`.gitlab-ci.yml` )) `.gitlab-ci.yml`自定义路径,测试覆盖率分析,管道的可见性等 + * [Kubernetes 集群集成](clusters/index.html) :将您的 项目与 Kubernetes 集群连接 + * [功能标志](../../operations/feature_flags.html) :功能标志允许您通过动态切换某些功能来以不同的方式发布项目 +* [Pages](pages/index.html) :使用[Pages](pages/index.html)构建,测试和部署您的静态网站 + +**其他特性:** + +* [Wiki](wiki/index.html) :在集成的 Wiki 中记录您的项目 +* [代码片](../snippets.html) :存储,共享和协作代码片段 +* [价值流分析](cycle_analytics.html) :查看您的开发生命周期 +* [分析](insights/index.html) :配置对您的项目至关重要的见解 +* [语法高亮](highlighting.html) :一种自定义代码块的替代方法,可替代默认语言选择 +* [Release](releases/index.html) :一种跟踪项目中可交付成果的方式,可作为源,构建输出,其他元数据和与代码的发行版本相关的其他工件的快照 +* [代码所有者](code_owners.html) :为某些文件指定代码所有者 +* [License](../compliance/license_compliance/index.html) :批准和拒绝项目的许可证. +* [依赖项列表](../application_security/dependency_list/index.html) :查看项目依赖项. +* [要求](requirements/index.html) :要求使您可以创建标准来检查产品. +* [静态站点编辑器](static_site_editor/index.html) :无需事先了解代码库或 Git 命令,即可在静态网站上快速编辑内容. + +### 项目集成[](#项目集成 "Permalink") + +[将您的项目](integrations/index.html)与 Jira,Mattermost,Kubernetes,Slack 等进行[集成](integrations/index.html) 。 + +## 新建项目[](#新建项目 "Permalink") + +了解如何在 CODEChina 中[创建一个新项目](../../basics/create-project.html) . + +### Fork 项目[](#fork项目 "Permalink") + +您可以[Fork 一个项目](repository/forking_workflow.html) ,以便: + +* 通过 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") + +项目设置允许您设置项目的可见性级别、访问级别,并执行诸如归档、重命名或转移项目的操作。 + +了解更多有关[项目设置](settings/index.html)的文档。 + +## 导入/导出项目[](#i导入导出项目 "Permalink") + +* [导入项目](import/index.html) from: + * [从Github导入](import/github.html) + * [从Bitbucket导入](import/bitbucket.html) +* [导出项目](settings/import_export.html#exporting-a-project-and-its-data) + + +## 删除项目[](#删除项目 "Permalink") + +可以通过以下操作删除一个项目: + +1. 打开**项目设置>常规设置** +2. 展开**高级**部分 +3. 向下滚动到**删除项目**部分 +4. 点击 **删除项目** +5. 通过输入所需的文本来确认删除操作 + +### 延迟删除[](#延迟删除 "Permalink") + +默认情况下,删除项目后会延迟 7 天才真的会删除项目。在此期间项目为待删除状态, 管理员可以在这段时间内恢复项目。 + + +## 项目成员[](#项目成员 "Permalink") + +了解如何[将成员添加到您的项目中](members/index.html) + +## 退出项目[](#退出项目 "Permalink") + +当项目属于组织时(即项目在[组织的命名空间下](../group/index.html#命名空间) ), **退出项目**将仅显示在项目的页面上. 如果您选择退出项目,那么您将不再是项目成员,并且将无法继续参与项目。 + +## 项目首页[](#项目首页 "Permalink") + +项目首页会根据项目的可见性设置和用户权限来显示不同的内容: + +对于公共项目以及私有项目中[有权查看该项目代码](../permissions.html#project-members-permissions)的项目成员: + +* 显示[`README`文件或索引文件的](repository/#repository-readme-and-index-files)内容(如果有),然后显示项目存储库中的目录列表 +* 如果项目不包含这些文件中的任何一个,则访问者将看到存储库的文件和目录列表 + +对于没有权限查看项目代码的用户: + +* 显示项目 Wiki(如果有) +* 显示项目的 Issue 列表 + +## 路径重定向[](#路径重定向 "Permalink") + +当项目仓库路径变更时,从旧路径平稳过渡到新路径至关重要,我们提供两种重定向方式:Web 以及 Git 推/拉重定向。 + +这两种方式根据项目的情况,可能会有所不同。 + +当重命名一个用户、一个组织或者一个仓库时: + +* 命名空间及其下的任何内容(例如项目)的现有 Web URL 将重定向到新 URL +* 命名空间下项目的现有 Git 远程 URL 将重定向到新的远程 URL,每次将其推/拉到修改过路径的代码仓库时,都会显示一条警告消息:提示您更新远程仓库地址。 这也就意味着在重命名后,任何自动化脚本或 Git 客户端将继续工作 +* 只要原来的路径还没有被其他用户、组织或者项目占用,路径重定向功能将一直能够正常使用 + +## 项目 API[](#项目api "Permalink") + +您的项目可以使用许多[API](../../api/README.html) : + +* [话题](../../api/discussions.html) +* [基本信息](../../api/projects.html) +* [导入/导出项目](../../api/project_import_export.html) +* [看板](../../api/boards.html) +* [标签](../../api/labels.html) +* [Markdown](../../api/markdown.html) +* [合并请求](../../api/merge_requests.html) +* [里程碑](../../api/milestones.html) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Git\345\261\236\346\200\247.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Git\345\261\236\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..3c5362e2b7074dc9d2c293c10358969a55b28148 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Git\345\261\236\346\200\247.md" @@ -0,0 +1,14 @@ +# 自定义Git属性[](#自定义Git属性 "Permalink") + +GitLab 支持定义自定义[Git 属性,](https://git-scm.com/docs/gitattributes)例如将哪些文件视为二进制文件,以及将哪种语言用于语法突出显示差异. + +要定义这些属性, `.gitattributes`在存储库的根目录中创建一个名为`.gitattributes`的文件,并将其推送到项目的默认分支. + +## Encoding Requirements[](#encoding-requirements "Permalink") + +`.gitattributes`文件*必须*使用 UTF-8 编码,并且*不能*包含字节顺序标记. 如果使用其他编码,则文件的内容将被忽略. + +## Syntax Highlighting[](#syntax-highlighting "Permalink") + +`.gitattributes`文件可用于定义语法高亮显示文件和差异时使用的语言. 有关更多信息,请参见["语法突出显示"](highlighting.html) . + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Releases.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Releases.md" new file mode 100644 index 0000000000000000000000000000000000000000..5642320f7e972af61c41afa4024746a172e79733 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/Releases.md" @@ -0,0 +1,315 @@ +# Releases[](#releases "Permalink") + +在 GitLab 11.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41766) . + +要在源代码历史记录中引入检查点,可以在发布时分配[Git 标签](https://git-scm.com/book/en/v2/Git-Basics-Tagging) . 但是,在大多数情况下,您的用户不仅需要原始源代码. 他们需要 CI / CD 系统输出的已编译对象或其他资产. + +GitLab *发行版*是与代码的发行版本相关联的源,构建输出,工件和其他元数据的快照. + +您可以在任何分支上创建一个 GitLab 版本. 创建发行版时: + +* manbetx 客户端打不开自动归档源代码,并将其与版本关联. +* GitLab 会自动创建一个 JSON 文件,其中列出了发行版中的所有内容,因此您可以比较和审核发行版. 该文件称为[发布证据](#release-evidence) . +* 您可以添加发行说明以及与发行版关联的标签的消息. + +创建发行版后,您可以将[里程碑与其关联](#associate-milestones-with-a-release) ,并附加[发行资产](#release-assets) ,例如运行手册或软件包. + +## View releases[](#view-releases "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/36667) . + +要查看版本列表: + +* 转到**项目概述>版本** ,或 + +* 在项目的概述页面上,如果存在至少一个版本,请单击版本数. + + [![Number of Releases](img/4b690260474eb340f7b3f6d25b0568d2.png "Incremental counter of Releases")](img/releases_count_v13_2.png) + + * 在公共项目上,此数字对所有用户可见. + * 在私有项目上,具有 Reporter [权限](../../permissions.html#project-members-permissions)或更高[权限的](../../permissions.html#project-members-permissions)用户可以看到此数字. + +## Create a release[](#create-a-release "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32812) . 可以在 GitLab UI 中直接创建发布. + +**注意:**只有具有开发者权限或更高权限的用户才能创建发行版. 阅读有关[释放权限的](../../../user/permissions.html#project-members-permissions)更多信息. + +您可以在用户界面中或使用[Releases API](../../../api/releases/index.html#create-a-release)创建发布. 我们建议使用 API​​添加发行说明,作为 CI / CD 发行流程中的最后步骤之一. + +要通过 GitLab UI 创建新版本: + +1. 导航到**项目概述>发布** ,然后单击**新发布**按钮. +2. 在[**标签名称**](#tag-name)框中,输入一个名称. +3. In the **从创建** list, select the branch or enter a tag or commit SHA. +4. 在" **消息"**框中,输入与标签关联的消息. +5. (可选)在" [**发行说明"**](#release-notes-description)字段中,输入发行说明. 您可以使用 Markdown 并将文件拖放到此字段. + * 如果将此字段留空,则只会创建一个标签. + * 如果您填充它,将同时创建标签和发行版. +6. Click **创建标签**. + +如果创建了发行​​版,则可以在**项目概述>发行版中**对其进行查看. 如果创建了标签,则可以在**存储库>标签中**查看它. + +现在,您可以编辑发布以[添加里程碑](#associate-milestones-with-a-release)和[发布资产](#release-assets) . + +### Schedule a future release[](#schedule-a-future-release "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38105) . + +您可以使用[Releases API](../../../api/releases/index.html#upcoming-releases)提前创建发行[版](../../../api/releases/index.html#upcoming-releases) . 当您设置将来的`released_at`日期时,将在发布标签旁边显示**即将发布**的发布标志. 经过`released_at`日期和时间后,会自动删除徽章. + +[![An upcoming release](img/7727ed12caef6b761b73e4bd379c7839.png)](img/upcoming_release_v12_7.png) + +## Edit a release[](#edit-a-release "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26016) . 在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/9427)了资产链接编辑. + +**注意:**只有具有开发者权限或更高权限的用户才能编辑发行版. 阅读有关[释放权限的](../../../user/permissions.html#project-members-permissions)更多信息. + +要编辑发布的详细信息: + +1. 导航到**项目概述>发布** . +2. 在您要修改的发行版的右上角,单击" **编辑此发行版"** (铅笔图标). +3. 在" **编辑版本"**页面上,更改版本的详细信息. +4. Click **保存更改**. + +您可以编辑发行标题,注释,关联的里程碑和资产链接. 要更改其他发行信息,例如标签或发行日期,请使用[Releases API](../../../api/releases/index.html#update-a-release) . + +## Add release notes to Git tags[](#add-release-notes-to-git-tags "Permalink") + +If you have an existing Git tag, you can add release notes to it. + +您可以在用户界面中或使用[Releases API](../../../api/releases/index.html)来执行此操作. 我们建议使用 API​​添加发行说明,作为 CI / CD 发行流程中的最后步骤之一. + +在界面中,要向新的 Git 标签添加发行说明: + +1. 导航到您项目的**Repository> Tags** . +2. Click **新的一天**. +3. 在**发行说明**字段中,输入发行说明. 您可以使用 Markdown 并将文件拖放到此字段. +4. Click **创建标签**. + +在界面中,要将发行说明添加到现有的 Git 标签: + +1. 导航到您项目的**Repository> Tags** . +2. 单击**编辑发行说明** (铅笔图标). +3. 在**发行说明**字段中,输入发行说明. 您可以在此字段中使用 Markdown,并将文件拖放到该字段中. +4. Click **保存更改**. + +## Associate milestones with a release[](#associate-milestones-with-a-release "Permalink") + +版本历史 + +* 在 GitLab 12.5 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/29020) . +* [已更新](https://gitlab.com/gitlab-org/gitlab/-/issues/39467) ,可在 GitLab 13.0 中的 UI 中编辑里程碑. + +您可以将一个版本与一个或多个[项目里程碑](../milestones/index.html#project-milestones-and-group-milestones)相关联. + +您可以在用户界面中执行此操作,也可以在对[Releases API 的](../../../api/releases/index.html#create-a-release)请求中包含一个`milestones`数组. + +在用户界面中,要将里程碑与版本关联: + +1. 导航到**项目概述>发布** . +2. 在您要修改的发行版的右上角,单击" **编辑此发行版"** (铅笔图标). +3. 从" **里程碑"**列表中,选择要关联的每个里程碑. 您可以选择多个里程碑. +4. Click **保存更改**. + +在" **项目概述">"发布"**页面上, **里程碑**列在顶部,以及有关里程碑问题的统计信息. + +[![A Release with one associated milestone](img/21967843cf3a12bcfa5e39a39b1b3f69.png)](img/release_with_milestone_v12_9.png) + +在" **问题">"里程碑"**页面上,以及当您单击此页面上的里程碑时,也可以看到发行版本. + +这是一个里程碑示例,分别没有发布,一个发布和两个发布. + +[![Milestones with and without Release associations](img/e6ef8c883764c13967c9c9fcc5617980.png)](img/milestone_list_with_releases_v12_5.png) + +## Get notified when a release is created[](#get-notified-when-a-release-is-created "Permalink") + +在 GitLab 12.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26001) . + +为您的项目创建新版本时,将通过电子邮件通知您. + +订阅发布通知: + +1. 导航到" **项目概述"** . +2. 单击**通知设置** (响铃图标). +3. 在列表中,点击**自定义** . +4. Select the **新品发布** check box. +5. 关闭对话框进行保存. + +## Prevent unintentional releases by setting a deploy freeze[](#prevent-unintentional-releases-by-setting-a-deploy-freeze "Permalink") + +在 GitLab 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/29382) . + +通过设置[*部署冻结*期,](../../../ci/environments/deployment_safety.html)可以在指定的时间内防止意外的生产发布. 冻结部署有助于减少自动化部署时的不确定性和风险. + +使用" [冻结时间" API](../../../api/freeze_periods.html)设置被定义为[crontab](https://crontab.guru/)条目的`freeze_start`和`freeze_end` . + +如果正在执行的作业处于冻结期,则 GitLab CI / CD 会创建一个名为`$CI_DEPLOY_FREEZE`的环境变量. + +为了防止执行部署作业,请在`gitlab-ci.yaml`创建一个`rules`条目,例如: + +``` +deploy_to_production: + stage: deploy + script: deploy_to_prod.sh + rules: + - if: $CI_DEPLOY_FREEZE == null +``` + +如果项目包含多个冻结期,则所有时期都适用. 如果它们重叠,则冻结将覆盖整个重叠期间. + +有关更多信息,请参阅[部署安全](../../../ci/environments/deployment_safety.html) . + +## Release fields[](#release-fields "Permalink") + +创建或编辑发行版时,以下字段可用. + +### Tag name[](#tag-name "Permalink") + +发行标签名称应包括发行版本. GitLab 在我们的发行版中使用[语义版本控制](https://semver.org/) ,我们建议您也这样做. 使用`(Major).(Minor).(Patch)` ,如[GitLab 版本控制政策](../../../policy/maintenance.html#versioning)中所述. + +例如,对于 GitLab 版本`10.5.7` : + +* `10`代表主要版本. 主要版本是`10.0.0` ,但通常称为`10.0` . +* `5`代表次要版本. 次要版本为`10.5.0` ,但通常称为`10.5` . +* `7`代表补丁号码. + +版本号的任何部分都可以是多个数字,例如`13.10.11` . + +### Release notes description[](#release-notes-description "Permalink") + +每个版本都有说明. 您可以添加任何您喜欢的文本,但是我们建议您添加一个变更日志来描述发行版本的内容. 这可以帮助用户快速扫描您发布的每个版本之间的差异. + +**注意:** [Git 的标记消息](https://git-scm.com/book/en/v2/Git-Basics-Tagging)和发行说明描述无关. 说明支持[Markdown](../../markdown.html) . + +### Release assets[](#release-assets "Permalink") + +当前,您可以将以下类型的资产添加到每个版本: + +* [Source code](#source-code) +* [Links](#links) + +manbetx 客户端打不开将在未来支持更多的资产类型,包括诸如预装包,合规性/安全证据或容器图像之类的对象. + +#### Permanent links to release assets[](#permanent-links-to-release-assets "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/27300) . + +与发布相关联的资产可通过永久 URL 访问. GitLab 将始终将此 URL 重定向到实际资产位置,因此,即使资产移动到其他位置,您也可以继续使用相同的 URL. 这是在[链接创建](../../../api/releases/links.html#create-a-link)或[更新](../../../api/releases/links.html#update-a-link)期间定义的. + +每个资产都有一个名称, *实际*资产位置的 URL,以及一个可选的`filepath`参数,如果您指定它,它将创建指向发布的资产的 URL. URL 的格式为: + +``` +https://host/namespace/project/releases/:release/downloads/:filepath +``` + +如果您对资产`v11.9.0-rc2`的发布`gitlab-org`命名空间和`gitlab-runner`项目上`gitlab.com` ,例如: + +``` +{ "name": "linux amd64", "filepath": "/binaries/gitlab-runner-linux-amd64", "url": "https://gitlab-runner-downloads.s3.amazonaws.com/v11.9.0-rc2/binaries/gitlab-runner-linux-amd64" } +``` + +该资产具有以下直接链接: + +``` +https://gitlab.com/gitlab-org/gitlab-runner/releases/v11.9.0-rc2/downloads/binaries/gitlab-runner-linux-amd64 +``` + +资产的物理位置可以随时更改,并且直接链接将保持不变. + +### Source code[](#source-code "Permalink") + +GitLab 会根据给定的 Git 标签自动生成`zip` , `tar.gz` , `tar.bz2`和`tar`归档的源代码. 这些是只读资产. + +### Links[](#links "Permalink") + +A link is any URL which can point to whatever you like: documentation, built binaries, or other related materials. These can be both internal or external links from your GitLab instance. + +链接的四种类型是" Runbook"," Package"," Image"和" Other". + +## Release evidence[](#release-evidence "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/26019) . + +每次创建发行版时,GitLab 都会拍摄与之相关的数据快照. 此数据保存在 JSON 文件中,称为*发布证据* . 它包括链接的里程碑和问题,并且可以促进内部流程,例如外部审核. + +要访问发布证据,请在"发布"页面上,单击" **证据集合"**标题下列出的 JSON 文件的链接. + +您还可以[使用 API](../../../api/releases/index.html#collect-release-evidence-premium-only)生成现有版本的版本证据. 因此,每个版本可以具有多个版本证据快照. 您可以在"发布"页面上查看发布证据及其详细信息. + +**注意:**禁用问题跟踪器后, [将无法下载](https://gitlab.com/gitlab-org/gitlab/-/issues/208397)发布证据. + +这是释放证据对象的示例: + +``` +{ "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[](#collect-release-evidence-premium-only "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/199065) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.10. + +创建发布后,将自动收集发布证据. 要在其他任何时间启动证据收集,请使用[API 调用](../../../api/releases/index.html#collect-release-evidence-premium-only) . 您可以为一个发布多次收集发布证据. + +在"发布"页面上可以看到证据收集快照,以及收集证据的时间戳. + +### Include report artifacts as release evidence[](#include-report-artifacts-as-release-evidence-ultimate-only "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32773) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.2. + +创建发布时,如果[作业工件](../../../ci/pipelines/job_artifacts.html#artifactsreports)包含在最后运行的管道中,则它们会自动作为发布证据包含在发布中. + +尽管工作工件通常会过期,但发布证据中包含的工件不会过期. + +要启用作业工件收集,您需要同时指定两个: + +1. [`artifacts:paths`](../../../ci/yaml/README.html#artifactspaths) +2. [`artifacts:reports`](../../../ci/pipelines/job_artifacts.html#artifactsreports) + +``` +ruby: + script: + - gem install bundler + - bundle install + - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml + artifacts: + paths: + - rspec.xml + reports: + junit: rspec.xml +``` + +如果管道成功运行,则在创建发布时, `rspec.xml`文件将保存为发布证据. + +**注:**如果您[计划发布证据收集](#schedule-release-evidence-collection) ,则某些[证据](#schedule-release-evidence-collection)可能在证据收集时已经过期. 为了避免这种情况,可以使用[`artifacts:expire_in`](../../../ci/yaml/README.html#artifactsexpire_in)关键字. 了解更多在[这个问题上](https://gitlab.com/gitlab-org/gitlab/-/issues/222351) . + +### Schedule release evidence collection[](#schedule-release-evidence-collection "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23697) . + +在 API 中: + +* 如果您指定未来的`released_at`日期,则该发布将成为**即将发布的发布,**并且将在发布日期收集证据. 在此之前,您无法收集释放证据. +* 如果您使用过去的`released_at`日期,则不会收集任何证据. +* 如果您未指定`released_at`日期,则在创建发布的日期收集发布证据. + +### Disable release evidence display[](#disable-release-evidence-display-core-only "Permalink") + +`:release_evidence_collection`功能标志在 GitLab 自管理实例中默认启用. 要关闭它,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.disable(:release_evidence_collection) +``` + +**注意:**无论使用此功能标志如何,都将收集发布证据,该标志仅启用或禁用"发布"页面上的数据显示. + +## GitLab Releaser[](#gitlab-releaser "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab-releaser/-/merge_requests/6) . + +GitLab Releaser 是一个 CLI 工具,用于从命令行或 GitLab 的 CI / CD 配置文件`.gitlab-ci.yml`管理 GitLab 版本. + +有了它,您可以直接通过终端创建,更新,修改和删除发行版. + +有关详细信息,请阅读[GitLab Releaser 文档](https://gitlab.com/gitlab-org/gitlab-releaser/-/tree/master/docs/index.md) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/WebIDE.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/WebIDE.md" new file mode 100644 index 0000000000000000000000000000000000000000..c4cea172e7ed10914bda58d09c723dfde0115074 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/WebIDE.md" @@ -0,0 +1,260 @@ +# Web IDE[](#web-ide "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 10.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/4539) . +* 在 10.7 版中[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/44157) GitLab Core. + +Web IDE 编辑器通过提供具有提交阶段的高级编辑器,可以更快,更轻松地为项目贡献更改. + +## Open the Web IDE[](#open-the-web-ide "Permalink") + +您可以从存储库文件列表和合并请求中查看文件时打开 Web IDE. + +[![Open Web IDE](img/7a0b5b2ee322d8676753d89561c1d3cb.png)](img/open_web_ide.png) + +## File finder[](#file-finder "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18323) in [GitLab Core](https://about.gitlab.com/pricing/) 10.8. + +通过文件查找器,您可以通过搜索快速打开当前分支中的文件. 使用键盘快捷键`Command-p` , `Control-p`或`t` (当编辑器不在焦点时)启动文件查找器. 输入文件名或文件路径片段以开始查看结果. + +## Syntax highlighting[](#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)存储库中找到更完整的受支持语言列表. 在幕后,摩纳哥使用[Monarch](https://microsoft.github.io/monaco-editor/monarch.html)库来突出显示语法. + +如果您缺少对任何语言的语法突出显示支持,我们准备了一份简短指南,介绍如何[为缺少的语言语法突出显示添加支持.](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/javascripts/ide/lib/languages/README.md) + +**注意:**单个文件编辑基于[Ace 编辑器](https://ace.c9.io) . + +### Themes[](#themes "Permalink") + +版本历史 + +* 在 13.0 版的 GitLab 中[引入](https://gitlab.com/groups/gitlab-org/-/epics/2389) . +* GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)了完全日光化黑暗主题. + +GitLab 支持的语法突出显示的所有主题都添加到了 Web IDE 的代码编辑器中. 您可以从个人[资料首选项中](../../profile/preferences.html)选择一个主题. + +主题仅在 Web IDE 文件编辑器中可用, [深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/209808)和[日光化深色主题](https://gitlab.com/gitlab-org/gitlab/-/issues/219228)除外,它们适用于整个 Web IDE 屏幕. + +| 日光灯主题 | 日晒黑暗主题 | 黑暗主题 | +| --- | --- | --- | +| [![Solarized Light Theme](img/d79207e6e4f140448c9dd5e6ebe5e380.png)](img/solarized_light_theme_v13_0.png) | [![Solarized Dark Theme](img/c187176d6b8d40e19db360c4c68ffb46.png)](img/solarized_dark_theme_v13_1.png) | [![Dark Theme](img/30152366655be1543f687603c8d34d96.png)](img/dark_theme_v13_0.png) | + +## Configure the Web IDE[](#configure-the-web-ide "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/23352) in [GitLab Core](https://about.gitlab.com/pricing/) 13.1. + +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[](#commit-changes "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 10.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/4539) . +* 在 10.7 版中[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/44157) GitLab Core. +* 从[GitLab 12.7 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/33441) ,将自动暂存文件. +* 从[GitLab 12.9 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/196609) ,删除了对暂存文件的支持,以防止丢失未暂存的数据. 您当前的所有更改都必须提交或放弃. + +进行更改后,单击左下角的" **提交"**按钮以查看已更改文件的列表. + +完成更改后,可以添加提交消息,提交更改并直接创建合并请求. 如果您没有对所选分支的写访问权,则会看到警告,但仍然可以创建新分支并启动合并请求. + +要放弃特定文件中的更改,请在"更改"选项卡中单击该文件上的" **放弃更改"**按钮. 要放弃所有更改,请单击更改侧栏右上角的垃圾桶图标. + +[![Commit changes](img/bad584bc95c83e26be6c67a2b54b26ae.png)](img/commit_changes_v12_9.png) + +## Reviewing changes[](#reviewing-changes "Permalink") + +提交更改之前,可以通过切换到查看模式或从更改列表中选择文件来将它们与上一次提交进行比较. + +当您打开合并请求时,还可以使用其他查看模式,如果您提交更改,该模式将向您显示合并请求 diff 的预览. + +## View CI job logs[](#view-ci-job-logs "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19279) in [GitLab Core](https://about.gitlab.com/pricing/) 11.0. + +您可以使用 Web IDE 通过在 Web IDE 中打开分支或合并请求并打开失败作业的日志来快速修复失败的测试. 通过单击右上角的" **管道"**按钮,可以访问最新管道的所有作业的状态以及当前提交的作业跟踪. + +管道状态也始终显示在左下方的状态栏中. + +## Switching merge requests[](#switching-merge-requests "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19318) in [GitLab Core](https://about.gitlab.com/pricing/) 11.0. + +要在创作的和分配的合并请求之间切换,请单击侧栏顶部的下拉列表以打开合并请求列表. 在切换到其他合并请求之前,您将需要提交或放弃所有更改. + +## Switching branches[](#switching-branches "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/20850) in [GitLab Core](https://about.gitlab.com/pricing/) 11.2. + +To switch between branches of the current project repository, click the dropdown in the top of the sidebar to open a list of branches. You will need to commit or discard all your changes before switching to a different branch. + +## Markdown editing[](#markdown-editing "Permalink") + +版本历史 + +* [GitLab Core](https://about.gitlab.com/pricing/) 10.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18059)了 Markdown 预览. +* 支持在[GitLab Core](https://about.gitlab.com/pricing/) 13.1 中[引入的](https://gitlab.com/gitlab-org/gitlab/-/issues/22822)粘贴图像. + +在 Web IDE 中编辑 Markdown 文件时,可以通过单击文件编辑器上方的" **预览 Markdown"**选项卡来预览更改. Markdown 预览支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) . + +您还可以通过将任何本地图像直接粘贴到 Markdown 文件中来上传它们. 该图像将上传到同一目录,默认情况下命名为`image.png` . 如果已经存在相同名称的另一个文件,则将数字后缀自动添加到文件名. + +## Live Preview[](#live-preview "Permalink") + +版本历史 + +* 在[GitLab Core](https://about.gitlab.com/pricing/) 11.2 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19764) . +* 在 GitLab 13.0 中从*客户端评估* [重命名](https://gitlab.com/gitlab-org/gitlab/-/issues/213853)为*实时预览* . + +您可以使用 Web IDE 在浏览器中预览 JavaScript 项目. 此功能使用 CodeSandbox 编译和捆绑用于预览 Web 应用程序的 JavaScript. + +[![Web IDE Live Preview](img/7efae901a0febb2a8e969415dced271a.png)](img/live_preview_v13_0.png) + +Additionally, for public projects an **在 CodeSandbox 中打开** button is available to transfer the contents of the project into a public CodeSandbox project to quickly share your project with others. + +### Enabling Live Preview[](#enabling-live-preview "Permalink") + +需要在 GitLab 实例管理员设置中启用实时预览功能. 在 GitLab.com 上为所有项目启用了实时预览 + +[![Admin Live Preview setting](img/fb0d67715160a5a049ca0b8e7d7af698.png)](img/admin_live_preview_v13_0.png) + +完成此操作后,您可以使用`package.json`文件和 Web IDE 内的`main`入口点预览项目. 下面显示了一个示例`package.json` . + +``` +{ "main": "index.js", "dependencies": { "vue": "latest" } } +``` + +## Interactive Web Terminals for the Web IDE[](#interactive-web-terminals-for-the-web-ide "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/5426) . +* 在 13.1 版中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/211685) GitLab Core. + +**警告:** Web IDE 的交互式 Web 终端当前处于**Beta 中** . 共享运行程序[尚不支持交互式 Web 终端](https://gitlab.com/gitlab-org/gitlab/-/issues/24674) ,因此您需要使用自己的私有运行程序来使用此功能. + +[交互式 Web 终端](../../../ci/interactive_web_terminal/index.html)使项目[维护者](../../permissions.html#project-members-permissions)用户可以直接从 GitLab(包括通过 Web IDE)访问终端以与 Runner 进行交互. + +### Runner configuration[](#runner-configuration "Permalink") + +为了使交互式 Web 终端正常工作,需要在运行程序中配置一些内容: + +* 跑步者需要[正确配置`[session_server]`](https://docs.gitlab.com/runner/configuration/advanced-configuration.html) . 本部分至少需要一个`session_timeout`值(默认为 1800 秒)和一个`listen_address`值. 如果未定义`advertise_address` ,则使用`listen_address` . +* 如果您对 GitLab 实例使用反向代理,则需要[启用](../../../administration/integration/terminal.html#enabling-and-disabling-terminal-support) Web 终端. + +如果您打开终端并且作业已完成其任务,则终端将在[`[session_server].session_timeout`](https://docs.gitlab.com/runner/configuration/advanced-configuration.html)配置的持续时间内阻止作业完成,直到关闭终端窗口. + +**注意:**并非所有执行程序都[受支持](https://docs.gitlab.com/runner/executors/) . [文件同步](#file-syncing-to-web-terminal)功能仅在 Kubernetes 运行程序上受支持. + +### Web IDE configuration file[](#web-ide-configuration-file "Permalink") + +为了启用 Web IDE 终端,您需要在存储库根目录内创建文件`.gitlab/.gitlab-webide.yml` . 该文件与[CI 配置文件的](../../../ci/yaml/README.html)语法非常相似,但有一些限制: + +* 无法定义全局块(即: `before_script`或`after_script` ) +* 只能将一个名为`terminal`作业添加到该文件中. +* 仅允许使用关键字`image` , `services` , `tags` , `before_script` , `script`和`variables`来配置作业. +* 要连接到交互式终端, `terminal`作业必须仍然处于活动状态并且正在运行,否则终端将无法连接到作业的会话. 默认情况下, `script`关键字的值是`sleep 60`以防止作业结束并为 Web IDE 提供足够的连接时间. 这意味着,如果您覆盖默认`script`值,则必须添加一个使作业保持运行`sleep`的命令,例如`sleep` . + +在下面的代码中,有此配置文件的示例: + +``` +terminal: + # This can be any image that has the necessary runtime environment for your project. + image: node:10-alpine + before_script: + - apt-get update + script: sleep 60 + variables: + RAILS_ENV: "test" + NODE_ENV: "test" +``` + +终端启动后,将显示控制台,我们可以访问项目存储库文件. + +**重要的** . 终端作业取决于分支. 这意味着用于触发和配置终端的配置文件将是 Web IDE 所选分支中的配置文件. + +如果分支中没有配置文件,将显示错误消息. + +### Running interactive terminals in the Web IDE[](#running-interactive-terminals-in-the-web-ide "Permalink") + +如果交互式终端可供当前用户使用,则" **终端"**按钮将显示在 Web IDE 的右侧栏中. 单击此按钮可以打开或关闭终端选项卡. + +打开后,该选项卡将显示" **启动 Web 终端"**按钮. 如果环境配置不正确,则可能禁用此按钮. 如果是这样,状态消息将描述问题. 以下是可能会禁用" **启动 Web 终端"的**一些原因: + +* `.gitlab/.gitlab-webide.yml`不存在或设置错误. +* 该项目没有活跃的私人跑步者. + +如果处于活动状态,则单击" **启动 Web 终端"**按钮将加载终端视图并开始连接到跑步者的终端. 任何时候都可以关闭并重新打开**终端**选项卡,并且不会影响终端的状态. + +当终端启动并成功连接到跑步者时,跑步者的外壳提示将出现在终端中. 在这里,您可以输入将在跑步者的环境中执行的命令. 这类似于在本地终端或通过 SSH 运行命令. + +在终端运行时,可以通过单击**Stop Terminal**停止它. 这将断开终端并停止跑步者的终端工作. 在此处,单击" **重新启动终端"**以启动新的终端会话. + +### File syncing to web terminal[](#file-syncing-to-web-terminal "Permalink") + +版本历史 + +* 在[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/5276) . +* 在 13.1 版中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/211686) GitLab Core. + +Web IDE 中的文件更改可以同步到正在运行的 Web 终端. 这使用户能够在预配置的终端环境中测试其代码更改. + +**注意:**仅将 Web IDE 中的文件更改同步到终端. 在终端中所做的更改**不会**同步到 Web IDE. 此功能仅适用于 Kubernetes Runners. + +要使文件同步到 Web 终端, `.gitlab/.gitlab-webide.yml`文件需要配置`webide-file-sync`服务. 这是使用此服务的 Node JS 项目的示例配置: + +``` +terminal: + # This can be any image that has the necessary runtime environment for your project. + image: + name: node:10-alpine + services: + - name: registry.gitlab.com/gitlab-org/webide-file-sync:latest + alias: webide-file-sync + entrypoint: ["/bin/sh"] + command: ["-c", "sleep 5 && ./webide-file-sync -project-dir $CI_PROJECT_DIR"] + ports: + # The `webide-file-sync` executable defaults to port 3000. + - number: 3000 +``` + +* 项目目录可用**后** ,必须启动`webide-file-sync`可执行文件. 这就是为什么我们需要在`command`添加`sleep 5`的原因. 有关更多信息,请参[见此问题](https://gitlab.com/gitlab-org/webide-file-sync/-/issues/7) . +* `$CI_PROJECT_DIR`是 GitLab Runners 的[预定义环境变量](../../../ci/variables/predefined_variables.html) . 这是您项目的存储库所在的位置. + +一旦将 Web 终端配置为用于文件同步,则在启动 Web 终端后,状态栏中将显示**终端**状态. + +[![Web IDE Client Side Evaluation](img/37238acd557de0d61f0c3be198c56e00.png)](img/terminal_status.png) + +在以下情况下,通过 Web IDE 对文件所做的更改将同步到正在运行的终端: + +* 编辑文件时,按`Ctrl` + `S` (在 Mac 上为`Cmd` + `S` ). +* 编辑文件后,将单击文件编辑器之外的所有内容. +* 创建,删除或重命名文件或文件夹. + +### Limitations[](#limitations "Permalink") + +交互式终端处于 beta 阶段,并将在以后的发行版中继续进行改进. 同时,请注意,用户一次只能拥有一个活动终端. + +### Troubleshooting[](#troubleshooting "Permalink") + +* 如果终端的文本为灰色且无响应,则表明终端已停止,无法再使用. 停止的终端可以通过单击**Restart Terminal 重新启动** . +* 如果终端显示**Connection Failure** ,则终端无法连接到流道. 请尝试停止并重新启动终端. 如果问题仍然存在,请仔细检查流道配置. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues.md" new file mode 100644 index 0000000000000000000000000000000000000000..4c0bfcaeb95155e3d0c5b762f54961d0e3589256 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues.md" @@ -0,0 +1,153 @@ +# Issues[](#issues "Permalink") + +问题是在 GitLab 中就想法和计划工作进行协作的基本介质. + +## Overview[](#overview "Permalink") + +GitLab 问题跟踪器是用于协作开发想法,解决问题和计划工作的高级工具. + +通过问题,可以在以下各项之间,在实施之前和期间共享和讨论提案: + +* 您和您的团队. +* 外部合作者. + +它们还可以用于各种其他目的,根据您的需求和工作流程进行定制. + +问题始终与特定项目相关联,但是如果您在一个小组中有多个项目,则还可以在小组级别集体查看所有问题. + +**常见的用例包括:** + +* 讨论新想法的实施 +* 跟踪任务和工作状态 +* 接受功能建议,问题,支持请求或错误报告 +* 详细说明新的代码实现 + +另请参见[始终从问题开始讨论](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/) . + +要了解 GitLab 战略营销部门如何将 GitLab 问题与[标签](../labels.html)和[问题板一起使用](../issue_board.html) ,请参阅有关[管理问题的承诺](https://www.youtube.com/watch?v=cuIHNintg1o&t=3)的视频. + +## Parts of an issue[](#parts-of-an-issue "Permalink") + +问题包含各种内容和元数据,从而在使用方式上具有很大的灵活性. 每个问题可以包含以下属性,尽管并非必须设置所有项目. + +| +* Content + * Title + * 描述和任务 + * 评论和其他活动 +* People + * Author + * Assignee(s) +* State + * 状态(打开或关闭) + * 健康状况(正常,需要注意或有危险) + * Confidentiality + * 任务(完成与未完成) + | +* 规划和跟踪 + * 里程碑 + * 截止日期 + * 重量 + * 时间跟踪 + * 标签 + * 投票数 + * 反应表情 + * 关联问题 + * 分配史诗 + * 唯一的发行号和 URL + | + |--|--| + | | | + +## Viewing and managing issues[](#viewing-and-managing-issues "Permalink") + +虽然您可以在[问题页面](#issue-page)上查看和管理问题的全部详细信息,但也可以一次使用" [问题列表"](#issues-list) ," [问题板"](#issue-boards) ,"问题参考"和" [Epic"](#epics-premium)处理多个问题 . + +针对问题的关键操作包括: + +* [Creating issues](managing_issues.html#create-a-new-issue) +* [Moving issues](managing_issues.html#moving-issues) +* [Closing issues](managing_issues.html#closing-issues) +* [Deleting issues](managing_issues.html#deleting-issues) + +### Issue page[](#issue-page "Permalink") + +[![Issue view](img/a15f0b2964d7094b019c5c33425ba75b.png)](img/issues_main_view.png) + +在问题的页面上,您可以查看问题的[所有方面,](issue_data_and_actions.html)如果有必要的[权限](../../permissions.html) ,可以对其进行修改. + +### Issues list[](#issues-list "Permalink") + +[![Project issues list view](img/854d722d9976d5b36956ddbe41ceae48.png)](img/project_issues_list_view.png) + +在"问题列表"上,可以从更高级别的组上下文中打开"问题列表",从而可以查看当前项目中的所有问题,也可以查看多个项目中的所有问题. 使用[搜索查询](../../search/index.html#filtering-issue-and-merge-request-lists)过滤问题列表,包括特定的元数据,例如标签,受让人,状态等. 从此视图,您还可以对显示的问题[进行批量](../bulk_editing.html)更改. + +有关更多信息,请参见[问题数据和操作](issue_data_and_actions.html)页面,以了解问题中所有字段和信息的摘要. + +您可以通过多种方式对问题列表进行排序,例如,通过问题创建日期,里程碑到期日期. 有关更多信息,请参见" [排序和排序问题列表"](sorting_issue_lists.html)页面. + +### Issue boards[](#issue-boards "Permalink") + +[![Issue board](img/fd79e7dae86040d6e1249793ae0b1502.png)](img/issue_board.png) + +[发行板](../issue_board.html)是看板,其栏目根据其标签或他们的受让人显示问题 . 它们提供了使用高度可定制的工作流来管理问题的灵活性. + +您可以在栏中重新排序问题. 如果将发行卡拖到另一列,则其关联的标签或受让人将更改以匹配新列的标签或受让人. 整个董事会也可以被筛选为仅包括某个里程碑或总体标签中的问题. + +### Design Management[](#design-management "Permalink") + +使用[Design Management](design_management.html) ,您可以将设计资产上载到问题并一起查看它们,以轻松地与团队共享和协作. + +### Epics[](#epics-premium "Permalink") + +[Epics](../../group/epics/index.html)通过跟踪跨项目和里程碑共享主题的问题组,使您可以更有效,更[轻松地](../../group/epics/index.html)管理项目组合. + +### Related issues[](#related-issues-starter "Permalink") + +您可以将两个问题标记为"相关",以便在查看一个问题时,另一个[问题](related_issues.html)始终列在" [相关问题"](related_issues.html)部分中. 这可以帮助显示重要的上下文,例如过去的工作,依赖项或重复项. + +### Crosslinking issues[](#crosslinking-issues "Permalink") + +您可以通过引用另一个问题中的问题来[交叉链接问题](crosslinking_issues.html) ,也可以通过包括其 URL 或 ID 来合并请求. 参考的问题在活动流中显示有关参考的消息,并带有指向其他问题或 MR 的链接. + +### Similar issues[](#similar-issues "Permalink") + +在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22866) . + +为了防止同一主题重复出现问题,GitLab 在创建新问题时会搜索相似的问题. + +在" **新问题"**页面中键入标题时,GitLab 会搜索用户在当前项目中有权访问的所有问题的标题和描述. 标题框下方最多显示五个类似问题(按最新更新排序). 请注意,此功能需要启用[GraphQL](../../../api/graphql/index.html) . + +[![Similar issues](img/95882a4976be6b95971ad0011fcd7617.png)](img/similar_issues.png) + +### Health status[](#health-status-ultimate "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/36427) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.10. + +为了帮助您跟踪问题的状态,您可以为每个问题分配一个状态,以标记按计划进行或需要注意以按时进行的工作: + +* **步入正轨** (green) +* **需要注意** (amber) +* **有一定风险** (red) + +[!["On track" health status on an issue](img/8308fbab7a41e24cad0bf6c358863ae3.png)](img/issue_health_status_dropdown_v12_10.png) + +然后,您可以在[Epic 树上](../../group/epics/index.html#issue-health-status-in-epic-tree-ultimate)查看问题状态. + +#### Disable issue health status[](#disable-issue-health-status "Permalink") + +此功能默认启用`:save_issuable_health_status`功能标志. 但是,在某些情况下,此功能与旧配置不兼容. 要在迁移配置时关闭该功能,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.disable(:save_issuable_health_status) +``` + +## Other Issue actions[](#other-issue-actions "Permalink") + +* [Create an issue from a template](../../project/description_templates.html#using-the-templates) +* [Set a due date](due_dates.html) +* [批量编辑问题](../bulk_editing.html) -从问题列表中选择多个问题,以批量更改其状态,受让人,里程碑或标签. +* [Import issues](csv_import.html) +* [Export issues](csv_export.html) +* [Issues API](../../../api/issues.html) +* 配置[外部问题跟踪器,](../../../integration/external-issue-tracker.html)例如 Jira,Redmine 或 Bugzilla. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/Issue\346\216\222\345\272\217.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/Issue\346\216\222\345\272\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..8a4f9eeaa11b08fa3faf5bd94e9cd0472682c34a --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/Issue\346\216\222\345\272\217.md" @@ -0,0 +1,17 @@ +# Issue排序[](#Issue排序 "Permalink") + +您可以通过多种方式对问题列表进行排序,包括按问题创建日期,里程碑到期日期等进行排序.可用的排序选项可以根据列表的上下文进行更改. 有关按发布优先级排序的信息,请参见[标签优先级](../labels.html#label-priority) . + +在组和项目问题清单中,也可以手动订购问题,类似于[问题委员会](../issue_board.html#issue-ordering-in-a-list) . + +## Manual sorting[](#manual-sorting "Permalink") + +在 GitLab 12.2 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/62178) . + +选择" **手动**排序"时,可以通过拖放问题来更改顺序. 更改后的订单将保留. 除了某些例外,访问同一列表的每个人都将看到重新排序的列表. + +每个问题都分配有一个相对顺序值,代表其相对于列表中其他问题的相对顺序. 当您拖放问题的重新排序时,其相对顺序值也会相应更改. + +此外,任何问题出现在手动排序的列表中时,更新的相对订单值将用于订购. 这意味着,如果您的 GitLab 实例内给定列表中的任何用户将问题`A`拖放到问题`B`上方,则随后将这两个问题随后加载到同一实例的任何列表中(可能是不同的)例如项目专案清单或其他群组专案清单),即可维持订购顺序. + +此顺序还会影响[发行板](../issue_board.html#issue-ordering-in-a-list) . 更改问题列表中的顺序会更改问题面板中的顺序,反之亦然. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\345\205\263\350\201\224Issue.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\345\205\263\350\201\224Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..c243fca76a952277064a180e24dc977a88504b50 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\345\205\263\350\201\224Issue.md" @@ -0,0 +1,41 @@ +# 关联Issue[](#关联issue "Permalink") + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +## From Commit Messages[](#from-commit-messages "Permalink") + +每次在提交消息中提及问题时,您都在开发工作流的两个阶段之间建立一种关系:问题本身以及与该问题相关的第一次提交. + +如果问题和您要提交的代码都在同一项目中,则只需在提交消息中添加`#xxx` ,其中`xxx`是问题编号. 如果它们不在同一项目中,则可以将完整的 URL 添加到问题中( `https://gitlab.com/<username>/<projectname>/issues/<xxx>` ). + +``` +git commit -m "this is my commit message. Ref #xxx" +``` + +or + +``` +git commit -m "this is my commit message. Related to https://gitlab.com/<username>/<projectname>/issues/<xxx>" +``` + +当然,您可以使用自己的 GitLab 实例的 URL 替换`gitlab.com` . + +**注意:**将您的第一次提交与您的问题相关联,对于通过[GitLab Cycle Analytics](https://about.gitlab.com/stages-devops-lifecycle/value-stream-analytics/)跟踪您的过程将非常重要. 它将测量计划该问题的实施所花费的时间,即从创建问题到进行第一次提交之间的时间. + +## From Related Issues[](#from-related-issues "Permalink") + +在合并请求中提及相关问题以及其他问题对于您的团队成员和协作者了解有关同一主题的未解决问题很有用. + +如上所述,当您[从提交消息中提到问题](#from-commit-messages)时,您可以执行此操作. + +当在问题`#222`提到问题`#111`时,问题`#111`还将在其跟踪器中显示一条通知. 也就是说,您只需提及一次关系即可在两个问题中均显示该关系. 在[合并请求中](#from-merge-requests)提及问题时,也是如此. + +[![issue mentioned in issue](img/b962444c71ad27ba05dfc6bfc69269f4.png)](img/mention_in_issue.png) + +## From Merge Requests[](#from-merge-requests "Permalink") + +Mentioning issues in merge request comments works exactly the same way as they do for [related issues](#from-related-issues). + +当您在合并请求说明中提到问题时,它将仅[将问题和合并请求链接在一起](#from-related-issues) . 此外,您还可以[将问题设置](managing_issues.html#closing-issues-automatically)为在合并请求合并后立即[自动关闭](managing_issues.html#closing-issues-automatically) . + +[![issue mentioned in MR](img/f36631c8d1fd9cb42fb7c58a495c24be.png)](img/mention_in_merge_request.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\210\252\346\255\242\346\227\245\346\234\237.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\210\252\346\255\242\346\227\245\346\234\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..e5640e01e186870924d5a717721397ce6ef4e293 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\210\252\346\255\242\346\227\245\346\234\237.md" @@ -0,0 +1,40 @@ +# 截止日期[](#截止日期 "Permalink") + +在 GitLab 8.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3614) . + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +Due dates can be used in issues to keep track of deadlines and make sure features are shipped on time. Users must have at least [Reporter permissions](../../permissions.html) to be able to edit them, but they can be seen by everybody with permission to view the issue. + +## Setting a due date[](#setting-a-due-date "Permalink") + +创建或编辑问题时,您可以单击**截止日期**字段,然后出现一个日历来帮助您选择所需的日期. 要删除日期,请选择日期文本并将其删除. 该日期与服务器的时区有关,而不与设置到期日期的用户的时区有关. + +[![Create a due date](img/36abd47af07b3b82f814e74be4619b4d.png)](img/due_dates_create.png) + +您还可以通过问题侧边栏设置截止日期. 展开边栏,然后单击" **编辑"**以选择截止日期或删除现有的日期. 更改将立即保存. + +[![Edit a due date via the sidebar](img/2dde5152cc249727c2d1016051d52131.png)](img/due_dates_edit_sidebar.png) + +设置截止日期的最后一种方法是直接在问题的描述或注释中使用[快速操作](../quick_actions.html) : + +* `/due <date>` :设置到期日. 有效的`<date>`示例包括`in 2 days` ( `this Friday`和`December 31st` . +* `/remove_due_date` :删除到期日. + +## Making use of due dates[](#making-use-of-due-dates "Permalink") + +具有到期日期的问题可以在问题跟踪器中轻松查看,并在它们旁边显示一个日期. 日期过期的问题将图标和日期标记为红色. 您可以从右侧的下拉菜单中按`Due soon` `Due later`或`Due later` `Due soon`问题对问题进行排序. + +[![Issues with due dates in the issues index page](img/371d1ca1640afbd824acc19b18bc40c9.png)](img/due_dates_issues_index_page.png) + +截止日期也会出现在您的[待办事项清单中](../../todos.html) . + +[![Issues with due dates in the todos](img/9d0b2e21b9be06d263674db132420176.png)](img/due_dates_todos.png) + +未解决问题的前一天,将向该问题的所有参与者发送电子邮件. 与截止日期一样,"截止日期之前的一天"由服务器的时区确定. + +截止日期的问题也可以导出为 iCalendar 供稿. 提要的 URL 可以添加到日历应用程序中. 通过单击以下页面上的**订阅日历**按钮可以访问该提要: + +* 在**分配的问题**页面上,该页面链接在 GitLab 标头的右侧 +* 在" **项目问题"**页面上 +* 在**组问题**页面上 \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\223\215\344\275\234Issue.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\223\215\344\275\234Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..155e599b006c7778743663e97e8f8ba43d5aac1b --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\223\215\344\275\234Issue.md" @@ -0,0 +1,231 @@ +# 操作Issue[](#操作Issue "Permalink") + +请通读[GitLab 问题文档](index.html)以获取有关 GitLab 问题的概述. + +## Parts of an Issue[](#parts-of-an-issue "Permalink") + +下图说明了问题的外观. 请注意,根据使用的 GitLab 版本和查看问题的用户权限,某些部分看起来可能会略有不同或不存在. + +您可以在一个屏幕上找到该问题的所有信息. + +[![Issue view](img/b6662e0dd306cb7949bbfd70db9b384c.png)](img/issues_main_view_numbered.png) + +* **1.** [New Issue, close issue (reopen issue, report issue)](#new-issue-close-issue-reopen-issue-report-issue) +* **2.** [To Do](#to-do) +* **3.** [Assignee](#assignee) + * **3.1.** [Multiple Assignees](#multiple-assignees-starter) +* **4.** [Epic](#epic-premium) +* **5.** [Milestone](#milestone) +* **6.** [Time tracking](#time-tracking) +* **7.** [Due date](#due-date) +* **8.** [Labels](#labels) +* **9.** [Weight](#weight-starter) +* **10.** [Confidentiality](#confidentiality) +* **11.** [Lock issue](#lock-issue) +* **12.** [Participants](#participants) +* **13.** [Notifications](#notifications) +* **14.** [Reference](#reference) +* **15.** [Edit](#edit) +* **16.** [Description](#description) +* **17.** [Mentions](#mentions) +* **18.** [Related Issues](#related-issues-starter) +* **19.** [Related Merge Requests](#related-merge-requests) +* **20.** [Award emoji](#award-emoji) +* **21.** [Show all activity](#show-all-activity) +* **22.** [Create Merge Request](#create-merge-request) +* **23.** [Issue history](#issue-history) + * [Activity sort order](#activity-sort-order) +* **24.** [Comments](#comments) +* **25.** [Submit comment, start a thread, or comment and close](#submit-comment-start-a-thread-or-comment-and-close) +* **26.** [Zoom meetings](#zoom-meetings) + +问题从状态(打开或关闭)开始,然后是作者,并包括许多其他功能,在上图中编号,以逐一解释其含义. + +当问题由其他用户更改时,问题屏幕的许多元素都会自动刷新,例如标题和说明. 注释和系统注释也会根据各种操作和内容更新自动更新. + +### New Issue, close issue (reopen issue, report issue)[](#new-issue-close-issue-reopen-issue-report-issue "Permalink") + +单击" **新问题"**将打开一个新窗口,以在同一项目中创建一个新问题. 单击**关闭问题**将关闭此问题,但不会被删除. 如果问题已经关闭,您仍然可以访问它,并且按钮将显示**Reopen issue** ,如下所示,您可以单击以重新打开问题. 重新开放的问题与其他任何问题都没有不同. + +[![Reopen Issue](img/136df5416c67f2d80606b4849658e289.png)](img/reopen-issue.png) + +如果您无权修改问题,则" **关闭问题"**按钮将替换为" **报告问题"** ,您可以单击该按钮以[提交](../../abuse_reports.html)有关该问题[的滥用情况报告](../../abuse_reports.html) . 如果您有权修改问题,但仅在关闭问题后,它也会显示. + +[![Report Abuse](img/16f0d7c3d19700b0e30aa6c1528acb91.png)](img/report-abuse.png) + +### To Do[](#to-do "Permalink") + +您可以在[GitLab 任务列表中](../../todos.html)添加问题或从中删除问题. + +执行此操作的按钮具有不同的标签,具体取决于问题是否已在"任务列表"中. 如果问题是: + +* 已在您的待办事项清单上:该按钮标有" **标记为已完成"** . 单击按钮以从您的任务列表中删除该问题. +* 不在您的待办事项清单上:该按钮标有**添加待办事项** . 单击按钮将问题添加到您的"任务列表"中. + +### Assignee[](#assignee "Permalink") + +可以将问题分配给: + +* Yourself. +* 另一个人. +* [Many people](#multiple-assignees-starter). + +可以根据需要频繁更改受让人. 想法是,受让人应对该问题负责,直到将其重新分配给其他人以解决该问题为止. 分配给某人后,它将显示在其分配的问题列表中. + +**提示:**如果用户不是该项目的成员,则只有他们自己创建问题后才能将其分配给他们. + +#### Multiple Assignees[](#multiple-assignees-starter "Permalink") + +通常,多个人会共同处理同一问题,而在拥有问题共享所有权的大型团队中,跟踪这些问题尤其困难. + +在[GitLab Starter 中](https://about.gitlab.com/pricing/) ,您可以[将多个人分配](multiple_assignees_for_issues.html)给一个问题. + +### Epic[](#epic-premium "Permalink") + +您可以将问题分配给[Epic](../../group/epics/index.html) ,从而可以更好地管理相关问题组. + +### Milestone[](#milestone "Permalink") + +选择一个[里程碑](../milestones/index.html) ,将问题归因于此. + +### Time tracking[](#time-tracking "Permalink") + +使用[GitLab 快速行动](../quick_actions.html)来[跟踪估计和花费在问题上的时间](../time_tracking.html) . 您可以添加解决问题[所需时间](../time_tracking.html#estimates)的[估计,](../time_tracking.html#estimates)还可以添加解决问题[所花费的时间](../time_tracking.html#time-spent) . + +### Due date[](#due-date "Permalink") + +当您的工作时间很紧时,重要的是要有一种方法来为实现和解决问题设置截止日期. 这可以在[截止日期](due_dates.html)元素中完成. 截止日期可以根据需要进行多次更改. + +### Labels[](#labels "Permalink") + +通过给它们加上[标签](../labels.html)来对问题进行分类. 它们有助于组织工作流程,并使您能够与[GitLab 发行委员会合作](index.html#issue-boards) . + +还可以为组标签分配问题,该组标签允许您对同一组内的所有项目使用相同的标签. 它们的工作原理完全相同,但可立即用于该组中的所有项目. + +**提示:**如果标签尚不存在,可以单击**编辑** ,它会打开一个下拉菜单,从中可以选择**创建新标签** . + +### Weight[](#weight-starter "Permalink") + +为问题[分配权重](issue_weight.html) . 使用较大的值表示完成此问题需要付出更多的努力. 仅允许正值或零. + +### Confidentiality[](#confidentiality "Permalink") + +您可以[将问题设置为机密](confidential_issues.html) . 设置后,未经授权的用户将无法访问该问题,也不会在项目问题委员会或问题列表中看到该问题. + +### Lock issue[](#lock-issue "Permalink") + +您可以[锁定问题中的线程](../../discussions/index.html#lock-discussions) ,以防止添加更多评论. + +### Participants[](#participants "Permalink") + +涉及该问题的所有用户. 他们要么参与了该[线程](../../discussions/index.html) ,要么在描述或线程中被提及. + +### Notifications[](#notifications "Permalink") + +单击该图标以启用/禁用该问题的[通知](../../profile/notifications.html#issue--epics--merge-request-events) . 如果您以任何方式参与该问题,它将自动启用. + +* **Enable**: If you are not a participant in the discussion on that issue, but want to receive notifications on each update, subscribe to it. +* **禁用** :如果您正在接收有关该问题的更新通知,但不再希望接收它们,请取消订阅. + +### Reference[](#reference "Permalink") + +* 快速"复制"按钮,这个问题的参考,它看起来像`foo/bar#xxx` ,其中`foo`是`username`或`groupname` , `bar`是`project-name` ,并且`xxx`是发行数量. + +### Edit[](#edit "Permalink") + +单击此图标可打开要编辑的问题,您将有权访问与创建问题时相同的所有字段. 如果用户没有编辑问题的权限,则不会显示此图标. + +### Description[](#description "Permalink") + +纯文本标题和问题描述位于问题页面的顶部中心. 该描述完全支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) ,允许许多格式选项. + +> [自 GitLab 12.6 起](https://gitlab.com/gitlab-org/gitlab/-/issues/10103) , [问题历史记录](#issue-history)中列出了对[问题](#issue-history)描述的更改. + +### Mentions[](#mentions "Permalink") + +您可以使用`@username`或`@groupname`提及您的 GitLab 实例中存在的用户或组,除非他们在配置文件设置中禁用了所有通知,否则它们将通过待办事项和电子邮件得到通知. 这是在[通知设置中](../../profile/notifications.html)控制的. + +自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们. + +**提示:**避免在问题中提及`@all`并合并请求,因为它会向该项目组的所有成员发送电子邮件通知,这可以解释为垃圾邮件. + +### Related Issues[](#related-issues-starter "Permalink") + +这里列出了被称为[相关问题的问题](related_issues.html) . 您也可以单击`+`添加更多相关问题. + +### Related Merge Requests[](#related-merge-requests "Permalink") + +该问题的描述或问题线程中提到的[合并请求](crosslinking_issues.html#from-merge-requests)在此处列为[相关合并请求](crosslinking_issues.html#from-merge-requests) . 另外,如果当前问题在另一个合并请求中被提及是相关的,则该合并请求将在此处列出. + +### Award emoji[](#award-emoji "Permalink") + +您可以为该问题授予表情符号. 有" thumbs_up"和" thumbs_down"的快捷方式,或者您可以单击浅灰色的" face"从可用的[GitLab 风味 Markdown Emoji](../../markdown.html#emoji)下拉列表中选择其他反应. + +**提示:在主题中**张贴" +1"作为评论会对该问题的所有订阅参与者造成垃圾邮件,会使主题混乱,因此不建议这样做. 授予表情符号是一种让他们知道您的反应而不会向其发送垃圾邮件的方法. + +### Show all activity[](#show-all-activity "Permalink") + +您可以通过单击**显示所有活动**并选择以下任一内容来过滤问题历史记录中**显示的内容** : + +* **仅显示评论** ,仅显示主题并隐藏问题的更新. +* **仅显示历史记录** ,它隐藏线程并且仅显示更新. + +Also: + +* 您可以使用`@username`或`@groupname`提及您的 GitLab 实例中存在的用户或组,除非他们已[禁用](#notifications)其配置文件设置中的[所有通知](#notifications) ,否则它们将通过待办事项和电子邮件得到[通知](#notifications) . +* 自己的提及(当前登录的用户)将以不同的颜色突出显示,使您可以轻松查看涉及到的评论,帮助您快速关注它们. + +[![Show all activity](img/6a23362ee367dd144c2c8ea315b8dde0.png)](img/show-all-activity.png) + +### Create Merge Request[](#create-merge-request "Permalink") + +在一个动作中创建一个新的分支和[**草稿**合并请求](../merge_requests/work_in_progress_merge_requests.html) . 默认情况下,该分支将被命名为`issuenumber-title` ,但是您可以选择任何名称,并且 GitLab 会验证该分支尚未被使用. 合并请求将自动继承问题的里程碑和标签,并设置为在合并时关闭问题. + +[![Create MR from issue](img/2a301148b56e04c50113445dc7280c15.png)](img/create_mr_from_issue.png) + +(可选)您可以选择仅创建一个[新分支](../repository/web_editor.html#create-a-new-branch-from-an-issue) ,以该问题命名. + +### Issue history[](#issue-history "Permalink") + +All comments and updates to the issue are tracked and listed here, but this can be filtered, as shown above. + +#### Activity sort order[](#activity-sort-order "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/14588) . + +您可以颠倒默认顺序,并与按顶部的最新项目排序的活动供稿进行交互. 您的首选项通过本地存储保存,并自动应用于您查看的每个问题. + +要更改活动排序顺序,请单击**最旧的第一个**下拉菜单,然后选择最旧或最新的项目以首先显示. + +[![Issue activity sort order dropdown button](img/db92110fba2588fed57b9af6bb2a381c.png)](img/issue_activity_sort_order_v12_10.png) + +### Comments[](#comments "Permalink") + +通过在其主题中发布评论来协作解决问题. 该文本字段还完全支持[GitLab 风味 Markdown](../../markdown.html#gitlab-flavored-markdown-gfm) . + +### Submit comment, start a thread, or comment and close[](#submit-comment-start-a-thread-or-comment-and-close "Permalink") + +撰写评论后,您可以: + +* 单击**评论** ,您的评论将被发布. +* 选择从下拉列表中**启动线程** ,并启动一个新[的线程](../../discussions/index.html#threaded-discussions)这个问题的主线程中讨论具体的点. 这邀请其他参与者直接回复您的主题,并将相关评论分组在一起. + +[![Comment or thread](img/9cb5bb737c82aad68bc28e2a7357e05c.png)](img/comment-or-discussion.png) + +您也可以从此处关闭问题,因此无需滚动到问题页面的顶部. + +### Zoom meetings[](#zoom-meetings "Permalink") + +在 GitLab 12.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/31103) . + +您可以使用`/zoom`和`/remove_zoom` [快速动作](../quick_actions.html)将[GitLab](../../markdown.html#gitlab-flavored-markdown-gfm) `/remove_zoom` [Markdown](../../markdown.html#gitlab-flavored-markdown-gfm)作为附件添加和删除 Zoom 会议. + +附加问题的[Zoom](https://zoom.us)呼叫会导致问题顶部顶部标题下方的" **加入 Zoom"会议**按钮. + +详细了解如何[添加或删除缩放会议](associate_zoom_meeting.html) . + +### Publish an issue[](#publish-an-issue-ultimate "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30906) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.1. + +If a status page application is associated with the project, you can use the `/publish` [quick action](../quick_actions.html) to publish the issue. Refer to [GitLab Status Page](../status_page/index.html) for more information. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\234\272\345\257\206Issue.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\234\272\345\257\206Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..f07a77678e6e1f2334bbb7f1751b3fb39a8a856b --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\346\234\272\345\257\206Issue.md" @@ -0,0 +1,85 @@ +# 机密 Issue[](#机密issue "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3282) . + +机密性问题是仅对具有[足够权限](#permissions-and-access-to-confidential-issues)的项目成员可见的问题. 开源项目和公司都可以使用机密问题来使安全漏洞不公开或防止意外泄漏. + +## Making an issue confidential[](#making-an-issue-confidential "Permalink") + +您可以在创建问题或编辑现有问题的过程中将其保密. + +创建新问题时,可以在文本区域下方的复选框中将问题标记为机密. 选中该框,然后点击" **提交问题"**按钮以创建问题. 对于现有问题,请对其进行编辑,选中机密复选框,然后点击**保存更改** . + +[![Creating a new confidential issue](img/43a1d5a081bb166e1d43d6e671f250e1.png)](img/confidential_issues_create.png) + +## Modifying issue confidentiality[](#modifying-issue-confidentiality "Permalink") + +有两种方法可以更改问题的机密性. + +第一种方法是编辑问题并标记/取消标记机密复选框. 保存问题后,它将更改问题的机密性. + +第二种方法是在边栏中找到"保密性"部分,然后单击" **编辑"** . 应该会出现一个弹出窗口,并为您提供打开或关闭机密性的选项. + +| 关闭机密性 | Turn on confidentiality | +| --- | --- | +| [![Turn off confidentiality](img/429e9751a8b0336bb8b7e3faab15a373.png)](img/turn_off_confidentiality.png) | [![Turn on confidentiality](img/3252759837ced64a222db48c62becdd3.png)](img/turn_on_confidentiality.png) | + +系统注释在问题注释中指出了从常规到机密(反之亦然)的每项更改. + +[![Confidential issues system notes](img/b66dc4137ac73e81c66e408cf9fcf391.png)](img/confidential_issues_system_notes.png) + +## Indications of a confidential issue[](#indications-of-a-confidential-issue "Permalink") + +> **注意:**如果您没有[足够的权限](#permissions-and-access-to-confidential-issues) ,您将根本看不到机密问题. + +有几件事在视觉上将机密问题与常规问题分开. 在问题索引页面视图中,您可以在标记为机密的问题旁边看到斜线图标. + +[![Confidential issues index page](img/8cebf5d928a8666adcfc25eccfeec89e.png)](img/confidential_issues_index_page.png) + +* * * + +同样,在问题内部,您可以在问题编号旁边看到斜线图标,但在注释区域中也有一个指示符,表明您正在评论的问题是机密的. + +[![Confidential issue page](img/ea665ae1d507d66f5a44d05ff9e32613.png)](img/confidential_issues_issue_page.png) + +侧边栏上还有一个指示保密性的指示器. + +| 机密问题 | 非机密问题 | +| --- | --- | +| [![Sidebar confidential issue](img/813e077e7aa22bb747b5f237984f1b22.png)](img/sidebar_confidential_issue.png) | [![Sidebar not confidential issue](img/6a33d33154553990ed15338a6f9c7b35.png)](img/sidebar_not_confidential_issue.png) | + +## Permissions and access to confidential issues[](#permissions-and-access-to-confidential-issues "Permalink") + +对于机密问题,有两种级别的访问权限. 一般规则是,机密问题仅对具有[Reporter 访问权限](../../permissions.html#project-members-permissions)的项目成员可见. 但是,来宾用户也可以创建机密问题,但只能查看他们自己创建的问题. + +对于非特权用户,机密问题也隐藏在搜索结果中. 例如,这是具有"维护者"和"访客"访问权限的用户分别在项目的搜索结果中看到的内容. + +| 维护者访问 | 来宾访问 | +| --- | --- | +| [![Confidential issues search master](img/30460bec4b16c49e4f5d5ccc7ac92601.png)](img/confidential_issues_search_master.png) | [![Confidential issues search guest](img/2bb7640bbe66bec0d43070f6f4053758.png)](img/confidential_issues_search_guest.png) | + +## Merge Requests for Confidential Issues[](#merge-requests-for-confidential-issues "Permalink") + +在 GitLab 12.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/58583) . + +为了帮助防止机密信息在解决机密问题的过程中从公共项目中泄露,可以通过创建私有派生的合并请求来解决机密问题. + +创建的合并请求将针对私有派生的默认分支,而不是公共上游项目的默认分支. 这样可以防止合并请求,分支和提交进入公共存储库,以及过早地泄露机密信息. 当准备好将机密提交公开时,可以通过打开从私有派生到公共上游项目的合并请求来完成. + +**最佳实践:**如果您在原始上游的同一组或子组中创建了一个长期的私有派生,则具有开发者成员身份的公共项目的所有用户在私有项目中也将具有相同的权限. 这样,所有有权查看机密问题的开发人员都将拥有简化的工作流程来解决这些问题. + +### How it works[](#how-it-works "Permalink") + +关于机密问题," **创建机密合并请求"**按钮可用. 单击它会打开一个下拉列表,您可以在其中选择**创建机密合并请求和分支**或**创建分支** : + +| 创建机密合并请求 | 创建分支 | +| --- | --- | +| [![Create Confidential Merge Request Dropdown](img/17d0ef7b105be8069a4258a758bd25bb.png)](img/confidential_mr_dropdown_v12_1.png) | [![Create Confidential Branch Dropdown](img/4f9a7d54cb4f539c606eaef8fd65b8ed.png)](img/confidential_mr_branch_dropdown_v12_1.png) | + +**项目**下拉列表包括用户所属的私有派生列表,至少是开发人员,并且合并请求已启用. + +每当" **分支名称"**和" **源(分支或标记)"**字段更改时,将检查目标或源分支的可用性. 两个分支都应在所选的私有派生中可用. + +通过单击**创建机密合并请求**按钮,GitLab 将在私有分支中创建分支和合并请求. 当选择**Create branch 时** ,GitLab 将仅创建分支. + +在私有分支中创建分支后,开发人员现在可以将代码推送到该分支以解决机密问题. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\347\256\241\347\220\206Issue.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\347\256\241\347\220\206Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..a5a7bc65340d71bd6d5374e21784130d7653571a --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/issues/\347\256\241\347\220\206Issue.md" @@ -0,0 +1,210 @@ +# 管理Issue[](#管理Issue "Permalink") + +[GitLab 问题](index.html)是在[GitLab](index.html)中就想法和计划工作进行协作的基本介质. [创建](#create-a-new-issue) , [移动](#moving-issues) , [关闭](#closing-issues)和[删除](#deleting-issues)是可以解决问题的关键操作. + +## Create a new issue[](#create-a-new-issue "Permalink") + +创建新问题时,系统将提示您填写问题的[数据和字段,](issue_data_and_actions.html)如下所示. 如果知道要分配给问题的值,则可以使用" [快速操作"](../quick_actions.html)功能输入值,而不用从列表中选择它们. + +创建问题时,您可以使用**Epic**下拉列表将其与当前组中的现有史诗相关联. + +### Accessing the New Issue form[](#accessing-the-new-issue-form "Permalink") + +有多种方法可以从项目中获取"新问题"表单: + +* 导航到**项目的仪表板** > **问题** > **新问题** : + + [![New issue from the issue list view](img/ee0396a1cb32367d7ba7c6f4a7262c7f.png)](img/new_issue_from_tracker_list.png) + +* 从项目中未**解决的问题**中,单击**"**新问题"以在同一项目中创建一个新问题: + + [![New issue from an open issue](img/eb851fa4a367081c86d0a2eac3bdca65.png)](img/new_issue_from_open_issue.png) + +* 在**项目的仪表板中** ,单击加号( **+** )以打开带有一些选项的下拉菜单. 选择" **新问题"**以在该项目中创建一个问题: + + [![New issue from a project's dashboard](img/04b61606f38fddf21d194ee3e13abaa3.png)](img/new_issue_from_projects_dashboard.png) + +* 在**发行板中** ,通过单击列表顶部的加号( **+** )创建新发行. 它为该项目打开了一个新问题,并预先标记了各自的列表. + + [![From the issue board](img/7f1a1847005ab07ba8259a9e67005213.png)](img/new_issue_from_issue_board.png) + +### Elements of the New Issue form[](#elements-of-the-new-issue-form "Permalink") + +> 在[GitLab Premium](https://about.gitlab.com/pricing/) 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/13847)了将新版本添加到史诗的功能. + +[![New issue from the issues list](img/94be136c7407855701b88eaded7db929.png)](img/new_issue_v13_1.png) + +创建新期刊时,可以填写以下字段: + +* Title +* Description +* 复选框以使问题保密 +* Assignee +* Weight +* Epic +* 截止日期 +* Milestone +* Labels + +### New issue from the group-level Issue Tracker[](#new-issue-from-the-group-level-issue-tracker "Permalink") + +转到"小组"仪表板,然后单击侧边栏中的" **问题** "以访问"小组"中所有项目的问题跟踪器. 使用页面右上方的下拉按钮,选择要添加问题的项目. + +[![Select project to create issue](img/31f0a42465a379e152ef6c0c7a6395e9.png)](img/select_project_from_group_level_issue_tracker.png) + +我们将跟踪您最近选择的项目,并将其用作下次访问的默认项目. 如果您主要是为同一项目创建问题,这应该可以节省大量时间和点击次数. + +[![Create issue from group-level issue tracker](img/75ca9285f50e058d4d85796b4d0b8e69.png)](img/create_issue_from_group_level_issue_tracker.png) + +### New issue via Service Desk[](#new-issue-via-service-desk-starter "Permalink") + +为您的项目启用[Service Desk](../service_desk.html)并提供电子邮件支持. 这样,当您的客户发送新电子邮件时,可以在适当的项目中创建一个新的问题,然后从那里进行后续操作. + +### New issue via email[](#new-issue-via-email "Permalink") + +如果您的 GitLab 实例配置了[传入电子邮件](../../../administration/incoming_email.html) ,则在项目的" **问题列表"**页面的底部会显示**一个"将新问题发送到该项目的电子邮件** "链接. + +[![Bottom of a project issues page](img/fd1e35952a7538923376d54325798b24.png)](img/new_issue_from_email.png) + +当您单击此链接时,将生成并显示一个电子邮件地址,该电子邮件地址**仅供您自己使用** ,以在此项目中创建问题. 您可以将此地址另存为联系人,以方便访问. + +**注意:**这是一个私人电子邮件地址,仅为您生成. **保密** ,因为任何知道它的人都可以创建问题或合并请求,就好像它们是您一样. 如果地址被盗用,或者您出于任何原因希望重新生成该地址,请再次单击"通过**电子邮件将新问题发送到此项目"** ,然后单击"重置"链接. + +向该地址发送电子邮件将以您的名字在此项目中创建一个新问题,其中: + +* The email subject becomes the issue title. +* 电子邮件正文成为问题描述. +* 支持[降价](../../markdown.html)和[快速行动](../quick_actions.html) . + +**注意:**在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 但是,仍支持较旧的格式,从而允许现有别名或联系人继续工作. + +### New issue via URL with prefilled fields[](#new-issue-via-url-with-prefilled-fields "Permalink") + +您可以使用 URL 中的查询字符串参数,使用预填充的字段值直接链接到给定项目的新问题页面. 这对于在外部 HTML 页面中嵌入 URL 以及在某些情况下(希望用户创建带有预填某些字段的问题)很有用. + +标题,描述,描述模板和机密字段可以使用此方法进行预填充. 您不能在同一 URL 中预先填写描述和描述模板字段(因为描述模板也会填充描述字段). + +| Field | URL 参数名称 | Notes | +| --- | --- | --- | +| title | `issue[title]` |   | +| description | `issue[description]` |   | +| 描述模板 | `issuable_template` |   | +| confidential | `issue[confidential]` | 参数值必须为`true`才能设置为机密 | + +请按照以下示例使用预填字段来形成新的问题 URL. + +* 对于 GitLab 社区版项目中的新问题,带有预填充的标题和预填充的描述,URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issue[description]=Research idea` +* 对于 GitLab 社区版项目中的新问题,带有预填充的标题和预填充的描述模板,URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issuable_template=Research proposal` +* 对于 GitLab 社区版项目中的新问题,其中包含预填充的标题,预填充的描述以及机密标志集,其 URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issue[description]=Research idea&issue[confidential]=true` + +## Moving Issues[](#moving-issues "Permalink") + +移动问题会将其复制到新位置(项目),并在旧项目中将其关闭,但不会被删除. 这两个问题上还将添加一个系统注释,以指示它来自何处. + +The “Move issue” button is at the bottom of the right-sidebar when viewing the issue. + +[![move issue - button](img/1bc92f79d9645e6ae51aff10100e5c0d.png)](img/sidebar_move_issue.png) + +### Moving Issues in Bulk[](#moving-issues-in-bulk "Permalink") + +如果您具有高级技术技能,也可以在 Rails 控制台中将所有问题从一个项目批量转移到另一个项目. 下面的脚本会将所有问题从一个项目移至另一个状态尚未**关闭的项目** . + +要访问 rails 控制台,请在 GitLab 服务器上运行`sudo gitlab-rails console`并运行以下脚本. 请确保将**project** , **admin_user**和**target_project**更改为您的值. 我们也建议您在尝试对控制台进行任何更改之前先[创建备份](../../../raketasks/backup_restore.html#back-up-gitlab) . + +``` +project = Project.find_by_full_path('full path of the project where issues are moved from') +issues = project.issues +admin_user = User.find_by_username('username of admin user') # make sure user has permissions to move the issues +target_project = Project.find_by_full_path('full path of target project where issues moved to') + +issues.each do |issue| + if issue.state != "closed" && issue.moved_to.nil? + Issues::MoveService.new(project, admin_user).execute(issue, target_project) + else + puts "issue with id: #{issue.id} and title: #{issue.title} was not moved" + end +end; nil +``` + +## Closing issues[](#closing-issues "Permalink") + +当您确定问题已解决或不再需要时,可以使用"关闭"按钮关闭该问题: + +[![close issue - button](img/4635aba96009dfb3ab93ab6f4b92ee4c.png)](img/button_close_issue.png) + +您还可以通过将发行卡从其发行版列表中拖放到" **已关闭"**列表中来**关闭** [发行板中](../issue_board.html)的发行. + +[![close issue from the Issue Board](img/0f7aab3f307e6b54ebe4d00d94f1da0a.png)](img/close_issue_from_board.gif) + +### Closing issues automatically[](#closing-issues-automatically "Permalink") + +**注意:**由于性能原因,从现有存储库的第一次推送将禁用自动问题关闭. + +当提交或合并请求解决了一个或多个问题时,当提交或合并请求到达项目的默认分支时,可能会自动关闭这些问题. + +如果提交消息或合并请求描述包含与[定义的模式](#default-closing-pattern)匹配的文本,则匹配文本中引用的所有问题均将关闭. 将提交推送到项目的[**默认**分支时](../repository/branches/index.html#default-branch) ,或者将提交或合并请求合并到其中时,就会发生这种情况. + +例如,如果合并请求描述中包含`Closes #4, #6, Related to #5`则合并 MR 时问题`#4`和`#6`将自动关闭,但不会合并`#5` . 将" `Related to` `#5`标记[相关"](related_issues.html)用作[相关问题](related_issues.html) ,但不会自动关闭. + +[![merge request closing issue when merged](img/fee3cc5116f884089066af3908605cbe.png)](img/merge_request_closes_issue.png) + +如果问题与 MR 位于不同的存储库中,请添加问题的完整 URL: + +``` +Closes #4, #6, and https://gitlab.com/<username>/<projectname>/issues/<xxx> +``` + +#### Default closing pattern[](#default-closing-pattern "Permalink") + +如果未指定,将使用如下所示的默认问题关闭模式: + +``` +\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+))+) +``` + +这将转换为以下关键字: + +* 关闭,关闭,关闭,关闭,关闭,关闭,关闭,关闭 +* 修正,修正,修正,修正,修正,修正,修正,修正 +* 解决,解决,解决,解决,解决,解决,解决,解决 +* 实施,实施,实施,实施,实施,实施,实施,实施 + +请注意, `%{issue_ref}`是在 GitLab 的源代码中定义的复杂正则表达式,可以匹配对以下内容的引用: + +* 本地问题( `#123` ). +* 跨项目问题( `group/project#123` ). +* 指向问题的链接( `https://gitlab.example.com/group/project/issues/123` ). + +例如以下提交消息: + +``` +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://gitlab.example.com/group/otherproject/issues/23. +``` + +将在提交被推送到的项目中关闭`#18` , `#19` , `#20`和`#21` ,以及`group/otherproject` `#22`和`#23` . `#17`将不会关闭,因为它与模式不匹配. 当从命令行与`git commit -m`一起使用时,它可以处理多行提交消息以及单行代码. + +#### Disabling automatic issue closing[](#disabling-automatic-issue-closing "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19754) . + +可以在[项目的存储库设置中](../settings/index.html)针对每个项目禁用自动关闭问题功能. 引用的问题仍将按原样显示,但不会自动关闭. + +[![disable issue auto close - settings](img/a3802569c81d8f8dd179fd218322a4ca.png)](img/disable_issue_auto_close.png) + +这仅适用于受新合并请求或提交影响的问题. 已经解决的问题仍然保持原样. 禁用自动关闭的问题仅影响到项目*中*的合并请求,并不会阻止其他项目从通过跨项目的问题,将其关闭. + +#### Customizing the issue closing pattern[](#customizing-the-issue-closing-pattern-core-only "Permalink") + +为了更改默认的问题关闭模式,GitLab 管理员必须编辑安装的[`gitlab.rb`或`gitlab.yml`文件](../../../administration/issue_closing_pattern.html) . + +## Deleting issues[](#deleting-issues "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2982) + +具有[项目所有者权限的](../../permissions.html)用户可以通过编辑问题并单击删除按钮来删除问题. + +[![delete issue - button](img/51e7561422b1e74237ea14e916cffc78.png)](img/delete_issue.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/wiki.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/wiki.md" new file mode 100644 index 0000000000000000000000000000000000000000..8088b7658c39b7c68a24af9b899a4d3ca0b27c50 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/wiki.md" @@ -0,0 +1,2 @@ +# wiki + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..28a60c4e0b378c6734a8b8726b4f8118d58cc52e --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223.md" @@ -0,0 +1,181 @@ +# 代码仓库[](#代码仓库 "Permalink") + +[存储库](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)是用于将代码库存储在 GitLab 中并通过版本控制对其进行更改的存储库. 存储库是[项目的](../index.html)一部分,它具有许多其他功能. + +## Create a repository[](#create-a-repository "Permalink") + +要创建一个新的存储库,您需要做的就是[创建一个新项目](../../../gitlab-basics/create-project.html)或[创建](../../../gitlab-basics/create-project.html) [一个现有项目](forking_workflow.html) . + +创建新项目后,您可以通过 UI(请参阅以下部分)或通过命令行添加新文件. 要从命令行添加文件,请遵循创建新项目时在屏幕上显示的说明,或在[命令行基础](../../../gitlab-basics/start-using-git.html)文档中通读它们. + +> **重要提示:**出于安全原因,强烈建议您在使用命令行时[通过 SSH 与 GitLab 连接](../../../ssh/README.html) . + +## Files[](#files "Permalink") + +使用存储库将文件存储在 GitLab 中. 在[GitLab 12.10 及更高版本中](https://gitlab.com/gitlab-org/gitlab/-/issues/33806) ,您将在存储库的文件树中根据其扩展名在文件名旁边看到一个图标: + +[![Repository file icons](img/8489a6c45ad75964ea7b4b54b9d9fcaa.png)](img/file_ext_icons_repo_v12_10.png) + +### Create and edit files[](#create-and-edit-files "Permalink") + +通过将文件推送到 GitLab,将代码库托管在 GitLab 存储库中. 您可以使用用户界面(UI),也可以[通过命令行将](../../../gitlab-basics/command-line-commands.html#start-working-on-your-project)本地计算机与 GitLab 连接. + +要配置[GitLab CI / CD](../../../ci/README.html)来构建,测试和部署代码,请在存储库的根目录中添加一个名为[`.gitlab-ci.yml`](../../../ci/quick_start/README.html)的文件. + +**从用户界面:** + +GitLab 的用户界面允许您执行许多 Git 命令,而无需触摸命令行. 即使您定期使用命令行,有时[通过 GitLab UI](web_editor.html)也更容易做到: + +* [Create a file](web_editor.html#create-a-file) +* [Upload a file](web_editor.html#upload-a-file) +* [File templates](web_editor.html#template-dropdowns) +* [Create a directory](web_editor.html#create-a-directory) +* [Start a merge request](web_editor.html#tips) +* [Find file history](git_history.html) +* [Identify changes by line (Git blame)](git_blame.html) + +**在命令行中:** + +要开始使用命令行,请通读[命令行基础文档](../../../gitlab-basics/command-line-commands.html) . + +### Find files[](#find-files "Permalink") + +使用 GitLab 的[文件查找器](file_finder.html)在存储库中搜索文件. + +### Supported markup languages and extensions[](#supported-markup-languages-and-extensions "Permalink") + +GitLab 支持多种标记语言(有时称为[轻量标记语言](https://en.wikipedia.org/wiki/Lightweight_markup_language) ),您可以将其用于存储库中文件的内容. 它们主要用于文档目的. + +只需为文件选择正确的扩展名,GitLab 就会根据标记语言来渲染它们. + +| 标记语言 | Extensions | +| --- | --- | +| 纯文本 | `txt` | +| [Markdown](../../markdown.html) | `mdown`, `mkd`, `mkdn`, `md`, `markdown` | +| [reStructuredText](https://docutils.sourceforge.io/rst.html) | `rst` | +| [AsciiDoc](../../asciidoc.html) | `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` | + +### Repository README and index files[](#repository-readme-and-index-files "Permalink") + +当存储库中存在`README`或`index`文件时,它的内容将由 GitLab 自动预渲染,而无需打开它. + +它们可以是纯文本,也可以具有[受支持的标记语言](#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)文件用于许多领域的交互式计算,并且包含用户会话的完整记录,并包括代码,叙述性文本,方程式和丰富的输出. + +[Read how to use Jupyter notebooks with GitLab.](jupyter_notebooks/index.html) + +### OpenAPI viewer[](#openapi-viewer "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19515) . + +如果文件名包含`openapi`或`swagger`且扩展名为`yaml` , `yml`或`json` ,则 GitLab 可以使用其文件查看器呈现 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. 在 GitLab 的用户界面中导航至存储库中的 OpenAPI 文件. +2. 单击位于"显示源"和"编辑"按钮之间的"显示 OpenAPI"按钮(找到 OpenAPI 文件后,它将替换"显示渲染的文件"按钮). + +## Branches[](#branches "Permalink") + +有关详细信息,请参见[分支](branches/index.html) . + +## Commits[](#commits "Permalink") + +[提交更改时](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository) ,您会将这些更改引入分支机构. 通过命令行,您可以在提交之前多次提交. + +* **提交消息:**提交消息对于标识正在更改的内容以及更重要的原因至关重要. 在 GitLab 中,您可以将关键字添加到提交消息中,以执行以下操作之一: + * **触发 GitLab CI / CD 管道:**如果您的项目配置有[GitLab CI / CD](../../../ci/README.html) ,则将在每次推送而不是每次提交时触发一个管道. + * **跳过管道:**您可以在提交消息中添加关键字[`[ci skip]`](../../../ci/yaml/README.html#skip-pipeline) ,GitLab CI / CD 将跳过该管道. + * **交叉链接问题和合并请求:** [交叉链接](../issues/crosslinking_issues.html#from-commit-messages)非常适合跟踪工作流程中与之相关的内容. 如果您在提交消息中提到问题或合并请求,它们将显示在各自的线程上. +* **樱桃选择提交:**在 GitLab 中,您可以直接从 UI [樱桃选择提交](../merge_requests/cherry_pick_changes.html#cherry-picking-a-commit) . +* **还原提交:**轻松[将提交](../merge_requests/revert_changes.html#reverting-a-commit)从 UI [还原](../merge_requests/revert_changes.html#reverting-a-commit)到所选分支. +* **签署提交:**使用 GPG [签署您的提交](gpg_signed_commits/index.html) . + +## Project and repository size[](#project-and-repository-size "Permalink") + +在项目的" **详细信息"**页面上报告项目的大小. 报告的大小最多每 15 分钟更新一次,因此可能无法反映最近的活动. 显示的文件大小包括存储库文件,工件和 LFS. + +由于压缩,内务处理和其他因素,每个项目的项目规模可能会略有不同. + +[储存库大小限制](../../admin_area/settings/account_and_limit_settings.html)可以由管理员设置. GitLab.com 的存储库大小限制[由 GitLab 设置](../../gitlab_com/index.html#repository-size-limit) . + +## Contributors[](#contributors "Permalink") + +代码库的所有贡献者都显示在项目的**设置>贡献者下** . + +它们是从协作者中以最少的提交次数排序的,并显示在一个漂亮的图形上: + +[![contributors to code](img/d69ab181c07176aa054b0ceac08b702c.png)](img/contributors_graph.png) + +## Repository graph[](#repository-graph "Permalink") + +存储库图形以可视方式显示存储网络的历史记录,包括分支和合并. 这可以帮助您可视化存储库中使用的 Git 流策略: + +[![repository Git flow](img/a1efb7c23a97e2901852465c9168914f.png)](img/repo_graph.png) + +在您项目的**Repository> Graph**下找到它. + +## Repository Languages[](#repository-languages "Permalink") + +对于每个存储库的默认分支,GitLab 将确定使用了哪种编程语言,并将其显示在项目页面上. 如果缺少此信息,将在更新项目上的默认分支后添加. 此过程最多可能需要 5 分钟. + +[![Repository Languages bar](img/e2e835cd5cd1be1afaa876fde2475fe5.png)](img/repository_languages_v12_2.gif) + +Not all files are detected, among others; documentation, vendored code, and most markup languages are excluded. This behavior can be adjusted by overriding the default. For example, to enable `.proto` files to be detected, add the following to `.gitattributes` in the root of your repository. + +``` +*.proto linguist-detectable=true +``` + +## Locked files[](#locked-files-premium "Permalink") + +使用[文件锁定](../file_lock.html)来锁定文件,以防止发生任何冲突的更改. + +## Repository’s API[](#repositorys-api "Permalink") + +您可以通过[存储库 API](../../../api/repositories.html)访问您的[存储库](../../../api/repositories.html) . + +## Clone in Apple Xcode[](#clone-in-apple-xcode "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/45820) in GitLab 11.0 + +现在,可以使用位于用于克隆项目的 Git URL 旁边的新的" **在 Xcode 中打开"**按钮**在 Xcode 中**克隆包含`.xcodeproj`或`.xcworkspace`目录的项目. 该按钮仅在 macOS 上显示. + +## Download Source Code[](#download-source-code "Permalink") + +在 GitLab 11.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/24704)了对目录下载的支持. + +可以从 UI 下载存储在存储库中的源代码. 单击下载图标,将打开一个下拉列表,其中包含下载以下内容的链接: + +[![Download source code](img/0f88b0e1a49600472f2922218cec1ed7.png)](img/download_source_code.png) + +* **源代码:**允许用户在他们当前正在查看的分支上下载源代码. 可用扩展名: `zip` , `tar` , `tar.gz`和`tar.bz2` . +* **目录:**仅在查看子目录时显示. 这使用户可以下载他们当前正在查看的特定目录. 也可以在`zip` , `tar` , `tar.gz`和`tar.bz2` . +* **工件:**允许用户下载最新 CI 构建的工件. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..f055d590cc0afc72d6585775e1c15dcd0fdfe857 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/GPG\347\255\276\345\220\215\346\217\220\344\272\244.md" @@ -0,0 +1,236 @@ +# GPG签名提交[](#GPG签名提交 "Permalink") + +版本历史 + +* 在 GitLab 9.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/9546) . +* 在 GitLab 10.1 中添加了子项支持. + +您可以使用 GPG 密钥对在 GitLab 存储库中进行的 Git 提交进行签名. 如果可以验证提交者的身份,则已签名的提交将标记为" **已**验证". 为了验证提交者的身份,GitLab 需要他们的公共 GPG 密钥. + +**注意:**术语 GPG 用于所有与 OpenPGP / PGP / GPG 相关的材料和实现. + +目前尚不支持通过 GPG 验证的标签. + +有关 GPG 的更多详细信息,请参见[进一步阅读](#further-reading)部分. + +## How GitLab handles GPG[](#how-gitlab-handles-gpg "Permalink") + +GitLab 使用其自己的密钥环来验证 GPG 签名. 它不访问任何公钥服务器. + +对于要由 GitLab 验证的提交: + +* 提交者必须具有 GPG 公钥/私钥对. +* 提交者的公钥必须已上传到其 GitLab 帐户. +* GPG 密钥中的一封电子邮件必须与提交者在 GitLab 中使用的**经过验证的**电子邮件地址匹配. +* 提交者的电子邮件地址必须与 GPG 密钥中验证的电子邮件地址匹配. + +## Generating a GPG key[](#generating-a-gpg-key "Permalink") + +如果您还没有 GPG 密钥,则以下步骤将帮助您入门: + +1. 为您的操作系统[安装 GPG](https://www.gnupg.org/download/index.html) . 如果您的操作系统具有`gpg2`安装,更换`gpg`与`gpg2`在下面的命令. +2. 使用以下命令生成私钥/公钥对,这将产生一系列问题: + + ``` + gpg --full-gen-key + ``` + + **注意:**在某些情况下,例如 Windows 和其他 macOS 版本上的 Gpg4win,此处的命令可能是`gpg --gen-key` . +3. 第一个问题是可以使用哪种算法. 选择所需的类型或按`Enter 键`选择默认类型(RSA 和 RSA): + + ``` + 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` : + + ``` + RSA keys may be between 1024 and 4096 bits long. + What keysize do you want? (2048) 4096 + Requested keysize is 4096 bits + ``` + +5. 指定密钥的有效期. 这是主观的,您可以使用默认值,该值永远不会过期: + + ``` + 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`确认您给出的答案是正确的: + + ``` + Is this correct? (y/N) y + ``` + +7. 输入您的真实姓名,与此键关联的电子邮件地址(应与您在 GitLab 中使用的经过验证的电子邮件地址匹配)和可选注释(按`Enter`跳过): + + ``` + 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 --list-secret-keys --keyid-format LONG <your_email> + ``` + + 将`<your_email>`替换为您在上面输入的电子邮件地址. + +10. 复制以`sec`开头的 GPG 密钥 ID. 在以下示例中,即`30F2B65B9246B6CA` : + + ``` + sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] + D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA + uid [ultimate] Mr. Robot <your_email> + ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] + ``` + +11. 导出该 ID 的公共密钥(替换上一步中的密钥 ID): + + ``` + gpg --armor --export 30F2B65B9246B6CA + ``` + +12. 最后,复制公钥并将其[添加到您的个人资料设置中](#adding-a-gpg-key-to-your-account) + +## Adding a GPG key to your account[](#adding-a-gpg-key-to-your-account "Permalink") + +**注意:**添加密钥后,就无法对其进行编辑,只能将其删除. 如果粘贴无效,则必须删除有问题的密钥并重新添加. + +您可以在个人资料的设置中添加 GPG 密钥: + +1. 点击右上角的头像,然后转到**"设置"** . + + [![Settings dropdown](img/5e2e81b44d67af322056491cf32bb8da.png)](../../../profile/img/profile_settings_dropdown.png) + +2. 导航至**GPG 密钥**标签,然后将您的*公共*密钥粘贴到"密钥"框中. + + [![Paste GPG public key](img/d04d999de9102632af46c867821c47c3.png)](img/profile_settings_gpg_keys_paste_pub.png) + +3. 最后,单击**添加键**将其添加到 GitLab. 您将能够看到其指纹,相应的电子邮件地址和创建日期. + + [![GPG key single page](img/8a56e678752a9bd9def98422dee92f3e.png)](img/profile_settings_gpg_keys_single_key.png) + +## Associating your GPG key with Git[](#associating-your-gpg-key-with-git "Permalink") + +[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,是时候告诉 Git 使用哪个密钥了. + +1. 使用以下命令列出您刚刚创建的私密 GPG 密钥: + + ``` + gpg --list-secret-keys --keyid-format LONG <your_email> + ``` + + 将`<your_email>`替换为您在上面输入的电子邮件地址. + +2. 复制以`sec`开头的 GPG 密钥 ID. 在以下示例中,即`30F2B65B9246B6CA` : + + ``` + sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] + D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA + uid [ultimate] Mr. Robot <your_email> + ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] + ``` + +3. 告诉 Git 使用该密钥对提交进行签名: + + ``` + 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 + ``` + +## Signing commits[](#signing-commits "Permalink") + +[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,您可以开始对提交进行签名: + +1. 像以前一样提交,唯一的区别是添加了`-S`标志: + + ``` + git commit -S -m "My commit msg" + ``` + +2. 询问时输入 GPG 密钥的密码. +3. 推送至 GitLab 并检查您的提交[是否已通过验证](#verifying-commits) . + +如果您不想在每次提交时都键入`-S`标志,则可以告诉 Git 自动签名您的提交: + +``` +git config --global commit.gpgsign true +``` + +## Verifying commits[](#verifying-commits "Permalink") + +1. 在项目或[合并请求中](../../merge_requests/index.html) ,导航到" **提交"**选项卡. 签名的提交将显示包含" Verified"或" Unverified"的徽章,具体取决于 GPG 签名的验证状态. + + [![Signed and unsigned commits](img/7d08a10bdee492162fdb554fb3033f0d.png)](img/project_signed_and_unsigned_commits.png) + +2. 通过单击 GPG 徽章,将显示签名的详细信息. + + [![Signed commit with verified signature](img/544adf1331ba8dc0c6391bf07ba6df8c.png)](img/project_signed_commit_verified_signature.png) + + [![Signed commit with verified signature](img/cc6935399d2235840119ad00eb778fc9.png)](img/project_signed_commit_unverified_signature.png) + +## Revoking a GPG key[](#revoking-a-gpg-key "Permalink") + +撤消密钥将**取消验证**已签名的提交. 使用此密钥验证的提交将变为未验证状态. 撤销此密钥后,将来的提交也将保持不变. 如果您的密钥已被盗用,则应使用此操作. + +撤销 GPG 密钥: + +1. 点击右上角的头像,然后转到**"设置"** . +2. 导航到**GPG 键**标签. +3. 单击您要删除的 GPG 键**旁边的撤消** . + +## Removing a GPG key[](#removing-a-gpg-key "Permalink") + +删除密钥**不会**取消**验证**已签名的提交. 使用此密钥验证的提交将保持验证状态. 删除此密钥后,只有未按下的提交才会保持未验证状态. 要取消验证已签名的提交,您需要从您的帐户中[撤销关联的 GPG 密钥](#revoking-a-gpg-key) . + +要从您的帐户中删除 GPG 密钥,请执行以下操作: + +1. 点击右上角的头像,然后转到**"设置"** . +2. 导航到**GPG 键**标签. +3. 单击您要删除的 GPG 密钥旁边的垃圾桶图标. + +## Rejecting commits that are not signed[](#rejecting-commits-that-are-not-signed-premium "Permalink") + +您可以将您的项目配置为拒绝不是通过[推送规则进行](../../../../push_rules/push_rules.html) GPG 签名的提交. + +## GPG signing API[](#gpg-signing-api "Permalink") + +了解如何[通过 API 通过提交获取 GPG 签名](../../../../api/commits.html#get-gpg-signature-of-a-commit) . + +## Further reading[](#further-reading "Permalink") + +有关 GPG 的更多详细信息,请参见: + +* [Git Tools - Signing Your Work](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work) +* [Managing OpenPGP Keys](https://riseup.net/en/security/message-security/openpgp/gpg-keys) +* [OpenPGP Best Practices](https://riseup.net/en/security/message-security/openpgp/best-practices) +* [Creating a new GPG key with subkeys](https://www.void.gr/kargig/blog/2013/12/02/creating-a-new-gpg-key-with-subkeys/) (advanced) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..ce34a2bd7769474eb8b59cc74d11db0e5d973dba --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\207\217\345\260\221\344\273\223\345\272\223\345\244\247\345\260\217.md" @@ -0,0 +1,202 @@ +# 减少仓库大小[](#减少仓库大小 "Permalink") + +随着时间的流逝,Git 存储库变得越来越大. 将大文件加到 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/). + +**危险:**重写存储库历史记录是一种破坏性操作. 在开始之前,请确保备份您的存储库. 备份存储库的最佳方法是[导出项目](../settings/import_export.html#exporting-a-project-and-its-data) .**注意:** Git LFS 文件只能由管理员使用[Rake 任务](../../../raketasks/cleanup.html)删除. [计划](https://gitlab.com/gitlab-org/gitlab/-/issues/223621)消除此限制. + +## Purge files from repository history[](#purge-files-from-repository-history "Permalink") + +为了使克隆项目更快,请重写分支和标签以删除不需要的文件. + +1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . + +2. 使用`--bare`克隆存储库的新副本: + + ``` + git clone --bare https://example.gitlab.com/my/project.git + ``` + +3. 使用`git filter-repo` ,从存储库的历史记录中清除所有文件. + + 要清除大文件,可以使用`--strip-blobs-bigger-than`选项: + + ``` + git filter-repo --strip-blobs-bigger-than 10M + ``` + + 要清除使用 Git LFS 存储的大文件,可以使用`--blob--callback`选项. 下面的示例使用回调从 Git LFS 指针读取文件大小,并删除大于 10MB 的文件. + + ``` + 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`选项: + + ``` + 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`会删除所有遥控器. 要为您的项目还原遥控器,请运行: + + ``` + git remote add origin https://example.gitlab.com/<namespace>/<project_name>.git + ``` + +5. 强制推送更改以覆盖 GitLab 上的所有分支: + + ``` + git push origin --force --all + ``` + + [受保护的分支](../protected_branches.html)将导致此操作失败. 要继续,您必须删除分支保护,推送,然后重新启用受保护的分支. + +6. 要从标记的发行版中删除大文件,请强制将更改推送到 GitLab 上的所有标记: + + ``` + git push origin --force --tags + ``` + + [受保护的标签](../protected_tags.html)将导致此操作失败. 要继续,您必须删除标签保护,推送,然后重新启用受保护的标签. + +7. 手动执行[项目整理](../../../administration/housekeeping.html#manual-housekeeping) + +**注意:**为提高性能而缓存了项目统计信息. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降. + +## Purge files from GitLab storage[](#purge-files-from-gitlab-storage "Permalink") + +要减少 GitLab 中存储库的大小,必须删除 GitLab 内部引用以包含大文件的提交. 在完成这些步骤之前,请[从存储库历史记录中清除文件](#purge-files-from-repository-history) . + +除了[分支](branches/index.html)和标签(这是一种 Git 引用)之外,GitLab 还会自动创建其他引用. 这些引用可防止在查看合并请求时死链接到提交或丢失差异. [存储库清理](#repository-cleanup)可用于从 GitLab 中删除它们. + +以下内部参考文献不做广告: + +* `refs/merge-requests/*`用于合并请求. +* `refs/pipelines/*` for [pipelines](../../../ci/pipelines/index.html#troubleshooting-fatal-reference-is-not-a-tree). +* `refs/environments/*`用于环境. + +这意味着在获取时通常不包含它们,这使得获取速度更快. 另外, `refs/keep-around/*`是隐藏的 refs,以防止与讨论相关的提交被删除并且根本无法被获取. + +但是,可以从项目导出内的 Git 捆绑包访问这些引用. + +1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . + +2. [从项目中](../settings/import_export.html#exporting-a-project-and-its-data)生成一个新的[导出](../settings/import_export.html#exporting-a-project-and-its-data)并下载. + +3. 使用`tar`解压缩备份: + + ``` + tar xzf project-backup.tar.gz + ``` + + 这将包含一个由[`git bundle`](https://git-scm.com/docs/git-bundle)创建的`project.bundle`文件. + +4. 从包中克隆存储库的新副本: + + ``` + 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`选项: + + ``` + git filter-repo --strip-blobs-bigger-than 10M + ``` + + 要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项. + + ``` + 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[](#repository-cleanup "Permalink") + +在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19376) . + +仓库清理允许您上传对象的文本文件,并且 GitLab 将删除对这些对象的内部 Git 引用. 您可以使用[`git filter-repo`](https://github.com/newren/git-filter-repo)生成对象列表(在`commit-map`文件中),该对象列表可与存储库清理一起使用. + +要清理存储库: + +1. 转到存储库的项目. +2. 导航 **设置>存储库** . +3. 上载对象列表. 例如,一个`commit-map`文件. +4. Click **开始清理**. + +这将: + +* 删除所有对旧提交的内部 Git 引用. +* 针对存储库运行`git gc` . + +完成后,您将收到一封电子邮件. + +When using repository cleanup, note: + +* 项目统计信息已缓存. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降. +* 客房部修剪 2 周以上的松散物品. 这意味着在最近 2 周内添加的对象将不会立即删除. 如果您有权访问[Gitaly](../../../administration/gitaly/index.html)服务器,则可以运行`git gc --prune=now`立即修剪所有松散的对象. +* 此过程将从 GitLab 的缓存和数据库中删除一些重写提交的副本,但是覆盖范围仍然存在许多空白,并且某些副本可能会无限期地存在. [清除实例缓存](../../../administration/raketasks/maintenance.html#clear-redis-cache)可能有助于删除其中的一些[实例](../../../administration/raketasks/maintenance.html#clear-redis-cache) ,但出于安全考虑,不应依赖它! + +## Storage limits[](#storage-limits "Permalink") + +储存库大小限制: + +* 可以[由管理员](../../admin_area/settings/account_and_limit_settings.html#repository-size-limit-starter-only)在自我管理实例上设置. +* Are [set for GitLab.com](../../gitlab_com/index.html#repository-size-limit). + +当项目达到其大小限制时,您不能: + +* 推送到项目. +* 创建一个新的合并请求. +* 合并现有的合并请求. +* 上载 LFS 对象. + +您仍然可以: + +* 创造新问题. +* 克隆项目. + +如果超出存储库大小限制,则可以尝试: + +1. 删除一些数据. +2. 进行新的提交. +3. 推回存储库. + +也许您还可以: + +* 将一些斑点移到 LFS. +* 从历史记录中删除一些旧的依赖项更新. + +不幸的是,该工作流程无法正常工作. 实际上,在提交中删除文件并不会减小存储库的大小,因为早期的提交和 Blob 仍然存在. + +您需要做的是重写历史记录. 我们建议使用开源社区维护的工具[`git filter-repo`](https://github.com/newren/git-filter-repo) . + +**注意:**在 GitLab 端运行`git gc`之前,"已删除"的提交和 blob 仍将存在. 您还必须能够将重写的历史记录推送到 GitLab,如果您已经超过最大大小限制,则可能无法实现. + +为了解除这些限制,自我管理的 GitLab 实例的管理员必须增加对超出它的特定项目的限制. 因此,最好始终主动保持在限制之下. 如果您达到了极限,并且无法暂时提高极限,则唯一的选择是: + +1. 在本地修剪所有不需要的东西. +2. 在 GitLab 上创建一个新项目,然后开始使用它. + +**Caution:** This process is not suitable for removing sensitive data like password or keys from your repository. Information about commits, including file content, is cached in the database, and will remain visible even after they have been removed from the repository. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\210\206\346\224\257.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\210\206\346\224\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..41b55b3966f962368b3222edcd7c1a418795aceb --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\345\210\206\346\224\257.md" @@ -0,0 +1,110 @@ +# 分支[](#分支 "Permalink") + +分支是项目工作树的版本. 您为所做的每组相关更改创建一个分支. 这样可以使每组更改彼此独立,从而可以并行进行更改,而不会互相影响. + +将更改推送到新分支后,您可以: + +* 创建[合并请求](../../merge_requests/index.html) +* 执行内联代码审查 +* 与团队[讨论](../../../discussions/index.html)实施情况 +* 使用[Review Apps](../../../../ci/review_apps/index.html)预览提交到新分支的更改. + +使用[GitLab Starter](https://about.gitlab.com/pricing/) ,您还可以请求经理的[批准](../../merge_requests/merge_request_approvals.html) . + +有关使用 GitLab UI 管理分支的更多信息,请参见: + +- [分支](#分支) + - [Default branch](#default-branch) + - [Custom initial branch name](#custom-initial-branch-name) + - [Enable or disable custom initial branch name](#enable-or-disable-custom-initial-branch-name) + - [Compare](#compare) + - [Delete merged branches](#delete-merged-branches) + - [Branch filter search box](#branch-filter-search-box) + +您也可以使用[命令行](../../../../gitlab-basics/start-using-git.html#create-a-branch)管理分支. + +观看视频[GitLab Flow](https://www.youtube.com/watch?v=InKNIvky2KE) . + +也可以看看: + +* [Branches API](../../../../api/branches.html) ,有关使用 GitLab API 在存储库分支上进行操作的信息. +* [GitLab Flow](../../../../university/training/gitlab_flow.html) documentation. +* [Git](../../../../topics/git/index.html)和 GitLab [入门](../../../../topics/git/index.html) . + +## Default branch[](#default-branch "Permalink") + +创建新[项目时](../../index.html) ,GitLab 会将`master`设置为存储库的默认分支. 您可以在项目的**设置>存储库**下选择另一个分支作为项目的默认分支. + +通过[问题关闭模式](../../issues/managing_issues.html#closing-issues-automatically)直接从合并请求中[关闭问题时](../../issues/managing_issues.html#closing-issues-automatically) ,目标是项目的**默认分支** . + +初始还对默认分支进行了[保护,以](../../protected_branches.html#protected-branches)防止意外删除和强制推送. + +### Custom initial branch name[](#custom-initial-branch-name-core-only "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/221013) . +* 它部署在默认情况下启用的功能标志后面. +* 在 GitLab.com 上启用了它. +* 不能根据项目启用或禁用它. +* 建议用于生产. +* 对于 GitLab 自我管理的实例,GitLab 管理员可以选择[禁用它](#enable-or-disable-custom-initial-branch-name-core-only) . + +默认情况下,当您在 GitLab 中创建新项目时,初始分支称为`master` . 对于自我管理的实例,GitLab 管理员可以将初始分支名称自定义为其他名称. 这样,此后创建的每个新项目都将从自定义分支名称开始,而不是`master` . 为此: + +1. 转到 **在管理区域>设置>存储库中** ,展开**默认初始分支名称** . +2. 将默认的初始分支更改为您选择的自定义名称. +3. **保存更改**. + +#### Enable or disable custom initial branch name[](#enable-or-disable-custom-initial-branch-name-core-only "Permalink") + +正在设置默认的初始分支名称,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../../administration/feature_flags.html)可以选择为您的实例禁用它. + +禁用它: + +``` +Feature.disable(:global_default_branch_name) +``` + +要启用它: + +``` +Feature.enable(:global_default_branch_name) +``` + +## Compare[](#compare "Permalink") + +要比较存储库中的分支: + +1. 导航到项目的存储库. +2. 在边栏中选择**存储库>比较** . +3. 使用[分支过滤器搜索框](#branch-filter-search-box)选择要比较的[分支](#branch-filter-search-box) +4. 单击" **比较** "以内联查看更改: + +[![compare branches](img/b4e4d114d9b2244a7848961617e05a95.png)](img/compare_branches.png) + +## Delete merged branches[](#delete-merged-branches "Permalink") + +在 GitLab 8.14 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/6449) . + +[![Delete merged branches](img/6de450be845a1f48a3feae9ce8e7be6e.png)](img/delete_merged_branches.png) + +此功能允许合并的分支被批量删除. 作为此操作的一部分,只有已合并[但未受保护的](../../protected_branches.html)分支才会被删除. + +清理合并请求时未自动删除的旧分支尤其有用. + +## Branch filter search box[](#branch-filter-search-box "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22166) . + +[![Branch filter search box](img/f380fbb3646558d8becf561df5894c38.png)](img/branch_filter_search_box.png) + +此功能使您可以快速搜索和选择分支. 搜索结果按以下顺序显示: + +* 名称与搜索字词完全匹配的分支. +* 名称包含搜索词的其他分支,按字母顺序排序. + +有时,当您有数百个分支时,可能需要更灵活的匹配模式. 在这种情况下,您可以使用以下方法: + +* `^feature`将仅匹配以'feature'开头的分支名称. +* `feature$` will only match branch names that end with ‘feature’. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..ff32771a7a9226c265b7f6217e5da5e84e237e6c --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\345\216\206\345\217\262\350\256\260\345\275\225.md" @@ -0,0 +1,55 @@ +# 文件历史记录[](#文件历史记录 "Permalink") + +在 GitLab 0.8.0 中[引入](https://gitlab.com/gitlab-org/gitlab/blob/9ba1224867665844b117fa037e1465bb706b3685/app/controllers/commits_controller.rb) + +Git 文件历史记录提供有关与文件关联的提交历史记录的信息. + +您可以在项目中的每个文件中找到" **历史记录"**按钮. + +[![File history button](img/4b803fd891a7ec7f422522d2ff185864.png "History button")](img/file_history_button_v12_6.png) + +当选择" **历史记录"**按钮时,您将看到一个带有说明信息的屏幕: + +[![Git log output](img/0dad61d266449688c931d1703509bca3.png "History button output")](img/file_history_output_v12_6.png) + +如果将鼠标悬停在 UI 中的提交上,您将看到上次修改提交的确切日期和时间. + +## Associated `git` command[](#associated-git-command "Permalink") + +如果从命令行运行`git` ,则等效命令为`git log <filename>` . 例如,如果要在本地目录中找到有关`README.md`文件的`history`信息,请运行以下命令: + +``` +git log README.md +``` + +您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间: + +``` +commit 0e62ed6d9f39fa9bedf7efc6edd628b137fa781a +Author: Mike Jang <mjang@gitlab.com> +Date: Tue Nov 26 21:44:53 2019 +0000 + + Deemphasize GDK as a doc build tool + +commit 418879420b1e3a4662067bd07b64bb6988654697 +Author: Marcin Sedlak-Jakubowski <msedlakjakubowski@gitlab.com> +Date: Mon Nov 4 19:58:27 2019 +0100 + + Fix typo + +commit 21cc1fef11349417ed515557748369cfb235fc81 +Author: Jacques Erasmus <jerasmus@gitlab.com> +Date: Mon Oct 14 22:13:40 2019 +0000 + + Add support for modern JS + + Added rollup to the project + +commit 2f5e895aebfa5678e51db303b97de56c51e3cebe +Author: Achilleas Pipinellis <axil@gitlab.com> +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 diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\214\207\350\264\243.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\214\207\350\264\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..31af0b09a22bacae0f74f675179d59395f432393 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\214\207\350\264\243.md" @@ -0,0 +1,46 @@ +# 文件指责[](#文件指责 "Permalink") + +在 GitLab 2.5 中[引入](https://git.sphere.ly/staff/publicgitlab/commit/39c657930625ddc3ac8a921f01ffc83acadce68f) + +[Git blame](https://git-scm.com/docs/git-blame)提供有关文件中每一行的更多信息,包括最后修改时间,作者和提交哈希. + +您可以在项目中的每个文件中找到" **责备"**按钮. + +[![File blame button](img/1427a32ce32914c8100f7563817e3d64.png "Blame button")](img/file_blame_button_v12_6.png) + +选择" **责备"**按钮时,您会看到一个带有说明信息的屏幕: + +[![Git blame output](img/4a7c845c8d7b28d90af5923b08fb1e1d.png "Blame button output")](img/file_blame_output_v12_6.png) + +如果将鼠标悬停在 UI 中的提交上,您将看到该提交的确切日期和时间. + +## Blame previous commit[](#blame-previous-commit "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19299) . + +要查看特定行的早期修订,请**在此更改**之前单击" **查看责备",**直到找到您有兴趣查看的**更改**为止: + +[![Blame previous commit](img/dc12d72310a7e06d2981fd6774b0903d.png "Blame previous commit")](img/file_blame_previous_commit_v12_7.png) + +## Associated `git` command[](#associated-git-command "Permalink") + +如果从命令行运行`git` ,则等效命令为`git blame <filename>` . 例如,如果你想找到`blame`有关信息`README.md`在本地目录中的文件,运行以下命令: + +``` +git blame README.md +``` + +您将看到类似于以下内容的输出,其中包括 UTC 格式的提交时间: + +``` +62e2353a (Achilleas Pipinellis 2019-07-11 14:52:18 +0300 1) [![build status](https://gitlab.com/gitlab-org/gitlab-docs/badges/master/build.svg)](https://gitlab.com/gitlab-com/gitlab-docs/commits/master) +fb0fc7d6 (Achilleas Pipinellis 2016-11-07 22:21:22 +0100 2) +^764ca75 (Connor Shea 2016-10-05 23:40:24 -0600 3) # GitLab Documentation +^764ca75 (Connor Shea 2016-10-05 23:40:24 -0600 4) +0e62ed6d (Mike Jang 2019-11-26 21:44:53 +0000 5) This project hosts the repository used to generate the GitLab +0e62ed6d (Mike Jang 2019-11-26 21:44:53 +0000 6) documentation website and deployed to https://docs.gitlab.com. It uses the +``` + +## File blame through the API[](#file-blame-through-the-api "Permalink") + +您也可以通过[Git 文件指责 REST API](../../../api/repository_files.html#get-file-blame-from-repository)来获取此信息. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\237\245\346\211\276.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\237\245\346\211\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..ee8bc159369f996a0ed3e1dd53fb57b256617212 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\346\237\245\346\211\276.md" @@ -0,0 +1,29 @@ +# 文件查找[](#文件查找 "Permalink") + +在 GitLab 8.4 中[引入](https://github.com/gitlabhq/gitlabhq/pull/9889) . + +文件查找器功能使您可以使用 GitLab UI 在存储库中搜索文件. + +您可以在项目的" **文件"**部分中找到" **查找文件"**按钮. + +[![Find file button](img/264ee345c8d001f9b7cabf52e10f47bf.png)](img/file_finder_find_button_v12_10.png) + +对于那些喜欢用手指触摸键盘的人,还有一个[快捷按钮](../../shortcuts.html) ,您可以从项目中的*任何地方*调用它. + +在**问题** , **合并请求** , **里程碑**甚至项目设置中,按`t`键启动文件搜索功能. + +开始输入您要搜索的内容,然后观察魔术的发生. 使用向上/向下箭头,您可以向上和向下搜索结果,使用`Esc`可以关闭搜索并返回" **文件"** + +## How it works[](#how-it-works "Permalink") + +文件查找器功能由[模糊过滤器](https://github.com/jeancroy/fuzz-aldrin-plus)库提供支持. + +它通过突出显示来实现模糊搜索,并试图通过识别人们在搜索时使用的模式来提供直观的结果. + +例如,考虑[GitLab FOSS 存储库](https://gitlab.com/gitlab-org/gitlab-foss/tree/master) ,并且我们要打开`app/controllers/admin/deploy_keys_controller.rb`文件. + +使用模糊搜索,我们首先输入使我们更接近文件的字母. + +**提示:**要缩小搜索范围,请在搜索词中包含`/` . + +[![Find file button](img/ead8d62e426d9309f25a82da77770f59.png)](img/file_finder_find_file_v12_10.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\347\274\226\350\276\221.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\347\274\226\350\276\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..3d536282755e29eb91019435759ab4ddafd25c42 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\346\226\207\344\273\266\347\274\226\350\276\221.md" @@ -0,0 +1,113 @@ +# 文件编辑[](#文件编辑 "Permalink") + +有时,直接从 GitLab 界面进行快速更改要比克隆项目并使用 Gi​​t 命令行工具容易. 在此功能中,我们重点介绍如何从文件浏览器创建新文件,目录,分支或标记. 所有这些操作都可以通过一个下拉菜单获得. + +## Create a file[](#create-a-file "Permalink") + +在项目的文件页面中,单击分支选择器右侧的" +"按钮. 从下拉列表中选择**新文件** . + +[![New file dropdown menu](img/149fa515778bea7ce86903f0c8d9b31f.png)](img/web_editor_new_file_dropdown.png) + +在" **文件名"**框中输入文件名. 然后,在编辑器区域中添加文件内容. 添加描述性提交消息并选择一个分支. 分支字段将默认为您在文件浏览器中查看的分支. 如果输入新的分支名称,将出现一个复选框,允许您在提交更改后启动新的合并请求. + +当您对新文件感到满意时,请单击底部的" **提交更改** ". + +[![Create file editor](img/07e4663db45be7313a205a17ec342edb.png)](img/web_editor_new_file_editor.png) + +### Template dropdowns[](#template-dropdowns "Permalink") + +启动新项目时,新项目可能也需要一些通用文件. 因此,GitLab 将显示一条消息,以简化您的操作. + +[![First file for your project](img/1e0213e85ced3ac9dcc079f0e1831068.png)](img/web_editor_template_dropdown_first_file.png) + +当单击`LICENSE`或`.gitignore`等时,将显示一个下拉列表,为您提供适合您的项目的模板. + +[![MIT license selected](img/097706015c4d2abaaf34d0782cfac635.png)](img/web_editor_template_dropdown_mit_license.png) + +许可证, `.gitlab-ci.yml`日志,贡献指南或`.gitlab-ci.yml`文件也可以通过项目页面上的按钮添加. 在下面的示例中,许可证已经创建,这将创建指向许可证本身的链接. + +[![New file button](img/adc0d64a6c4c1979d43d8bf1d8d485e8.png)](img/web_editor_template_dropdown_buttons.png) + +> **Note:** The **设置 CI / CD** button will not appear on an empty repository. You have to at least add a file in order for the button to show up. + +## Upload a file[](#upload-a-file "Permalink") + +当内容为文本时,创建文件的能力非常出色. 但是,这不适用于二进制数据,例如图像,PDF 或其他文件类型. 在这种情况下,您需要上传文件. + +在项目的文件页面中,单击分支选择器右侧的" +"按钮. 从下拉菜单中选择上**载文件** . + +[![Upload file dropdown menu](img/671787cdf6cd1dde3e748fae72d46779.png)](img/web_editor_upload_file_dropdown.png) + +弹出上传对话框后,有两种方法可以上传文件. 可以在弹出窗口中拖放文件,也可以使用**点击上传**链接. 选择要上传的文件后,将显示文件预览. + +输入提交消息,选择一个分支,并在准备好后单击"上**载文件"** . + +[![Upload file dialog](img/2ed1719eefb651778ccd248f0bbe577c.png)](img/web_editor_upload_file_dialog.png) + +## Create a directory[](#create-a-directory "Permalink") + +为了使档案库中的文件井井有条,创建一个新目录通常会很有帮助. + +在项目的文件页面中,单击分支选择器右侧的加号按钮( `+` ). 从下拉菜单中选择" **新建目录** ". + +[![New directory dropdown](img/c65afb6da67de7dea9950e2b151cca40.png)](img/web_editor_new_directory_dropdown.png) + +在新目录对话框中,输入目录名称,提交消息并选择目标分支. 单击**创建目录**以完成. + +[![New directory dialog](img/0b804819bf30ce8e657ad538d376ecc5.png)](img/web_editor_new_directory_dialog.png) + +## Create a new branch[](#create-a-new-branch "Permalink") + +有多种方法可从 GitLab 的 Web 界面创建分支. + +### Create a new branch from an issue[](#create-a-new-branch-from-an-issue "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2808) . + +如果您的开发工作流程要求每个合并请求都存在问题,则可以直接从该问题快速创建分支,以加快流程. 新分支及其以后的合并请求将被标记为与此问题相关. 合并后,MR 将自动关闭问题. 您可以在问题说明下方看到" **创建合并请求"**下拉列表. + +**注意:**如果已经有一个具有相同名称的分支或一个引用的合并请求,或者您的项目具有活动的派生关系,则不会看到" **创建合并请求"**按钮. 如果您想显示此按钮,则可能的解决方法是[删除项目的 fork 关系](../settings/index.html#removing-a-fork-relationship) . 删除后,派生关系将无法恢复,您将不再能够将合并请求发送到源. + +[![Create Button](img/ab48b86f7a0dfe92d4358f705bf938a8.png)](img/web_editor_new_branch_from_issue_create_button_v12_6.png) + +该下拉列表包含选项**创建合并请求和分支**以及**创建分支** . + +[![New Branch Button](img/2f78c411d32ee05e95a1984ef90b2356.png)](img/web_editor_new_branch_from_issue_v_12_6.png) + +选择这些选项之一后,将基于项目的默认分支(默认为`master`创建新的分支或分支与合并请求. 分支名称将基于问题的标题,并作为前缀具有其内部 ID. 因此,上面的示例屏幕快照将创建一个名为`2-make-static-site-auto-deploy-and-serve`的分支. + +当您在一个空的存储库项目中单击**创建分支**按钮时,GitLab 会自动创建一个`master`分支, `README.md`提交一个空白的`README.md`文件,并根据问题标题创建并将您重定向到新分支. 如果您的[项目已经配置了](../integrations/overview.html) Kubernetes 等[部署服务](../integrations/overview.html) ,则 GitLab 会更进一步,并通过帮助您创建`.gitlab-ci.yml`文件来提示您设置[自动部署](../../../topics/autodevops/stages.html#auto-deploy) . + +创建分支后,您可以编辑存储库中的文件以解决此问题. 当基于新创建的分支创建合并请求时,描述字段将自动显示[问题关闭模式](../issues/managing_issues.html#closing-issues-automatically) `Closes #ID` ,其中`ID`为问题的 ID. 一旦合并请求被合并,这将解决问题. + +### Create a new branch from a project’s dashboard[](#create-a-new-branch-from-a-projects-dashboard "Permalink") + +如果要在创建新的合并请求之前对多个文件进行更改,则可以预先创建一个新的分支. 在项目的文件页面上,从下拉列表中选择" **新建分支** ". + +[![New branch dropdown](img/83a4859fc1c1d9fc2ea68819a53eaea8.png)](img/web_editor_new_branch_dropdown.png) + +输入新的**分支名称** . (可选)更改" **创建自"**字段以选择该新分支将来自哪个分支,标记或提交 SHA. 如果您开始键入现有的分支或标签,则此字段将自动完成. 单击**创建分支** ,您将返回到该新分支上的文件浏览器. + +[![New branch page](img/dc5fe88e82dc925a618598e1ac284f39.png)](img/web_editor_new_branch_page.png) + +现在,您可以根据需要更改任何文件. 当您准备好将更改合并回母版时,可以使用屏幕顶部的小部件. 在创建分支或修改文件后,此窗口小部件仅显示一段时间. + +[![New push widget](img/2279c6b38c41208a2726d04b0df15c37.png)](img/web_editor_new_push_widget.png) + +## Create a new tag[](#create-a-new-tag "Permalink") + +标签可用于标记主要的里程碑,例如生产版本,候选版本等等. 您可以从分支或提交 SHA 创建标签. 在项目的文件页面上,从下拉列表中选择" **新建标签** ". + +[![New tag dropdown](img/a8ac57717b491533848b3ebca40aae86.png)](img/web_editor_new_tag_dropdown.png) + +给标签起一个名字,例如`v1.0.0` . 选择您要从中创建此新标签的分支或 SHA. 您可以选择添加一条消息和发行说明. 发行说明部分支持 Markdown 格式,您也可以上传附件. 单击**创建标签** ,您将被带到标签列表页面. + +[![New tag page](img/36d97eaa1e64c3f6d5b78d205d1ce881.png)](img/web_editor_new_tag_page.png) + +## Tips[](#tips "Permalink") + +创建或上载新文件或创建新目录时,可以触发新的合并请求,而不是直接提交给 master. 在**目标分支**字段中输入新的分支名称. 您会注意到出现一个复选框,标**有"通过这些更改启动新的合并请求"** . 提交更改后,您将进入新的合并请求表单. + +[![Start a new merge request with these changes](img/f293e9e73b2cf8c4ef278104fbd068d5.png)](img/web_editor_start_new_merge_request.png) + +如果你*不*希望使用您的主电子邮件地址通过 Web 编辑器创建的提交,您可以选择使用其他的链接的电子邮件地址的从**用户设置>编辑个人资料**页面. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\351\225\234\345\203\217\344\273\223\345\272\223.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\351\225\234\345\203\217\344\273\223\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..2125b7adbd1b0caf8a0d760edf862958b20ea928 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\273\243\347\240\201\344\273\223\345\272\223/\351\225\234\345\203\217\344\273\223\345\272\223.md" @@ -0,0 +1,401 @@ +# 镜像仓库[](#镜像仓库 "Permalink") + +存储库镜像允许将存储库镜像到外部源或从外部源镜像. 它可用于镜像存储库之间的分支,标签和提交. + +GitLab 上的存储库镜像将自动更新. 您也可以最多每 5 分钟手动触发一次更新. + +## Overview[](#overview "Permalink") + +当您想在 GitLab 之外使用存储库时,存储库镜像很有用. + +GitLab 支持两种存储库镜像: + +* 推送:用于将 GitLab 存储库镜像到另一个位置. +* Pull: for mirroring a repository from another location to GitLab. + +镜像存储库更新后,所有新的分支,标记和提交将在项目的活动提要中可见. + +至少具有[开发人员访问](../../permissions.html)项目[权限](../../permissions.html)的用户也可以强制立即更新,除非: + +* 镜像已被更新. +* 自上次更新以来,还没有过去 5 分钟. + +出于安全原因,在[GitLab 12.10 和更高版本中](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27166) ,原始存储库的 URL 仅显示给对镜像项目具有维护者或所有者权限的用户. + +## Use cases[](#use-cases "Permalink") + +以下是存储库镜像的一些可能的用例: + +* 您迁移到了 GitLab,但仍需要将项目保留在另一个源中. 在这种情况下,您只需将其设置为镜像到 GitLab(拉),所有提交,标签和分支的基本历史记录都将在您的 GitLab 实例中提供. +* 您在另一个源中有旧项目,这些旧项目不再使用,但又不想出于归档目的而删除它们. 在这种情况下,您可以创建一个推送镜像,以便您的活动 GitLab 存储库可以将其更改推送到旧位置. + +## Pushing to a remote repository[](#pushing-to-a-remote-repository-core "Permalink") + +版本历史 + +* 在 GitLab 企业版 8.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/249) . +* 在 10.8 版中[移至 GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18715) . + +对于现有项目,可以按如下所示设置推送镜像: + +1. 导航到项目的**"设置">"存储库",**然后展开" **镜像存储库"**部分. +2. 输入存储库 URL. +3. 从**镜像方向**下拉菜单中选择**推送** . +4. 如有必要,请从" **身份验证方法"**下拉列表中选择一种身份**验证方法** . +5. 如有必要,请选中**仅镜像保护的分支**框. +6. 如果需要, **请**选中" **保持差异引用"**框. +7. 单击**镜像存储库**按钮以保存配置. + +[![Repository mirroring push settings screen](img/d67d5681f30c4769c6d92232eada26e4.png)](img/repository_mirroring_push_settings.png) + +启用推送镜像后,只有推送会直接提交到镜像存储库,以防止镜像发散. 任何时候,所有更改都将最终存储在镜像存储库中: + +* 提交被推送到 GitLab. +* [强制更新](#forcing-an-update-core)已启动. + +推送到存储库中文件的更改至少会自动推送到远程镜像: + +* 收到后五分钟内. +* 如果启用了**仅受镜像保护的分支,**则在一分钟之内. + +如果分支分支不同,您将在" **镜像存储库"**部分看到指示的错误. + +### Configuring push mirrors through the API[](#configuring-push-mirrors-through-the-api "Permalink") + +您还可以通过[远程镜像 API](../../../api/remote_mirrors.html)创建和修改项目推送镜像. + +### Push only protected branches[](#push-only-protected-branches-core "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 10.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3350) . +* 在 10.8 版中[移至 GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18715) . + +您可以选择仅将受保护的分支从 GitLab 推送到远程存储库. + +要使用此选项,请在创建存储库镜像时选中" **仅镜像保护的分支"**框. + +### Keep divergent refs[](#keep-divergent-refs-core "Permalink") + +在 GitLab 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/208828) . + +默认情况下,如果远程镜像上的任何引用都与本地存储库不同,则*整个推送*将失败,并且不会更新任何内容. + +例如,如果存储库具有已镜像到远程的`master` , `develop`和`stable`分支,然后添加新提交以在镜像上进行`develop` ,则下一次推送尝试将失败,从而使`master`和`stable`不在可用范围内约会尽管没有分歧. 在解决分歧之前,无法反映任何分支上的更改. + +启用" **保持差异引用"**选项后,将跳过`develop`分支,从而可以更新`master`和`stable` . 镜像状态将反映`develop`已偏离并被跳过,并标记为更新失败. + +**注意:**创建镜像后,当前只能通过[API](../../../api/remote_mirrors.html)修改此选项. + +## Setting up a push mirror from GitLab to GitHub[](#setting-up-a-push-mirror-from-gitlab-to-github-core "Permalink") + +要设置从 GitLab 到 GitHub 的镜像,您需要执行以下步骤: + +1. 创建一个[GitHub 个人访问令牌](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) ,并选中`public_repo`框. +2. 使用以下格式填写**Git 存储库 URL**字段: `https://<your_github_username>@github.com/<your_github_group>/<your_github_project>.git` . +3. 使用您的 GitHub 个人访问令牌填写**密码**字段. +4. 单击**镜像存储库**按钮. + +镜像的存储库将被列出. 例如, `https://*****:*****@github.com/<your_github_group>/<your_github_project>.git` . + +该存储库将很快推送. 要强制按下,请单击适当的按钮. + +## Setting up a push mirror to another GitLab instance with 2FA activated[](#setting-up-a-push-mirror-to-another-gitlab-instance-with-2fa-activated "Permalink") + +1. 在目标 GitLab 实例上,创建一个具有`write_repository`范围的[个人访问令牌](../../profile/personal_access_tokens.html) . +2. 在源 GitLab 实例上: + 1. 使用以下格式填写**Git 存储库 URL**字段: `https://oauth2@<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git` . + 2. 在目标 GitLab 实例上创建的 GitLab 个人访问令牌中填写**密码**字段. + 3. 单击**镜像存储库**按钮. + +## Pulling from a remote repository[](#pulling-from-a-remote-repository-starter "Permalink") + +版本历史 + +* 在 GitLab 企业版 8.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/51) . +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 11.11 中[添加了 Git LFS 支持](https://gitlab.com/gitlab-org/gitlab/-/issues/10871) . + +您可以将存储库设置为自动从上游存储库更新其分支,标记和提交. + +当您感兴趣的存储库位于其他服务器上并且您希望能够使用熟悉的 GitLab 界面浏览其内容和活动时,此功能很有用. + +要为现有项目配置镜像拉出: + +1. Navigate to your project’s **设置>存储库** and expand the **镜像存储库** section. +2. 输入存储库 URL. +3. 从**镜像方向**下拉菜单中选择**拉** . +4. 如有必要,请从" **身份验证方法"**下拉列表中选择一种身份**验证方法** . +5. 如有必要,请选中以下框: + * **覆盖分散的分支** . + * **触发管道以更新镜像** . + * **仅镜像保护的分支** . +6. 单击**镜像存储库**按钮以保存配置. + +[![Repository mirroring pull settings screen - upper part](img/5881da97228cb042e5934f836edfd06c.png)](img/repository_mirroring_pull_settings_upper.png) + +* * * + +[![Repository mirroring pull settings screen - lower part](img/d5df9e77d389b58908ef235600ccc61c.png)](img/repository_mirroring_pull_settings_lower.png) + +Because GitLab is now set to pull changes from the upstream repository, you should not push commits directly to the repository on GitLab. Instead, any commits should be pushed to the upstream repository. Changes pushed to the upstream repository will be pulled into the GitLab repository, either: + +* 在一定时间内自动. +* 启动[强制更新时](#forcing-an-update-core) . + +**警告:**如果您确实在 GitLab 存储库中更新了分支,则该分支将与上游分叉,并且 GitLab 将不再自动更新该分支以防止丢失任何更改. 另请注意,上游存储库中已删除的分支和标签将不会反映在 GitLab 存储库中. + +### How it works[](#how-it-works "Permalink") + +为存储库启用拉镜像功能后,会将存储库添加到队列中. + +每分钟一次,Sidekiq cron 作业基于以下内容计划存储库镜像的更新: + +* 可用容量. 这由 Sidekiq 设置确定. 对于 GitLab.com,请参阅[GitLab.com Sidekiq 设置](../../gitlab_com/index.html#sidekiq) . +* 队列中已经要更新的存储库镜像数. 到期时间取决于存储库镜像的最后更新时间以及重试次数. + +随着 Sidekiq 可以处理存储库镜像,它们也会更新. 如果更新存储库镜像的过程为: + +* 成功后,至少需要等待 30 分钟,更新才会重新加入队列. +* 失败(例如,分支从上游分支),稍后将再次尝试. 镜像最多可以发生 14 次故障,然后才不会再次进入队列进行更新. + +### SSH authentication[](#ssh-authentication "Permalink") + +> * 在[GitLab Starter](https://about.gitlab.com/pricing/) 9.5 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/2551)了拉镜像. +> * 在[GitLab Core](https://about.gitlab.com/pricing/) 11.6 中为推送镜像[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22982) + +SSH 身份验证是相互的: + +* 您必须向服务器证明您有权访问存储库. +* 服务器还必须向*您*证明它是谁. + +您提供凭据作为密码或公共密钥. 另一个存储库所在的服务器提供其凭据作为"主机密钥",其指纹需要手动验证. + +如果您通过 SSH 镜像(即使用`ssh://` URL),则可以使用以下方法进行身份验证: + +* 基于密码的身份验证,就像通过 HTTPS 一样. +* 公钥认证. 这通常比密码身份验证更安全,尤其是当其他存储库支持[Deploy Keys 时](../../../ssh/README.html#deploy-keys) . + +开始: + +1. 导航到项目的**"设置">"存储库",**然后展开" **镜像存储库"**部分. +2. 输入`ssh://` URL 进行镜像. + +**注意:**目前不支持 SCP 样式的 URL(即`git@example.com:group/project.git` ). + +输入 URL 在页面上添加两个按钮: + +* **检测主机密钥**. +* **手动输入主机密钥**. + +如果单击: + +* **检测主机密钥**按钮,GitLab 将从服务器获取主机密钥并显示指纹. +* **手动输入主机密钥**按钮,将显示一个字段,您可以在其中粘贴主机密钥. + +假设您使用了前者,那么现在需要验证指纹是否符合您的期望. GitLab.com 和其他代码托管站点公开公开其指纹,供您检查: + +* [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/regions.html#regions-fingerprints) +* [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/configure-ssh-and-two-step-verification/) +* [GitHub](https://help.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints) +* [GitLab.com](../../gitlab_com/index.html#ssh-host-keys-fingerprints) +* [Launchpad](https://help.launchpad.net/SSHFingerprints) +* [Savannah](http://savannah.gnu.org/maintenance/SshAccess/) +* [SourceForge](https://sourceforge.net/p/forge/documentation/SSH%20Key%20Fingerprints/) + +其他提供者将有所不同. 如果您正在运行自我管理的 GitLab,或者可以访问其他存储库的服务器,则可以安全地收集密钥指纹: + +``` +$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f - +256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA) +256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519) +2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA) +``` + +**注意:**对于某些旧版本的 SSH,可能需要排除`-E md5` . + +在镜像存储库时,GitLab 现在将在连接之前检查至少一个存储的主机密钥是否匹配. 这样可以防止将恶意代码注入到您的镜像中,或者防止您的密码被盗. + +### SSH public key authentication[](#ssh-public-key-authentication "Permalink") + +要使用 SSH 公钥身份验证,您还需要从**Authentication method**下拉菜单中选择该选项. 创建镜像后,GitLab 会生成一个 4096 位 RSA 密钥,可以通过单击" **复制 SSH"公共密钥**按钮进行复制. + +[![Repository mirroring copy SSH public key to clipboard button](img/c1e086b58ff99dd5c5684a4571e568e3.png)](img/repository_mirroring_copy_ssh_public_key_button.png) + +然后,您需要将公共 SSH 密钥添加到另一个存储库的配置中: + +* 如果其他存储库托管在 GitLab 上,则应将公共 SSH 密钥添加为[Deploy Key](../../../ssh/README.html#deploy-keys) . +* 如果其他存储库位于其他位置,则可能需要将密钥添加到用户的`authorized_keys`文件中. 将整个公共 SSH 密钥单独粘贴到文件中并保存. + +如果您需要随时更改密钥,则可以删除并重新添加镜像以生成新密钥. 您必须使用新密钥更新另一个存储库,以保持镜像运行. + +**注意:**生成的密钥存储在 GitLab 数据库中,而不存储在文件系统中. 因此,无法在预接收挂钩中使用针对镜像的 SSH 公钥身份验证. + +### Overwrite diverged branches[](#overwrite-diverged-branches-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4559) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.6. + +您可以选择始终使用远程版本更新本地分支,即使它们与远程分支不同. + +**警告:**对于镜像分支,启用此选项会导致丢失本地更改. + +要使用此选项,请在创建存储库镜像时选中" **覆盖分支分支"**框. + +### Only mirror protected branches[](#only-mirror-protected-branches-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3326) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.3. + +您可以选择仅将受保护的分支从远程存储库拉到 GitLab. 未受保护的分支不会被镜像,并且可能会分开. + +要使用此选项,请在创建存储库镜像时选中" **仅镜像保护的分支"**框. + +### Hard failure[](#hard-failure-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3117) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.2. + +如果镜像过程连续 14 次失败重试,它将被标记为硬盘失败. 这将在以下任一位置中可见: + +* 项目的主要仪表板. +* 拉镜设置页面. + +当一个项目很难失败时,它将不再需要进行镜像. 用户可以通过[强制更新来](#forcing-an-update-core)再次恢复项目镜像. + +### Trigger update using API[](#trigger-update-using-api-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3453) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.3. + +拉镜像使用轮询来检测新添加的分支和提交,通常是在几分钟后. 如果您通过[API](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter)通知 GitLab,更新将立即被拉出. + +有关更多信息,请参阅[启动项目的拉镜像过程](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter) . + +## Forcing an update[](#forcing-an-update-core "Permalink") + +当计划将镜像自动更新时,您始终可以使用" **存储** **库设置"**页面的" **镜像存储库"**部分上的"更新"按钮强制进行更新. + +[![Repository mirroring force update user interface](img/a6e9b62f94c53cd2f37f7300362137a9.png)](img/repository_mirroring_force_update.png) + +## Bidirectional mirroring[](#bidirectional-mirroring-starter "Permalink") + +**注意:**双向镜像可能会导致冲突. + +如果您将 GitLab 存储库配置为从同一远程源中拉出和推送到同一远程源,则不能保证这两个存储库都将正确更新. 如果为双向镜像设置存储库,则应通过确定谁将解决它们以及如何解决它们来为可能的冲突做准备. + +重写任一远程上的任何镜像提交将导致冲突,并且镜像失败. 可以通过以下方法防止此情况: + +* [Pulling only protected branches](#only-mirror-protected-branches-starter). +* [Pushing only protected branches](#push-only-protected-branches-core). + +您应该[保护](../protected_branches.html)希望在两个远程控制器上镜像[的分支](../protected_branches.html) ,以防止由于重写历史记录而引起的冲突. + +双向镜像还会创建竞态条件,在这种竞态条件中,靠近同一分支的提交会引起冲突. 通过使用[Push 事件 Webhook](../integrations/webhooks.html#push-events)触发立即拉到 GitLab,可以通过减少镜像延迟来缓解竞争状况. 当仅推送镜像受保护的分支时,来自 GitLab 的推送镜像的速率限制为每分钟一次. + +### Configure a webhook to trigger an immediate pull to GitLab[](#configure-a-webhook-to-trigger-an-immediate-pull-to-gitlab "Permalink") + +假设您已经在上游 GitLab 实例中配置了[推](#setting-up-a-push-mirror-to-another-gitlab-instance-with-2fa-activated)和[拉](#pulling-from-a-remote-repository-starter)镜像,以触发如上所述的立即提拉,则需要在下游实例中配置一个[推事件 Web 挂钩](../integrations/webhooks.html#push-events) . + +去做这个: + +* 创建具有`API`范围的[个人访问令牌](../../profile/personal_access_tokens.html) . +* 导航到**设置> Webhooks** +* 添加 webhook URL,在这种情况下,它将在存储库更新后使用[Pull Mirror API](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter)请求触发即时提取. + + ``` + https://gitlab.example.com/api/v4/projects/:id/mirror/pull?private_token=<your_access_token> + ``` + +* 确保已选中" **推送事件"**复选框. +* 单击**添加 Webhook**按钮以保存**Webhook** . +* 要测试集成,请单击" **测试"**按钮,并确认 GitLab 不返回任何错误. + +### Preventing conflicts using a `pre-receive` hook[](#preventing-conflicts-using-a-pre-receive-hook "Permalink") + +**警告:**提议的解决方案将对 Git 推送操作的性能产生负面影响,因为它们将被代理到上游 Git 存储库. + +服务器端`pre-receive`挂钩可通过仅在将提交首先推送到上游 Git 存储库之后才接受推送来防止上述竞争情况. 在此配置中,一个 Git 存储库充当权威的上游,另一个充当下游. `pre-receive`挂钩将安装在下游存储库中. + +阅读有关在 GitLab 服务器上[配置服务器挂钩](../../../administration/server_hooks.html)的信息. + +下面提供了一个样品`pre-receive`挂钩. + +``` +#!/usr/bin/env bash + +# --- Assume only one push mirror target +# Push mirroring remotes are named `remote_mirror_<id>`, this finds the first remote and uses that. +TARGET_REPO=$(git remote | grep -m 1 remote_mirror) + +proxy_push() +{ + # --- Arguments + OLDREV=$(git rev-parse $1) + NEWREV=$(git rev-parse $2) + REFNAME="$3" + + # --- Pattern of branches to proxy pushes + allowlist=$(expr "$branch" : "\(master\)") + + case "$refname" in refs/heads/*) + branch=$(expr "$refname" : "refs/heads/\(.*\)") + + if [ "$allowlist" = "$branch" ]; then unset GIT_QUARANTINE_PATH # handle https://git-scm.com/docs/git-receive-pack#_quarantine_environment + error="$(git push --quiet $TARGET_REPO $NEWREV:$REFNAME 2>&1)" + fail=$? + + if [ "$fail" != "0" ]; then echo >&2 "" + echo >&2 " Error: updates were rejected by upstream server" + echo >&2 " This is usually caused by another repository pushing changes" + echo >&2 " to the same ref. You may want to first integrate remote changes" + echo >&2 "" + return + fi + fi + ;; + esac +} + +# Allow dual mode: run from the command line just like the update hook, or +# if no arguments are given then run as a hook script +if [ -n "$1" -a -n "$2" -a -n "$3" ]; then + # Output to the terminal in command line mode - if someone wanted to + # resend an email; they could redirect the output to sendmail + # themselves + PAGER= proxy_push $2 $3 $1 +else + # Push is proxied upstream one ref at a time. Because of this it is possible + # for some refs to succeed, and others to fail. This will result in a failed + # push. + while read oldrev newrev refname + do proxy_push $oldrev $newrev $refname + done +fi +``` + +请注意,此示例有一些限制: + +* 此示例可能无法完全满足您的用例,并且可能需要进行修改. + * 它不考虑镜像的不同类型的身份验证机制. + * 它不适用于强制更新(重写历史记录). + * 仅匹配`allowlist`模式的分支将被代理推送. +* 该脚本规避了 Git 钩子隔离环境,因为`$TARGET_REPO`的更新被视为参考更新,Git 会对此进行抱怨. + +### Mirroring with Perforce Helix via Git Fusion[](#mirroring-with-perforce-helix-via-git-fusion-starter "Permalink") + +**警告:**双向镜像不应用作永久配置. 有关替代的迁移方法,请参阅[从 Perforce Helix](../import/perforce.html)迁移. + +[Git Fusion](https://www.perforce.com/manuals/git-fusion/#Git-Fusion/section_avy_hyc_gl.html)为[Perforce Helix](https://www.perforce.com/products)提供了一个 Git 接口,GitLab 可以使用它来双向镜像 GitLab 项目. 从 Perforce Helix 迁移到 GitLab 的某些情况下,这可能是有用的,因为重叠的 Perforce Helix 工作区无法同时迁移到 GitLab. + +如果将镜像与 Perforce Helix 一起使用,则应仅镜像受保护的分支. Perforce Helix 将拒绝任何重写历史记录的推送. 由于 Git Fusion 的性能限制,只应镜像最少数量的分支. + +通过 Git Fusion 使用 Perforce Helix 配置镜像时,建议使用以下 Git Fusion 设置: + +* `change-pusher`应禁用. 否则,每个提交都将被重写为由镜像帐户提交,而不是映射到现有的 Perforce Helix 用户或`unknown_git`用户. +* 如果 Perforce Helix 中不存在 GitLab 用户,则`unknown_git`用户将用作提交作者. + +[在 Perforce.com 上](https://www.perforce.com/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l)了解有关[Git Fusion 设置的信息](https://www.perforce.com/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l) . + +## Troubleshooting[](#troubleshooting "Permalink") + +如果在推送过程中发生错误,则 GitLab 将在该存储库中显示"错误"突出显示. 然后,将鼠标悬停在突出显示的文本上,即可查看有关错误的详细信息. + +### 13:Received RST_STREAM with error code 2 with GitHub[](#13received-rst_stream-with-error-code-2-with-github "Permalink") + +如果在镜像到 GitHub 存储库时收到"错误代码为 2 的 13:Received RST_STREAM",则您的 GitHub 设置可能被设置为阻止推送,以暴露用于提交的电子邮件地址. 可以将您在 GitHub 上的电子邮件地址设置为公开,或者禁用[公开我的电子邮件](https://github.com/settings/emails)设置的" [阻止"命令行推送](https://github.com/settings/emails) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244Tag.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244Tag.md" new file mode 100644 index 0000000000000000000000000000000000000000..de5c80584ce99442e551708a6c3a8d84117d95a6 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244Tag.md" @@ -0,0 +1,48 @@ +# 保护Tag[](#保护Tag "Permalink") + +在 GitLab 9.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/10356) . + +受保护的标签可控制谁有权创建标签,并防止创建后意外更新或删除. 每个规则都允许您匹配单个标签名称,或使用通配符一次控制多个标签. + +此功能从[受保护的分支](protected_branches.html)演变而来 + +## Overview[](#overview "Permalink") + +受保护的标签将阻止任何人更新或删除标签,并且将根据您选择的权限阻止创建匹配的标签. 默认情况下,任何未经维护者许可的人都将无法创建标签. + +## Configuring protected tags[](#configuring-protected-tags "Permalink") + +为了保护标签,您需要至少具有维护者权限级别. + +1. 导航到项目的**"设置">"存储库"** : + + [![Repository Settings](img/bec396562e8fe025cb7009de091ff2aa.png)](img/project_repository_settings.png) + +2. 从**标签**下拉菜单中,选择要保护或输入的标签,然后点击**创建通配符** . 在下面的屏幕截图中,我们选择保护所有与`v*`匹配的标签: + + [![Protected tags page](img/8ab62c2dee9f26abae9b7f794b4f5fae.png)](img/protected_tags_page_v12_3.png) + +3. 从" **允许创建"**下拉列表中,选择谁有权创建匹配的标签,然后单击" **保护"** : + + [![Allowed to create tags dropdown](img/52fecb33c2f168630e9a8f7c95aaf517.png)](img/protected_tags_permissions_dropdown_v12_3.png) + +4. 完成后,受保护的标签将显示在" **受保护的标签"**列表中: + + [![Protected tags list](img/572645049ee5ab43733f62fc45312843.png)](img/protected_tags_list_v12_3.png) + +## Wildcard protected tags[](#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`也将沿用此设置. + +如果单击受保护标签的名称,将显示所有匹配标签的列表: + +[![Protected tag matches](img/cc52a99e48b72695add0c3e8efab158f.png)](img/protected_tag_matches.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244\345\210\206\346\224\257.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244\345\210\206\346\224\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..aab8192a6fa597803e40ffd4024a1484610a47e2 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\344\277\235\346\212\244\345\210\206\346\224\257.md" @@ -0,0 +1,156 @@ +# 保护分支[](#保护分支 "Permalink") + +GitLab 中的[权限](../permissions.html)基本上是围绕对存储库和分支具有读或写权限的想法定义的. 为了对某些分支机构施加进一步的限制,可以对其进行保护. + +## Overview[](#overview "Permalink") + +默认情况下,受保护的分支执行以下四个简单的操作: + +* 它会阻止除具有维护者权限的用户之外的所有用户创建它(如果尚未创建). +* 它可以防止除具有**允许的**权限的用户以外的其他任何人推送. +* 它可以防止**任何人**用力推动分支机构. +* 它可以防止**任何人**删除分支. + +**注意:**允许 GitLab 管理员推送到受保护的分支. + +有关随时间的变化,请参见" [更改日志"](#changelog)部分. + +默认的分支保护级别在[管理区域中](../admin_area/settings/visibility_and_access_controls.html#default-branch-protection)设置. + +## Configuring protected branches[](#configuring-protected-branches "Permalink") + +要保护分支,您需要至少具有维护者权限级别. 请注意,默认情况下`master`分支是受保护的. + +1. 导航到项目的**"设置"➔"存储库"** +2. 滚动查找" **受保护的分支"**部分. +3. 从" **分支"**下拉菜单中,选择要保护的分支,然后单击" **保护"** . 在下面的屏幕截图中,我们选择了`develop`分支. + + [![Protected branches page](img/c29b503c10922622f8ec612bd5168b10.png)](img/protected_branches_page_v12_3.png) + +4. 完成后,受保护的分支将出现在"受保护的分支"列表中. + + [![Protected branches list](img/265f035427185c0998b05886114d104b.png)](img/protected_branches_list_v12_3.png) + +## Using the Allowed to merge and Allowed to push settings[](#using-the-allowed-to-merge-and-allowed-to-push-settings "Permalink") + +在 GitLab 8.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) . + +从 GitLab 8.11 开始,我们增加了分支保护的另一层,它提供了对受保护分支的更精细的管理. "开发人员可以推送"选项由"允许推送"设置代替,该设置可以设置为允许/禁止维护者和/或开发人员推送到受保护的分支. + +使用"允许推送"和"允许合并"设置,您可以控制不同角色可以在受保护分支中执行的操作. 例如,您可以将"允许推送"设置为"无人",将"允许合并"设置为"开发人员+维护人员",以要求*每个人都*提交合并请求,以请求更改进入受保护分支. 这与[GitLab 工作](../../topics/gitlab_flow.html)流程等[工作流程](../../topics/gitlab_flow.html)兼容. + +但是,有些工作流程不需要这样做,只有防止强行推动和移除分支才有用. 对于这些工作流程,您可以通过将"允许推送"设置为"开发人员+维护人员"来允许具有写访问权的每个人推送到受保护的分支. + +您可以在创建受保护的分支时设置"允许推送"和"允许合并"选项,也可以在之后通过从"已保护"区域的下拉列表中选择所需的选项来设置. + +[![Developers can push](img/eca0c9ec85c6dfc8dbde06c368a9d94d.png)](img/protected_branches_devs_can_push_v12_3.png) + +如果在创建受保护的分支时未选择任何这些选项,则默认情况下会将它们设置为"维护者". + +## Restricting push and merge access to certain users[](#restricting-push-and-merge-access-to-certain-users-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) in [GitLab Starter](https://about.gitlab.com/pricing/) 8.11. + +使用 GitLab 企业版,您可以通过选择角色(维护者,开发者)以及某些用户来限制对受保护分支的访问. 从下拉菜单中选择您要合并或推送访问的角色和/或用户. + +[![Select roles and users](img/8fc9989164e038f62ee1015c2f477d84.png)](img/protected_branches_select_roles_and_users.png) + +单击" **保护"** ,该分支将出现在"受保护的分支"列表中. + +[![Roles and users list](img/0387751ed4b8717777ebac2706c2d637.png)](img/protected_branches_select_roles_and_users_list.png) + +## Wildcard protected branches[](#wildcard-protected-branches "Permalink") + +在 GitLab 8.10 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4665) . + +您可以指定一个通配符保护的分支,该分支将保护所有与通配符匹配的分支. 例如: + +| 通配符保护的分支 | 匹配分支 | +| --- | --- | +| `*-stable` | `production-stable`, `staging-stable` | +| `production/*` | `production/app-server`, `production/load-balancer` | +| `*gitlab*` | `gitlab`, `gitlab/staging`, `master/gitlab/production` | + +受保护的分支设置(如"开发人员可以推送")适用于所有匹配的分支. + +两个不同的通配符可能会匹配同一分支. 例如, `*-stable` `production-stable`和`production-*`都将与`production-stable`分支匹配. 在这种情况下,如果*这些*受保护的分支有这样一个设定"允许推送",然后`production-stable`也将继承这一设置. + +如果单击受保护分支的名称,将显示所有匹配分支的列表: + +[![Protected branch matches](img/09870a42c6e3e94e7553f338a65c0b6d.png)](img/protected_branches_matches.png) + +## Creating a protected branch[](#creating-a-protected-branch "Permalink") + +在 GitLab 11.9 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361) . + +当受保护的分支或通配符受保护的分支设置为" [**不允许任何人** **推送"时**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,只要允许开发人员(和具有较高[权限级别的](../permissions.html)用户) [**合并**](#using-the-allowed-to-merge-and-allowed-to-push-settings) ,就可以创建新的受保护分支. 这只能通过 UI 或 API 来完成(为避免意外地从命令行或 Git 客户端应用程序创建受保护的分支). + +通过用户界面创建新分支: + +1. Visit **资料库>分支机构**. +2. Click on **新分支**. +3. 填写分支名称,然后选择一个现有的分支,标记或确认新分支将基于该分支. 仅接受现有的受保护分支和已经在受保护分支中的提交. + +## Deleting a protected branch[](#deleting-a-protected-branch "Permalink") + +在 GitLab 9.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21393) . + +有时可能需要删除或清理受保护的分支. + +具有[维护者权限](../permissions.html)并具有[维护者权限的](../permissions.html)用户可以通过 GitLab 的 Web 界面手动删除受保护的分支: + +1. Visit **资料库>分支机构** +2. 单击您要删除的分支旁边的删除图标 +3. 为了防止意外删除,需要额外的确认 + + [![Delete protected branches](img/4e86bb665dcf8b8997d807441dbd60cd.png)](img/protected_branches_delete.png) + +只能通过 Web 界面而不是 Git 删除受保护的分支. 这意味着您不能从命令行或 Git 客户端应用程序中意外删除受保护的分支. + +## Protected Branches approval by Code Owners[](#protected-branches-approval-by-code-owners-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13251) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4. + +对于合并请求更改的文件,可能需要[代码所有者的](code_owners.html)至少一项批准. 可以在保护新分支时设置"代码所有者"批准,也可以将其设置为已经受保护的分支,如下所述. + +要保护新分支并获得代码所有者的批准: + +1. 导航到项目的**"设置">"存储库",**然后展开" **受保护的分支"** . +2. 向下滚动到**保护一个分支** ,选择**分支**或通配符你想保护,选择谁的**允许合并** **,**并**允许推** ,以及切换**需要从代码的业主**滑块**批准** . +3. Click **Protect**. + +[![Code Owners approval - new protected branch](img/9a996b513114d1fe39fa67c75e54df46.png)](img/code_owners_approval_new_protected_branch_v12_4.png) + +要使代码所有者批准已受保护的分支机构,请执行以下操作: + +1. 导航到项目的**"设置">"存储库",**然后展开" **受保护的分支"** . +2. 向下滚动到" **受保护"分支,**然后切换所选分支的**"代码所有者"批准**滑块. + +[![Code Owners approval - branch already protected](img/7a4195dce33a791e39b721499e4137ad.png)](img/code_owners_approval_protected_branch_v12_4.png) + +启用后,所有针对这些分支的合并请求都将需要代码所有者根据匹配的规则进行批准,然后才能合并. 此外,如果匹配规则,则拒绝直接推送到受保护的分支. + +## Running pipelines on protected branches[](#running-pipelines-on-protected-branches "Permalink") + +合并或推送到受保护分支的权限用于定义用户是否可以运行 CI / CD 管道并在与那些分支相关的作业上执行操作. + +有关管道安全模型的详细信息,请参阅[受保护分支上](../../ci/pipelines/index.html#pipeline-security-on-protected-branches)的安全性. + +## Changelog[](#changelog "Permalink") + +**11.9** + +* [允许](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361)开发人员(和具有更高权限级别的用户)通过 API 和用户界面[创建受保护的分支](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361) . + +**9.2** + +* 允许通过 Web 界面删除受保护的分支( [问题#21393](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21393) ). + +**8.11** + +* 允许创建无法推送到的受保护分支( [合并请求!5081](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081) ). + +**8.10** + +* 允许没有推送访问权限的开发人员合并到受保护的分支中( [合并请求!4892](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4892) ). +* 允许使用通配符指定受保护的分支( [合并请求!4665](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/4665) ). \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..846e514019ca8ddcd2d027cae196f1aa7b0ca25f --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202.md" @@ -0,0 +1,79 @@ +# 合并请求[](#合并请求 "Permalink") + +合并请求使您可以可视化并协作对作为对指定 Git 分支的提交而存在的源代码的建议更改. + +[![Merge request view](img/44dfa1e85103f88c82598a4ef9f8d0ae.png)](img/merge_request.png) + +合并请求( **MR** )是 GitLab 作为代码协作和版本控制平台的基础. 顾名思义,它就是一个*将*一个分支*合并*到另一个分支的*请求* . + +## Use cases[](#use-cases "Permalink") + +答:考虑您是一个团队中的软件开发人员: + +1. 您签出新分支,并通过合并请求提交更改 +2. 您从团队中收集反馈 +3. 您可以使用["代码质量"报告来进行](code_quality.html)优化代码的实现 +4. 您可以在 GitLab CI / CD 中使用[JUnit 测试报告](../../../ci/junit_test_reports.html)来验证您的更改 +5. 通过" [许可证合规性"报告,](../../compliance/license_compliance/index.html)可以避免使用许可证与您的项目不兼容的依赖项 +6. 您要求您的经理[批准](merge_request_approvals.html) +7. 您的经理: + 1. 推动提交并进行最终审查 + 2. [批准合并请求](merge_request_approvals.html) + 3. 将其设置为[在管道成功时合并](merge_when_pipeline_succeeds.html) +8. 您的更改将通过[手动操作](../../../ci/yaml/README.html#whenmanual) GitLab CI / CD 部署到生产中 +9. 您的实施已成功交付给客户 + +B.考虑您是为您公司网站编写网页的 Web 开发人员: + +1. 您签出新分支,并通过合并请求提交新页面 +2. 您从审稿人那里收集反馈 +3. 您的更改将通过[Review Apps](../../../ci/review_apps/index.html)进行预览 +4. 您要求您的网页设计师实施 +5. 您要求您的经理[批准](merge_request_approvals.html) +6. 一旦批准,您的合并请求将被[压缩和合并](squash_and_merge.html) ,并[部署到带有 GitLab 页面的暂存中](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/) +7. 您的生产团队[选择](cherry_pick_changes.html)合并提交到生产中 + +## Overview[](#overview "Permalink") + +合并请求(也称为" MR")显示有关建议的更改的大量信息. MR 的主体包含其描述以及其小部件(显示有关 CI / CD 管道的信息,如果存在的话),然后是与该 MR 合作的人员的讨论线程. + +MR 还包含导航选项卡,从中可以查看线程上正在进行的讨论,提交列表,管道和作业列表,代码更改以及内联代码审阅. + +首先,请阅读[合并请求简介](getting_started.html) . + +## Merge request navigation tabs at the top[](#merge-request-navigation-tabs-at-the-top "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/33813) . 此定位是实验性的. + +到目前为止,在合并请求窗口小部件之后,位于合并请求中以显示" **讨论区"** ," **提交"** ," **管道** "和" **更改"**的导航选项卡. + +To facilitate this navigation without having to scroll up and down through the page to find these tabs, based on user feedback, we’re experimenting with a new positioning of these tabs. They are now located at the top of the merge request, with a new **Overview** tab, containing the description of the merge request followed by the widget. Next to **Overview**, you can find **Pipelines**, **Commits**, and **Changes**. + +[![Merge request tab positions](img/9e7b70cdf92b88509713225035e8e964.png)](img/merge_request_tab_position_v12_6.png) + +请注意,此更改当前位于默认情况下启用的功能标志之后. 对于自我管理的实例,GitLab 管理员可以通过 Rails 控制台使用以下命令将其禁用: + +``` +Feature.disable(:mr_tabs_position) +``` + +## Creating merge requests[](#creating-merge-requests "Permalink") + +Learn [how to create a merge request](creating_merge_requests.html). + +## Reviewing and managing merge requests[](#reviewing-and-managing-merge-requests "Permalink") + +查看可使用的功能来[查看和管理合并请求](reviewing_and_managing_merge_requests.html) . + +## Testing and reports in merge requests[](#testing-and-reports-in-merge-requests "Permalink") + +了解有关合并请求中的[测试](testing_and_reports_in_merge_requests.html)选项[和报告](testing_and_reports_in_merge_requests.html)更改的信息. + +## Authorization for merge requests[](#authorization-for-merge-requests "Permalink") + +使用 GitLab 进行合并请求的主要方法有两种: + +1. 在单个存储库中使用[受保护的分支](../protected_branches.html) +2. 使用权威项目的分支 + +[Learn more about the authorization for merge requests.](authorization_for_merge_requests.html) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Cherry-pick.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Cherry-pick.md" new file mode 100644 index 0000000000000000000000000000000000000000..d96dcfc9d21b083d91d0c72f3658fb3ddd794429 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Cherry-pick.md" @@ -0,0 +1,42 @@ +# Cherry-pick[](#cherry-pick "Permalink") + +GitLab 实现了 Git 的强大功能,通过在合并请求和提交详细信息中引入**Cherry-pick**按钮来[挑选任何提交](https://git-scm.com/docs/git-cherry-pick "Git Cherry-Pick 文档") . + +## Cherry-picking a merge request[](#cherry-picking-a-merge-request "Permalink") + +合并请求合并后,将可以使用**Cherry-pick**按钮来选择该合并请求引入的更改. + +[![Cherry-pick Merge Request](img/fe7d77556848be98a93c7b6516b0e6f8.png)](img/cherry_pick_changes_mr.png) + +单击该按钮后,将出现一个模态,显示一个[分支过滤器搜索框](../repository/branches/index.html#branch-filter-search-box) ,您可以在其中选择: + +* 将更改直接选择到所选分支中. +* 使用经过精心挑选的更改创建一个新的合并请求. + +### Cherry-pick tracking[](#cherry-pick-tracking "Permalink") + +在 GitLab 12.9 中[引入](https://gitlab.com/groups/gitlab-org/-/epics/2675) . + +当您选择一个合并提交时,GitLab 将向相关的合并请求线程输出系统注释,使新提交与现有合并请求交联. + +[![Cherry-pick tracking in Merge Request timeline](img/e20aec7ab33bbd61bae4825e6c9e35f1.png)](img/cherry_pick_mr_timeline_v12_9.png) + +每个部署的[关联合并请求列表](../../../api/deployments.html#list-of-merge-requests-associated-with-a-deployment)将包括精心挑选的合并提交. + +**注意:**我们仅跟踪从 GitLab(UI 和 API)执行的 cherry-pick. 计划在将来的发行版中支持[通过命令行跟踪精心挑选的提交](https://gitlab.com/gitlab-org/gitlab/-/issues/202215) . + +## Cherry-picking a commit[](#cherry-picking-a-commit "Permalink") + +您可以从提交详细信息页面中挑选一个提交: + +[![Cherry-pick commit](img/b4e821b8b83e29e837f01f4620e557b7.png)](img/cherry_pick_changes_commit.png) + +与选择合并请求类似,您可以选择将更改直接选择到目标分支中,也可以选择创建新的合并请求以选择更改. + +请注意,在进行樱桃挑选合并提交时,主线将始终是第一父级. 如果要使用其他主线,则需要从命令行执行. + +这是一个使用第二个父级作为主线来挑选合并提交的快速示例: + +``` +git cherry-pick -m 2 7a39eb0 +``` \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Squash\345\220\210\345\271\266.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Squash\345\220\210\345\271\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..3dac8567ae60493d05eba470b3aba6cf20ec710b --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/Squash\345\220\210\345\271\266.md" @@ -0,0 +1,111 @@ +# Squash合并[](#Squash合并 "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 8.17 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/1024) . +* [移植](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18956)到 GitLab Core 11.0\. + +使用 squash 和 merge,您可以将所有合并请求的提交合并为一个并保留干净的历史记录. + +## Overview[](#overview "Permalink") + +通过压接,您可以在接受合并请求时整理分支的提交历史记录. 它将合并请求中的所有更改作为单个提交应用,然后使用为项目设置的合并方法合并该提交. + +换句话说,挤压合并请求会变成一长串提交: + +[![List of commits from a merge request](img/f2d420adddd87cc8087fea62246e7b67.png)](img/squash_mr_commits.png) + +合并为单个提交: + +[![A squashed commit followed by a merge commit](img/e81fe926a5b379f37dfc5af80b8f83f3.png)](img/squash_squashed_commit.png) + +压缩的提交的提交消息将是: + +* 取自合并中的第一条多行提交消息. +* 如果找不到多行提交消息,则合并请求的标题. + +**注意:**仅在至少 2 次提交时,此选项才生效. 由于没有什么可压缩的,因此如果只有 1 次提交,则提交消息不会更改. + +可以在合并合并请求之前对其进行自定义. + +[![A squash commit message editor](img/618ce3d47266d9b45262489065b68cf7.png)](img/squash_mr_message.png) + +**注意:**在此示例中,压缩的提交之后是合并提交,因为此示例存储库的合并方法使用了合并提交. + +压缩也适用于快进合并策略,有关更多详细信息,请参见[压缩和快进合并](#squash-and-fast-forward-merge) . + +## Use cases[](#use-cases "Permalink") + +在功能分支上工作时,有时您想提交当前进度,但实际上并不关心提交消息. 这些"进行中的提交"不一定包含重要的信息,因此,您宁愿不将其包含在目标分支中. + +使用 squash 和 merge,当准备好要合并的合并请求时,您要做的就是在按下 merge 之前将挤压启用,以将合并请求中的提交加入到单个提交中. + +这样,您的基本分支的历史记录将保留有意义的提交消息,并且: + +* 如有必要, [还原](revert_changes.html)更为简单. +* 合并的分支将保留完整的提交历史记录. + +## Enabling squash for a merge request[](#enabling-squash-for-a-merge-request "Permalink") + +可以创建或编辑合并请求的任何人都可以选择将其压缩在合并请求表单上: + +[![Squash commits checkbox on edit form](img/fd54213f0e98a4b2f6482ab98d497410.png)](img/squash_edit_form.png) + +然后可以在接受合并请求时覆盖它: + +[![Squash commits checkbox on accept merge request form](img/3667bc1901823963df25df8a2458047a.png)](img/squash_mr_widget.png) + +## Commit metadata for squashed commits[](#commit-metadata-for-squashed-commits "Permalink") + +压缩的提交具有以下元数据: + +* 消息:壁球提交消息或自定义消息. +* 作者:合并请求的作者. +* 提交者:发起壁球的用户. + +## Squash and fast-forward merge[](#squash-and-fast-forward-merge "Permalink") + +当项目[启用](fast_forward_merge.html#enabling-fast-forward-merges)了[快进合并设置时](fast_forward_merge.html#enabling-fast-forward-merges) ,合并请求必须能够不压缩而进行快速转发以进行压缩. 这是因为压缩仅在接受合并请求时可用,因此即使挤压本身可以被认为等同于重新基准化,也可能需要在压缩之前对合并请求进行重新基准化. + +## Squash Commits Options[](#squash-commits-options "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/17613) . +* 它部署在功能标记后面,默认情况下处于禁用状态. +* 在 GitLab.com 上已禁用. +* 不建议将其用于生产. +* 要在 GitLab 自管实例中使用它,请让 GitLab 管理员[启用它](#enable-or-disable-squash-commit-options-core-only) . + +使用 Squash Commits Options,您可以为项目配置 Squash 和 Merge 的行为. 要进行设置,请导航至项目的**设置>常规,**然后展开**合并请求** . 您将找到以下选项可供选择,这将影响提交给您的项目的现有和新合并请求: + +* **不允许** :用户不能在合并之前立即使用 Squash 和 Merge 来压缩所有提交. 启用或禁用它的复选框将被取消选中,并且对用户隐藏. +* **Allow**: users will have the option to enable Squash and Merge on a merge request basis. The checkbox will be unchecked (disabled) by default, but and the user is allowed to enable it. +* **鼓励** :用户可以选择在合并请求的基础上启用 Squash 和 Merge. 默认情况下会选中(启用)该复选框以鼓励使用,但允许用户禁用它. +* **要求** :对所有合并请求都启用了"挤压和合并",因此将始终执行. 启用或禁用它的复选框将被选中并向用户隐藏. + +创建合并请求以及编辑现有请求的描述时,将显示" Squash and Merge"复选框,但" Squash Commit Options"设置为**"不允许"**或" **Require"**时除外. + +**注意:**如果您的项目设置为**"不允许**挤压和合并",则用户仍然可以选择通过命令行在本地挤压提交,并在合并之前强制将其推送到其远程分支. + +### Enable or disable Squash Commit Options[](#enable-or-disable-squash-commit-options-core-only "Permalink") + +壁球提交选项正在开发中,尚未准备好用于生产. 它部署在**默认情况下禁用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/feature_flags.html)可以为您的实例启用它. 可以根据项目启用或禁用壁球提交选项. + +要启用它: + +``` +# Instance-wide +Feature.enable(:squash_options) +# or by project +Feature.enable(:squash_options, Project.find(<project id>)) +``` + +禁用它: + +``` +# Instance-wide +Feature.disable(:squash_options) +# or by project +Feature.disable(:squash_options, Project.find(<project id>)) +``` \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\205\201\350\256\270\345\215\217\344\275\234.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\205\201\350\256\270\345\215\217\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..0c69ce093d4f5a5f00f8aa12207321cc28f6ca28 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\205\201\350\256\270\345\215\217\344\275\234.md" @@ -0,0 +1,54 @@ +# 允许Fork项目协助提交合并请求[](#允许Fork项目协助提交合并请求 "Permalink") + +在 GitLab 10.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17395) . + +当用户从派生打开合并请求时,将为他们提供允许上游成员在源分支上与其进行协作的选项. 这使上游项目的成员可以在合并之前进行小规模修复或重新分支,从而减少了接受外部贡献的来回过程. + +此功能可用于可公开访问的分支项目之间的合并请求. + +为合并请求启用后,对项目目标分支具有合并访问权限的成员将被授予对合并请求的源分支的写权限. + +## Enabling commit edits from upstream members[](#enabling-commit-edits-from-upstream-members "Permalink") + +只有具有对源项目的推送访问权限的用户才能启用该功能,并且只有在合并请求打开时才能持续使用. 启用后,上游成员也将能够重试合并请求的管道和作业: + +1. 在创建或编辑合并请求时启用贡献. + + [![Enable contribution](img/3794ce06aeeb9528fa1a66915cc69072.png)](img/allow_collaboration.png) + +2. 创建合并请求后,您将看到允许可以合并到目标分支的成员的提交. + + [![Check that contribution is enabled](img/381cb6fd4ceed7b2a8b3642926cb8cf2.png)](img/allow_collaboration_after_save.png) + +## Pushing to the fork as the upstream member[](#pushing-to-the-fork-as-the-upstream-member "Permalink") + +如果合并请求的创建者启用了上游成员的贡献,则可以直接推送到派生存储库的分支. + +假如说: + +* 分叉的项目 URL 为`git@gitlab.com:thedude/awesome-project.git` . +* 合并请求的分支是`update-docs` . + +流程如下所示: + +1. 首先,您需要获取合并请求已引入的更改. 单击" **签出"分支**按钮,其中包含可以运行的一些预填充命令. + + [![Check out branch button](img/e9dbc908a405f57008dbb80d1b8a9a70.png)](img/checkout_button.png) + +2. 使用复制按钮复制第一个命令并将其粘贴到您的终端中: + + ``` + git fetch git@gitlab.com:thedude/awesome-project.git update-docs + git checkout -b thedude-awesome-project-update-docs FETCH_HEAD + ``` + + 这将获取派生项目的分支,然后基于所获取的分支创建本地分支. + +3. Make any changes you want and commit. +4. 推送到分叉的项目: + + ``` + git push git@gitlab.com:thedude/awesome-project.git thedude-awesome-project-update-docs:update-docs + ``` + + 注意冒号( `:`两个分支之间). 上面的命令会将本地分支`thedude-awesome-project-update-docs` `git@gitlab.com:thedude/awesome-project.git`存储库的`update-docs`分支. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..31a857b93fc16c04249a27351639fa2e6c48eeb2 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\210\233\345\273\272\345\220\210\345\271\266\350\257\267\346\261\202.md" @@ -0,0 +1,144 @@ +# 创建合并请求[](#创建合并请求 "Permalink") + +在创建合并请求之前,请通读"合并请求"的[简介,](getting_started.html)以熟悉概念,术语并了解如何使用它们. + +每个合并请求都从创建一个分支开始. 您可以通过[命令行](#new-merge-request-from-your-local-environment) ,Git CLI 应用程序或[GitLab UI](#new-merge-request-from-a-new-branch-created-through-the-ui)在本地进行操作. + +本文档介绍了创建合并请求的几种方法. + +启动新的合并请求时,无论使用哪种方法,都将转到" [**新合并请求"**页面,](#new-merge-request-page)以在其中添加有关合并请求的信息. + +如果将新分支推送到 GitLab,也不管使用哪种方法,都可以单击[**Create Merge Request**](#create-merge-request-button)按钮并从此处启动合并请求. + +## New Merge Request page[](#new-merge-request-page "Permalink") + +在" **新合并请求"**页面上,首先填写**合并请求**的标题和描述. 如果分支上已经有提交,则标题将用第一条提交消息的第一行预填充,描述将用提交消息中的任何其他行预填充. 在所有情况下,标题都是唯一的必填字段. + +在此处,您可以在其中填充信息(标题,描述,受让人,里程碑,标签,批准人),然后点击**创建合并请求** . + +在初始屏幕上,您还可以查看提交合并请求之前推送到分支的所有提交,管道和文件更改. + +[![New Merge Request page](img/9255a795b62eb0bbe1c91eab2f85c149.png)](img/new_merge_request_page_v12_6.png) + +**提示:**您可以在创建合并请求之前将一次或多次推送到 GitLab 中的分支. + +## Create Merge Request button[](#create-merge-request-button "Permalink") + +将新分支推送到 GitLab 后,请访问 GitLab 中的存储库,并在屏幕顶​​部看到一个号召性用语,您可以从中单击**创建合并请求**按钮. + +[![Create Merge Request button](img/2257f7989872604ba6ce6506ba811b15.png)](img/create_merge_request_button_v12_6.png) + +您还可以在以下页面的右上方看到" **创建合并请求"**按钮: + +* **Project** page. +* **资料库>文件** page. +* **合并请求** page. + +In this case, GitLab will use the most recent branch you pushed changes to as the source branch, and the default branch in the current project as the target. + +## New merge request by adding, editing, and uploading a file[](#new-merge-request-by-adding-editing-and-uploading-a-file "Permalink") + +当您选择通过 GitLab UI 编辑,添加或上传文件时,在文件末尾,您会看到以下选项:添加**Commit 消息** ,选择该**提交**的**Target 分支** ,然后选中**Start new**复选框. **具有这些更改的合并请求** . + +同样,如果通过 Web IDE 更改文件,则在左侧边栏中导航到" **提交"**时,将看到这些相同的选项. + +添加,编辑或上传文件后,请执行以下操作: + +1. 在提交消息中描述您的更改. +2. 选择一个现有分支以将您的提交添加到其中,或者,如果您想创建一个新分支,请键入新的分支名称(不带空格,大写字母或特殊字符). +3. 保持选中复选框以立即开始新的合并请求,或者取消选中该复选框以在开始合并请求之前向该分支添加更多更改. +4. Click **提交变更**. + +如果您选择开始合并请求,则将转到" [**新合并请求"**页面](#new-merge-request-page) ,您可以在其中填写信息并提交合并请求. + +合并请求将针对存储库的默认分支. 如果要更改它,可以稍后通过编辑合并请求来进行更改. + +## New merge request from a new branch created through the UI[](#new-merge-request-from-a-new-branch-created-through-the-ui "Permalink") + +要通过 GitLab UI 快速开始处理文件,请导航至项目的" **存储库">"分支"** ,然后单击" **新建分支"** . 将创建一个新分支,您可以开始编辑文件. + +提交并推送后,您可以单击" [**创建合并请求"**](#create-merge-request-button)按钮以打开" [**新合并请求"**页面](#new-merge-request-page) . 将使用当前分支作为源,并使用当前项目中的默认分支作为目标来启动新的合并请求. + +## New merge request from your local environment[](#new-merge-request-from-your-local-environment "Permalink") + +假设您已将存储库克隆到计算机中,并且想要开始处理文件更改,请先创建并签出一个新分支: + +``` +git checkout -b my-new-branch +``` + +处理文件更改,暂存并提交它们: + +``` +git add . +git commit -m "My commit message" +``` + +完成后, [将分支推送到 GitLab](../../../gitlab-basics/start-using-git.html#send-changes-to-gitlabcom) : + +``` +git push origin my-new-branch +``` + +在输出中,GitLab 将提示您一个直接链接来创建合并请求: + +``` +... +remote: To create a merge request for docs-new-merge-request, visit: +remote: https://gitlab-instance.com/my-group/my-project/merge_requests/new?merge_request%5Bsource_branch%5D=my-new-branch +``` + +复制该链接并将其粘贴到浏览器中,将显示" [**新合并请求"页面**](#new-merge-request-page) . + +在[通过命令行推送时](../push_options.html) , [还可以向命令添加](../push_options.html)一些[标志,](../push_options.html)以减少通过 UI 手动编辑合并请求的需要. + +如果您没有通过命令行将分支推送到 GitLab(例如,您使用 Git CLI 应用程序来推送更改),则可以通过单击" [**创建合并请求"**](#create-merge-request-button)按钮通过 GitLab UI [**创建合并请求**](#create-merge-request-button) . + +## New merge request from an issue[](#new-merge-request-from-an-issue "Permalink") + +您也可以[直接从 issue 创建一个新的合并请求](../repository/web_editor.html#create-a-new-branch-from-an-issue) . + +## New merge request from the Merge Requests page[](#new-merge-request-from-the-merge-requests-page "Permalink") + +您可以通过在项目中的" **合并请求"**页面上单击" **新建合并请求"**按钮来开始创建新的合并请求. 然后选择包含更改的源项目和分支,以及要将更改合并到的目标项目和分支. 单击**比较分支,然后继续**转到" [**新合并请求"**页面](#new-merge-request-page)并填写详细信息. + +## New merge request from a fork[](#new-merge-request-from-a-fork "Permalink") + +分叉项目并应用本地更改后,请完成以下步骤,从您的 fork 创建一个合并请求以贡献回主项目: + +1. 转到**项目>您的项目,**然后选择存储库的分支. +2. 在左侧菜单中,转到**合并请求** ,然后点击**新建合并请求** . +3. 在" **源分支"**下拉列表框中,在分支的存储库中选择您的分支作为源分支. +4. 在" **目标分支"**下拉列表框中,从上游存储库中选择分支作为目标分支. +5. 输入凭据后,单击" **比较分支",然后继续**将本地更改与上游存储库进行比较. +6. 分配用户以查看您的更改,然后点击**提交合并请求** . + +合并更改后,您的更改将按照规范添加到上游存储库和分支中. 合并工作后,如果您不想对上游项目做出任何其他贡献,则可以通过[删除分支关系](../settings/index.html#removing-a-fork-relationship) ,在**Settings> Advanced Settings**部分[中将 fork 与](../settings/index.html#removing-a-fork-relationship)上游项目断开链接. + +有关更多详细信息, [请参阅分叉工作流文档](../repository/forking_workflow.html) . + +## New merge request by email[](#new-merge-request-by-email-core-only "Permalink") + +*要使用此功能,需要由 GitLab 管理员配置[传入电子邮件](../../../administration/incoming_email.html)才能使用.* 它在 GitLab.com 中不可用. + +您可以通过将电子邮件发送到特定于用户的电子邮件地址来创建新的合并请求. 通过单击**将新的合并请求**通过**电子邮件发送到该项目**按钮,可以在合并请求页面上获取地址. 该主题将用作新合并请求的源分支名称,而目标分支将是项目的默认分支. 消息正文(如果不为空)将用作合并请求描述. 您需要启用["通过电子邮件回复"](../../../administration/reply_by_email.html)才能使用此功能. 如果您的实例未启用它,则可以要求您的 GitLab 管理员这样做. + +这是一个私人电子邮件地址,仅为您生成. **将其保存在自己**手中,因为拥有它的任何人都可以像您一样创建问题或合并请求. 您可以将此地址添加到您的联系人列表中以便于访问. + +[![Create new merge requests by email](img/4f0a47acf91c1135738d76e1c06eec3a.png)](img/create_from_email.png) + +*在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 但是,仍支持较旧的格式,从而允许现有别名或联系人继续工作.* + +### Adding patches when creating a merge request via e-mail[](#adding-patches-when-creating-a-merge-request-via-e-mail "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22723) . + +您可以通过将补丁添加为电子邮件的附件,将提交添加到正在创建的合并请求中. 文件名以`.patch`结尾的所有附件都将被视为补丁程序,并将按名称顺序对其进行处理. + +补丁的总大小可以是 2MB. + +如果主题的源分支不存在,那么将从存储库的 HEAD 或指定的目标分支创建源分支以应用补丁. 可以使用[`/target_branch`快速操作](../quick_actions.html)指定目标分支. 如果源分支已经存在,则将在其顶部应用补丁. + +## Reviewing and managing Merge Requests[](#reviewing-and-managing-merge-requests "Permalink") + +提交合并请求后,可以通过 GitLab 进行[审查和管理](reviewing_and_managing_merge_requests.html) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" new file mode 100644 index 0000000000000000000000000000000000000000..50b0e54993cf9e7e0431e80fbab2345d1bbe86df --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\220\210\345\271\266\350\257\267\346\261\202\347\211\210\346\234\254.md" @@ -0,0 +1,41 @@ +# 合并请求版本[](#合并请求版本 "Permalink") + +每次您推送到与合并请求绑定的分支时,都会创建新版本的合并请求 diff. 当您访问包含多个推送的合并请求时,可以选择并比较那些合并请求差异的版本. + +[![Merge request versions](img/0d2f752f5d8c7352da5333f4f0d27835.png)](img/versions.png) + +## Selecting a version[](#selecting-a-version "Permalink") + +默认情况下,显示更改的最新版本. 但是,您可以从版本下拉列表中选择一个较旧的版本. + +[![Merge request versions dropdown](img/1864a1996bbb1636d65648dd8b0857df.png)](img/versions_dropdown.png) + +合并请求版本基于推送而不是提交. 因此,如果您单次推送了 5 次提交,那么下拉菜单中的选项就是一个. 如果您按了 5 次,则算上 5 个选项. + +您还可以将合并请求版本与旧版本进行比较,以查看此后发生了什么变化. + +[![Merge request versions compare](img/f0a8b71ac0a74f03724937e45e8782b9.png)](img/versions_compare.png) + +在查看过时的合并版本或与基本版本以外的版本进行比较时,将禁用注释. + +每次将新更改推送到分支时,系统都会显示一个用于比较最后更改的链接. + +[![Merge request versions system note](img/8201105b83669750c4d60036b41f6c6d.png)](img/versions_system_note.png) + +## Find the merge request that introduced a change[](#find-the-merge-request-that-introduced-a-change "Permalink") + +在 GitLab 10.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/2383) . + +在查看提交详细信息页面时,GitLab 将链接到包含该提交的合并请求(或合并请求,如果存在多个). + +这仅适用于最新版本的合并请求中的提交-如果某个提交位于合并请求中,然后根据该合并请求重新建立基础,则不会链接它们. + +## `HEAD` comparison mode for Merge Requests[](#head-comparison-mode-for-merge-requests "Permalink") + +在 GitLab 12.10 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/27008) . + +合并请求(尤其是" **更改"**选项卡)是查看和讨论源代码的地方. 在目标分支被合并到合并请求的源分支的情况下,源分支和目标分支中的更改可以显示为混合在一起,这使得很难理解目标分支中正在添加哪些更改以及已经存在哪些更改. + +在 GitLab 12.10 中,我们添加了一个比较模式,该模式显示了通过模拟合并后的差异计算出的差异-更准确地表示更改,而不是使用两个分支的基础. 通过选择**master(HEAD),**可以从比较目标下拉列表中使用新模式. 将来它将[替换](https://gitlab.com/gitlab-org/gitlab/-/issues/198458)当前的默认比较. + +[![Merge request versions compare HEAD](img/3478cae6da4e529f7c9cf2f4e71dd462.png)](img/versions_compare_head_v12_10.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\277\253\350\277\233\345\220\210\345\271\266.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\277\253\350\277\233\345\220\210\345\271\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..1f5ba4234e5fa9d53b8227cc36e3dbaa9febc2bd --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\345\277\253\350\277\233\345\220\210\345\271\266.md" @@ -0,0 +1,29 @@ +# 快进合并请求[](#快进合并请求 "Permalink") + +有时,工作流策略可能会强制要求没有合并提交的干净提交历史记录. 在这种情况下,快速合并是理想的选择. + +使用快速转发合并请求,您可以保留线性 Git 历史记录以及一种无需创建合并提交即可接受合并请求的方法. + +## Overview[](#overview "Permalink") + +启用快进合并( [`--ff-only`](https://git-scm.com/docs/git-merge#git-merge---ff-only) )设置时,将不会创建任何合并提交,并且所有合并都将被快速转发,这意味着仅当分支可以被快速转发时才允许合并. + +当无法进行快速合并时,将为用户提供重新设置基准的选项. + +## Enabling fast-forward merges[](#enabling-fast-forward-merges "Permalink") + +1. 导航到项目的**设置,**然后搜索"合并方法" +2. 选择**快速合并**选项 +3. 点击**保存更改**以使更改生效 + +现在,当您访问合并请求页面时, **只有在可能进行快速**合并的情况下,您才能接受它. + +[![Fast forward merge request](img/50ab118d473b61d3d08773d6ea65a8ac.png)](img/ff_merge_mr.png) + +如果无法进行快速合并,但可以进行无冲突的变基,则将提供一个变基按钮. + +[![Fast forward merge request](img/51192310b3785dec5f60b6d59717a7a6.png)](img/ff_merge_rebase.png) + +如果目标分支位于源分支的前面,并且无法进行无冲突的变基,则需要先在本地对源分支进行变基,然后才能进行快速合并. + +[![Fast forward merge rebase locally](img/d241e2868510cfa5755170c1f02c78f3.png)](img/ff_merge_rebase_locally.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\215\211\347\250\277.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\215\211\347\250\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..784ef93df1c39e2f6c3f5c32025ac5c82de83a97 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\215\211\347\250\277.md" @@ -0,0 +1,30 @@ +# 草稿[](#草稿 "Permalink") + +如果合并请求尚未准备好进行合并(可能是由于持续的开发或开放的线程),则可以通过将其标记为**Draft**来阻止在合并之前接受该合并请求. 这将禁用"合并"按钮,从而防止其被合并,并且在删除"草稿"标志之前它将保持禁用状态. + +[![Blocked Merge Button](img/284b72b1bfc8d5679fdaa384932b3b8c.png)](img/draft_blocked_merge_button_v13_2.png) + +## Adding the “Draft” flag to a merge request[](#adding-the-draft-flag-to-a-merge-request "Permalink") + +在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32692)的在进行中(WIP)合并请求已重命名为**Draft** . 在 GitLab 14.0 中将删除对使用**WIP 的**支持. + +There are several ways to flag a merge request as a Draft: + +* 将`[Draft]` , `Draft:`或`(Draft)`到合并请求标题的开头. 单击标题框下的" **以草稿开始标题:** ",在编辑合并请求的描述时将具有相同的效果. +* **不推荐使用**将`[WIP]`或`WIP:`添加到合并请求标题的开头. **WIP**仍然有效,但不赞成使用**Draft** . 它将在下一个主要版本(GitLab 14.0)中删除. +* 在合并请求的注释中添加`/wip` [快速操作](../quick_actions.html#quick-actions-for-issues-merge-requests-and-epics) . 这是一个切换,可以重复进行以将状态改回. 请注意,注释中的任何其他文本将被丢弃. +* 将`draft:`或`Draft:`添加到针对合并请求的源分支的提交消息的开头. 这不是切换,并且在另一次提交中再次执行将无效. + +## Removing the “Draft” flag from a merge request[](#removing-the-draft-flag-from-a-merge-request "Permalink") + +与上述类似,当准备合并请求时,可以通过以下几种方式删除" `Draft`标志: + +* 从合并请求标题的开头删除`[Draft]` , `Draft:`或`(Draft)` . 在编辑合并请求的描述时,在标题框下单击" **从标题中删除草稿:"前缀** ,将具有相同的效果. +* 在合并请求的注释中添加`/wip` [快速操作](../quick_actions.html#quick-actions-for-issues-merge-requests-and-epics) . 这是一个切换,可以重复进行以将状态改回. 请注意,注释中的任何其他文本将被丢弃. +* 点击靠近合并请求描述底部的**解决草案状态**按钮,旁边的**合并**按钮(见[上面的图片](#draft-merge-requests) ). 必须对该项目至少具有开发人员级别的权限,该按钮才可见. + +## Including/excluding WIP merge requests when searching[](#includingexcluding-wip-merge-requests-when-searching "Permalink") + +查看/搜索合并请求列表时,可以通过在搜索框中添加" WIP"过滤器,然后选择"是"(包括)或"否"(排除)来选择包括或排除 WIP 合并请求. + +[![Filter WIP MRs](img/fa591f90dc1e8840fe7fd692f24dcffe.png)](img/filter_wip_merge_requests.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..efa605ef8a09d99c13d021dde684939a48790802 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" @@ -0,0 +1,43 @@ +# 解决合并冲突[](#解决合并冲突 "Permalink") + +当两个分支具有无法自动合并的不同更改时,将发生合并冲突. + +在大多数情况下,Git 能够自动合并分支之间的更改,但是在某些情况下,Git 需要您的帮助来手动解决冲突. 通常,当人们更改同一文件的相同部分时,这是必需的. + +在解决所有冲突之前,GitLab 将阻止合并请求. 冲突可以在本地解决,也可以在许多情况下在 GitLab 中解决(有关何时可用的信息,请参见可解决的[冲突](#conflicts-available-for-resolution) ). + +[![Merge request widget](img/c3174e54aed82ba15686b58fc97068f1.png)](img/merge_request_widget.png) + +**注意:** GitLab 通过在未自动合并到目标分支的源分支中创建合并提交来解决冲突. 这允许在合并更改之前对合并提交进行检查和测试,从而防止意外更改进入目标分支而无需检查或破坏构建. + +## Resolve conflicts: interactive mode[](#resolve-conflicts-interactive-mode "Permalink") + +在 GitLab 8.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5479) . + +单击此按钮将显示有冲突的文件列表,突出显示冲突部分: + +[![Conflict section](img/7a9e6a406ba2eb40638f2b43024b368b.png)](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[](#resolve-conflicts-inline-editor "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/6374) in GitLab 8.13. + +合并冲突解决编辑器允许更复杂的合并冲突,需要用户手动修改文件以解决冲突,才能从 GitLab 界面中解决. 使用**内联编辑**按钮打开编辑器. 确定更改后,请单击" **提交到源"分支**按钮. + +[![Merge conflict editor](img/7a5996be0f8e75beb29e443470d79ee6.png)](img/merge_conflict_editor.png) + +## Conflicts available for resolution[](#conflicts-available-for-resolution "Permalink") + +GitLab 允许解决以下所有条件均成立的文件中的冲突: + +* 该文件是文本,不是二进制 +* 该文件采用 UTF-8 兼容编码 +* 该文件尚未包含冲突标记 +* 添加了冲突标记的文件大小不超过 200 KB +* 该文件在两个分支中位于相同路径下 + +如果该合并请求中有冲突的任何文件均不满足所有这些条件,则无法在 UI 中解决该合并请求的冲突. + +此外,GitLab 不会在路径之外的重命名中检测到冲突. 例如,这不会造成冲突:在分支`a`执行`git mv file1 file2` ; 在分支`b` ,执行`git mv file1 file3` . 而是,合并请求合并后,两个文件都将出现在分支中. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..71ada7e352359f4873befbdc8f6276e125b8de5c --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" @@ -0,0 +1,261 @@ +# 评审及管理合并请求[](#评审及管理合并请求 "Permalink") + +合并请求是在 GitLab 项目中更改文件的主要方法. 通过[创建并提交合并请求](creating_merge_requests.html)来提出更改,然后将其审核并接受(或拒绝). + +## View project merge requests[](#view-project-merge-requests "Permalink") + +导航到" **项目">"合并请求",**以查看项目中的所有**合并请求** . + +当您访问项目的合并请求时,GitLab 会将它们显示在列表中,并且您可以使用可用的选项卡来快速按打开和关闭进行过滤. 您还可以[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) . + +[![Project merge requests list view](img/252e40c4dc029a21eb939cb40f715d34.png)](img/project_merge_requests_list_view.png) + +## View merge requests for all projects in a group[](#view-merge-requests-for-all-projects-in-a-group "Permalink") + +查看组中所有项目中的合并请求,包括组中所有后代子组的所有项目. 导航到**组>合并请求**以查看这些合并请求. 该视图还具有打开和关闭的合并请求选项卡. + +您可以从此处[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) . + +[![Group Issues list view](img/1c96e8d94988240b7dc68ae02dbea405.png)](img/group_merge_requests_list_view.png) + +## Semi-linear history merge requests[](#semi-linear-history-merge-requests "Permalink") + +将为每个合并创建一个合并提交,但是只有在可能进行快速合并的情况下才合并分支. 这样可以确保如果合并请求构建成功,则合并后目标分支构建也将成功. + +导航到项目的设置,在" **合并请求:合并"方法**下选择" **使用半线性历史** **合并合并"**选项,然后保存更改. + +## View changes between file versions[](#view-changes-between-file-versions "Permalink") + +**更改**选项卡位于主要合并请求详细信息下方,并且在讨论选项卡旁边,显示了分支或提交之间文件的更改. 这种对文件更改的视图也称为**diff** . 默认情况下,差异视图将合并请求分支中的文件与目标分支中的文件进行比较. + +The diff view includes the following: + +* 文件的名称和路径. +* 添加和删​​除的行数. +* 用于以下选项的按钮: + * 切换此文件的注释; 用于内联评论. + * 在合并请求的分支中编辑文件. + * 显示完整文件,以防您要查看上下文中文件其余部分的更改. + * 在当前提交时查看文件. + * 使用[Review Apps](../../../ci/review_apps/index.html)预览更改. +* 已更改的行,突出显示了特定的更改. + +[![Example screenshot of a source code diff](img/1a3f578f317c266ca4b5d61eb91d025b.png)](img/merge_request_diff_v12_2.png) + +### Merge request diff file navigation[](#merge-request-diff-file-navigation "Permalink") + +在" **更改"**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异. 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件. + +[![Merge request diff file navigation](img/65770b50cd2119e84c6a852b44cf403d.png)](img/merge_request_diff_file_navigation.png) + +### File-by-file diff navigation[](#file-by-file-diff-navigation "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/222790) . +* 它部署在默认情况下启用的功能标志后面. +* 建议用于生产. +* 在 GitLab.com 上启用了它. +* 对于 GitLab 自我管理的实例,GitLab 管理员可以选择[禁用它](#enable-or-disable-file-by-file-diff-navigation-core-only) . + +对于较大的合并请求,有时一次查看单个文件可能会很有用. 要启用,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"首选项"** . 向下滚动到" **行为"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用. + +从那里,在查看合并请求的" **更改"**选项卡时,一次只能看到一个文件. 然后,您可以单击按钮上**一个**和**下一个**以查看其他已更改的文件. + +[![File-by-file diff navigation](img/7887f58c141f9c2e749a75158e430ac6.png)](img/file_by_file_v13_2.png) + +#### Enable or disable file-by-file diff navigation[](#enable-or-disable-file-by-file-diff-navigation-core-only "Permalink") + +逐文件差异导航正在开发中,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/feature_flags.html)可以选择为您的实例禁用它. + +要启用它: + +``` +# Instance-wide +Feature.enable(:view_diffs_file_by_file) +``` + +禁用它: + +``` +# Instance-wide +Feature.disable(:view_diffs_file_by_file>) +``` + +### Merge requests commit navigation[](#merge-requests-commit-navigation "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18140) in GitLab 13.0. + +要在合并请求中的**提交**之间无缝导航,请从" **提交"**选项卡中,单击其中一个提交以打开单提交视图. 从那里,您可以通过单击页面右上角的**Prev**和**Next**按钮或使用`X`和`C`键盘快捷键在提交之间进行导航. + +### Incrementally expand merge request diffs[](#incrementally-expand-merge-request-diffs "Permalink") + +默认情况下,差异仅显示文件中已更改的部分. 要查看更改上方或下方的更多未更改行,请单击" **向上** **扩展"**或" **向下扩展"**图标. 您也可以单击**显示未更改的行**以展开整个文件. + +[![Incrementally expand merge request diffs](img/da60a36cf66e162640faa1f6cddaacdc.png)](img/incrementally_expand_merge_request_diffs_v12_2.png) + +在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/205401) ,当查看合并请求的**更改**选项卡时,如果仅重命名了某个文件,则可以通过单击**显示文件内容**展开它以查看全部**内容** . + +### Ignore whitespace changes in Merge Request diff view[](#ignore-whitespace-changes-in-merge-request-diff-view "Permalink") + +如果单击" **隐藏空白更改"**按钮,则可以看到没有空白更改的差异(如果有的话). 在特定的提交页面上,这也可以工作. + +[![MR diff](img/1a097c142decf7d516165322a0f7b880.png)](img/merge_request_diff.png) + +> **提示:**您可以在合并请求的差异页面上附加`?w=1` ,以忽略任何空格更改. + +## Perform inline code reviews[](#perform-inline-code-reviews "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/13950) . + +GitLab 提供了一种在合并请求中更改文件的任何部分中保留注释的方法. 为此,请在"合并请求"差异 UI 的装订线中单击**…**按钮以展开差异行并留下评论,就像更改行一样. + +[![Comment on any diff file line](img/9aa51957855aec8590e352694fe75d5d.png)](img/comment-on-any-diff-line.png) + +## Pipeline status in merge requests widgets[](#pipeline-status-in-merge-requests-widgets "Permalink") + +如果您在项目中设置了[GitLab CI / CD](../../../ci/README.html) ,您将能够看到: + +* 合并前和合并后管道以及环境信息(如果有). +* 正在进行哪些部署. + +如果存在[环境](../../../ci/environments/index.html)并且已将应用程序成功部署到该环境,则还将显示已部署的环境以及指向 Review App 的链接. + +### Post-merge pipeline status[](#post-merge-pipeline-status "Permalink") + +合并请求合并后,可以看到合并请求合并到的分支的合并后管道状态. 例如,当合并请求合并到 master 分支中,然后触发到暂存环境的部署时. + +将显示正在进行的部署,以及环境的部署/部署状态. 如果是第一次部署分支,则该链接将返回`404`错误,直到完成. 在部署期间,停止按钮将被禁用. 如果管道无法部署,则部署信息将被隐藏. + +[![Merge request pipeline](img/1c4eef7cdb82fd840a9facad4ee93d6b.png)](img/merge_request_pipeline.png) + +有关更多信息,请[阅读有关管道](../../../ci/pipelines/index.html) . + +### Merge when pipeline succeeds (MWPS)[](#merge-when-pipeline-succeeds-mwps "Permalink") + +设置一个看起来准备合并的合并请求,以[在 CI 管道成功时自动合并](merge_when_pipeline_succeeds.html) . + +### Live preview with Review Apps[](#live-preview-with-review-apps "Permalink") + +如果为项目配置了[Review Apps](https://about.gitlab.com/stages-devops-lifecycle/review-apps/) ,则可以逐分支预览通过合并请求提交给功能分支的更改. 无需检出分支机构,在本地安装和预览; 带有"评论应用"链接的任何人都可以预览所有更改. + +设置了 GitLab 的" [路线图"后](../../../ci/review_apps/index.html#route-maps) ,合并请求小部件会将您直接带到已更改的页面,从而使预览建议的修改变得更加轻松快捷. + +[Read more about Review Apps](../../../ci/review_apps/index.html). + +## Associated features[](#associated-features "Permalink") + +还有大量与合并请求关联的功能: + +| Feature | Description | +| --- | --- | +| [Bulk editing merge requests](../../project/bulk_editing.html) | 同时更新多个合并请求的属性. | +| [Cherry-pick changes](cherry_pick_changes.html) | 只需在合并的合并请求或提交中单击**Cherry-pick**按钮,即可在 UI 中 Cherry-pick 任何**选择** . | +| [Fast-forward merge requests](fast_forward_merge.html) | 有关线性 Git 历史记录以及接受合并请求而不创建合并提交的方法 | +| [Find the merge request that introduced a change](versions.html) | 当查看提交详细信息页面时,GitLab 将链接到包含该提交的合并请求. | +| [Merge requests versions](versions.html) | 选择并比较合并请求差异的不同版本 | +| [Resolve conflicts](resolve_conflicts.html) | GitLab 可以提供选项来解决 GitLab UI 中的某些合并请求冲突. | +| [Revert changes](revert_changes.html) | 从合并请求中的任何提交还原更改. | + +## Troubleshooting[](#troubleshooting "Permalink") + +有时,合并请求中的操作并没有按预期进行,这是一些故障排除步骤. + +### Merge request cannot retrieve the pipeline status[](#merge-request-cannot-retrieve-the-pipeline-status "Permalink") + +如果 Sidekiq 没有足够快地进行更改,则会发生这种情况. + +#### Sidekiq[](#sidekiq "Permalink") + +Sidekiq 没有足够快地处理 CI 状态更改. 请等待几秒钟,状态将自动更新. + +#### Bug[](#bug "Permalink") + +发生以下情况时,无法检索合并请求管道的状态: + +1. 创建合并请求 +2. 合并请求已关闭 +3. 在项目中进行了更改 +4. 合并请求被重新打开 + +要正确检索管道状态,请再次关闭并重新打开"合并请求". + +## Tips[](#tips "Permalink") + +以下是一些技巧,可帮助您在命令行中更有效地处理合并请求. + +> **注意:**此部分将来可能会在其自己的文档中移动. + +### Checkout merge requests locally[](#checkout-merge-requests-locally "Permalink") + +合并请求包含来自存储库的所有历史记录,以及添加到与合并请求关联的分支的其他提交. 这是一些在本地检出合并请求的技巧. + +请注意,即使源项目是目标项目的分支(甚至是私有分支),也可以在本地签出合并请求. + +#### Checkout locally by adding a Git alias[](#checkout-locally-by-adding-a-git-alias "Permalink") + +将以下别名添加到`~/.gitconfig` : + +``` +[alias] + mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' - +``` + +现在,您可以从任何存储库和任何远程签出特定的合并请求. 例如,要从`origin`远程服务器签出 ID 为 5 的合并请求(如 GitLab 所示),请执行以下操作: + +``` +git mr origin 5 +``` + +这会将合并请求提取到本地`mr-origin-5`分支中,并检出它. + +#### Checkout locally by modifying `.git/config` for a given repository[](#checkout-locally-by-modifying-gitconfig-for-a-given-repository "Permalink") + +在`.git/config`文件中找到适用于 GitLab 遥控器的部分. 看起来像这样: + +``` +[remote "origin"] + url = https://gitlab.com/gitlab-org/gitlab-foss.git + fetch = +refs/heads/*:refs/remotes/origin/* +``` + +您可以使用以下方式打开文件: + +``` +git config -e +``` + +现在,将以下行添加到上面的部分: + +``` +fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* +``` + +最后,它应如下所示: + +``` +[remote "origin"] + url = https://gitlab.com/gitlab-org/gitlab-foss.git + fetch = +refs/heads/*:refs/remotes/origin/* + fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* +``` + +现在,您可以获取所有合并请求: + +``` +git fetch origin + +... +From https://gitlab.com/gitlab-org/gitlab-foss.git + * [new ref] refs/merge-requests/1/head -> origin/merge-requests/1 + * [new ref] refs/merge-requests/2/head -> origin/merge-requests/2 +... +``` + +并检查特定的合并请求: + +``` +git checkout origin/merge-requests/1 +``` + +以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\277\230\345\216\237.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\277\230\345\216\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..fc06bbf6faba1ddcb0bfb4728a595b3dbab18b0e --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\220\210\345\271\266\350\257\267\346\261\202/\350\277\230\345\216\237.md" @@ -0,0 +1,33 @@ +# 还原[](#还原 "Permalink") + +您可以使用 Git 的强大功能,通过在合并请求和提交详细信息中单击" **还原"**按钮来[还原任何提交](https://git-scm.com/docs/git-revert "Git 恢复文档") . + +## Reverting a merge request[](#reverting-a-merge-request "Permalink") + +**注意:** " **还原"**按钮仅可用于自 GitLab 8.5 起创建的合并请求. 但是,您仍然可以通过从"提交"页面列表中还原合并提交来还原合并请求.**注意:**仅对使用合并方法"合并提交"的项目显示" **还原"**按钮,该方法可以在项目的**"设置">"常规">"合并请求"**下**设置** . 无法通过 MR 视图还原[快进提交](fast_forward_merge.html) . + +合并请求合并后,将有一个**还原**按钮可用于还原该合并请求引入的更改. + +[![Revert Merge Request](img/fe7d77556848be98a93c7b6516b0e6f8.png)](img/cherry_pick_changes_mr.png) + +单击该按钮后,将出现一个模式,您可以在其中选择将更改直接还原到所选分支中,也可以选择使用还原更改创建新的合并请求. + +合并请求恢复后," **恢复"**按钮将不再可用. + +## Reverting a commit[](#reverting-a-commit "Permalink") + +您可以从提交详细信息页面还原提交: + +[![Revert commit](img/b4e821b8b83e29e837f01f4620e557b7.png)](img/cherry_pick_changes_commit.png) + +与还原合并请求类似,您可以选择将更改直接还原到目标分支中,也可以选择创建新的合并请求以还原更改. + +恢复提交后," **恢复"**按钮将不再可用. + +请注意,还原合并提交时,主线将始终是第一父级. 如果要使用其他主线,则需要从命令行执行. + +这是一个使用第二个父级作为主线还原合并提交的快速示例: + +``` +git revert -m 2 7a39eb0 +``` \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/Github.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/Github.md" new file mode 100644 index 0000000000000000000000000000000000000000..7f81bfdca3caf41b6b0cc4733675ec7a4d9559d6 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/Github.md" @@ -0,0 +1,106 @@ +# 从Github导入[](#从Github导入 "Permalink") + +使用导入器,您可以将 GitHub 存储库导入 GitLab.com 或自管理的 GitLab 实例. + +## Overview[](#overview "Permalink") + +**注意:**这些说明适用于 GitLab.com 上的用户,但是如果您是自助 GitLab 实例的管理员,或者要从 GitHub Enterprise 导入,则必须启用[GitHub 集成](../../../integration/github.html) . GitHub 集成是从 GitHub Enterprise 导入的唯一方法. 如果您使用的是 GitLab.com,则可以使用[个人访问令牌](#using-a-github-token)导入 GitHub 存储库,但不建议使用此方法,因为该方法无法将所有用户活动(例如问题和请求请求)与匹配的 GitLab 用户相关联. 如果您是自我管理的 GitLab 实例的管理员,则还可以使用[GitHub Rake 任务](../../../administration/raketasks/github_import.html)从 GitHub 导入项目,而不受 Sidekiq worker 的限制. + +导入了项目的以下方面: + +* 仓库描述(GitLab.com&7.7+) +* Git 存储库数据(GitLab.com&7.7+) +* 问题(GitLab.com 和 7.7+) +* 拉取请求(GitLab.com&8.4+) +* Wiki 页面(GitLab.com&8.4+) +* 里程碑(GitLab.com&8.7+) +* 标签(GitLab.com 和 8.7+) +* 发行说明说明(GitLab.com 和 8.12+) +* 拉取请求评论评论(GitLab.com&10.2+) +* 定期发布和请求请求注释 + +保留对拉取请求和问题的引用(GitLab.com&8.7+),并且每个导入的存储库都保持可见性级别,除非该[可见性级别受到限制](../../../public_access/public_access.html#restricting-the-use-of-public-or-internal-projects) ,在这种情况下,它默认为默认项目可见性. + +## How it works[](#how-it-works "Permalink") + +导入问题和请求请求时,导入程序会尝试在 GitLab 实例的数据库中查找其 GitHub 作者和受让人(请注意,请求请求在 GitLab 中称为"合并请求"). + +For this association to succeed, each GitHub author and assignee in the repository must meet one of the following conditions prior to the import: + +* 以前使用 GitHub 图标登录到 GitLab 帐户. +* 有一个 GitHub 帐户,其[主要电子邮件地址](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)与其 GitLab 帐户的电子邮件地址匹配. + +如果在 GitLab 的数据库中未找到项目中引用的用户,则将项目创建者(通常是启动导入过程的用户)设置为作者/受让人,但是会添加关于该问题的注释,其中提及原始 GitHub 作者. + +如果不存在任何新的名称空间(组),或者如果采用了名称空间,则导入器会创建存储库,该存储库将在启动导入过程的用户的名称空间下导入. 命名空间/存储库名称也可以使用适当的权限进行编辑. + +进口商还将在与未完成拉取请求相关的项目的分支上导入分支. 这些分支将以类似于`GH-SHA-username/pull-request-number/fork-name/branch`的命名方案导入. 与 GitHub 存储库相比,这可能导致分支中的差异. + +有关更多技术细节,您可以参考[GitHub Importer](../../../development/github_importer.html "使用 GitHub 导入器")开发人员文档. + +有关导入过程的概述,请参阅[从 GitHub 迁移到 GitLab](https://youtu.be/VYOXuOg9tQI)的视频. + +## Import your GitHub repository into GitLab[](#import-your-github-repository-into-gitlab "Permalink") + +### Using the GitHub integration[](#using-the-github-integration "Permalink") + +在开始之前,请确保要映射到 GitLab 用户的所有 GitHub 用户都具有以下任一条件: + +* 使用 GitHub 图标登录的 GitLab 帐户-或- +* 一个 GitLab 帐户,其电子邮件地址与 GitHub 用户的[公共电子邮件地址](https://help.github.com/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address)匹配 + +用户匹配尝试将按该顺序进行,并且如果两种方法均未识别到用户,则该活动将与执行导入的用户帐户相关联. + +**注意:**如果您使用的是自助式 GitLab 实例,或者要从 GitHub Enterprise 导入,则此过程要求您已配置[GitHub 集成](../../../integration/github.html) . + +1. 在顶部导航栏中,单击**+** ,然后选择**新建项目** . +2. 选择**导入项目**选项卡,然后选择**GitHub** . +3. 选择第一个按钮以**列出您的 GitHub 存储库** . 您将被重定向到[GitHub 上](https://github.com)的页面以授权 GitLab 应用程序. +4. 点击**授权 gitlabhq** . 您将被重定向回 GitLab 的 Import 页面,并列出所有 GitHub 存储库. +5. 继续[选择要导入的存储库](#selecting-which-repositories-to-import) . + +### Using a GitHub token[](#using-a-github-token "Permalink") + +**注意:**不建议使用个人访问令牌导入项目. 如果您是 GitLab.com 用户,则可以使用个人访问令牌从 GitHub 导入项目,但是该方法无法将所有用户活动(例如问题和请求请求)与匹配的 GitLab 用户关联. 如果您是自我管理的 GitLab 实例的管理员,或者要从 GitHub Enterprise 导入,则不能使用个人访问令牌. 建议所有用户使用[GitHub 集成方法(上述)](#using-the-github-integration) . 在" [如何工作"](#how-it-works)部分中了解更多信息. + +如果您不使用 GitHub 集成,则仍可以通过 GitHub 执行授权以授予 GitLab 访问您的存储库的权限: + +1. 转到[https://github.com/settings/tokens/new](https://github.com/settings/tokens/new) +2. 输入令牌描述. +3. 选择回购范围​​. +4. Click **生成令牌**. +5. 复制令牌哈希. +6. 返回到 GitLab 并将令牌提供给 GitHub 导入器. +7. 点击**列出您的 GitHub 存储库**按钮,并等待 GitLab 读取您的存储库信息. 完成后,将带您到导入器页面以选择要导入的存储库. + +### Selecting which repositories to import[](#selecting-which-repositories-to-import "Permalink") + +在授权访问 GitHub 存储库后,您将重定向到 GitHub 导入程序页面,并列出 GitHub 存储库. + +1. 默认情况下,建议的存储库名称空间与 GitHub 中存在的名称匹配,但是根据您的权限,您可以选择在继续导入任何名称之前编辑这些名称. +2. 选择任意数量的存储库旁边的**导入**按钮,或选择**导入所有存储库** . 此外,您可以按名称过滤项目. 如果应用了过滤器,则" **导入所有存储库"**仅导入匹配的存储库. +3. " **状态"**列显示每个存储库的导入状态. 您可以选择让页面保持打开状态,它将实时更新,也可以稍后返回. +4. 导入存储库后,单击其 GitLab 路径以打开其 GitLab URL. + +[![Github importer page](img/67f7d8117f3d6bf60fe4d5e03bca7b6e.png)](img/import_projects_from_github_importer_v12_3.png) + +## Mirroring and pipeline status sharing[](#mirroring-and-pipeline-status-sharing "Permalink") + +根据您的 GitLab 层,可以设置[项目镜像](../repository/repository_mirroring.html) ,以使导入的项目与其 GitHub 副本保持同步. + +此外,您可以配置 GitLab 以通过[GitHub Project Integration](../integrations/github.html)将管道状态更新发送回 GitHub. + +如果使用[CI / CD 作为外部存储库](../../../ci/ci_cd_for_external_repos/index.html)导入项目,则会自动配置以上两项. + +## Improving the speed of imports on self-managed instances[](#improving-the-speed-of-imports-on-self-managed-instances "Permalink") + +**注意:**必须具有对 GitLab 服务器的管理员访问权限. + +对于大型项目,可能需要一段时间才能导入所有数据. 为了减少必要的时间,您可以增加处理以下队列的 Sidekiq 工作程序的数量: + +* `github_importer` +* `github_importer_advance_stage` + +For an optimal experience, it’s recommended having at least 4 Sidekiq processes (each running a number of threads equal to the number of CPU cores) that *only* process these queues. It’s also recommended that these processes run on separate servers. For 4 servers with 8 cores this means you can import up to 32 objects (e.g., issues) in parallel. + +减少克隆存储库所花费的时间可以通过增加存储 Git 存储库(适用于您的 GitLab 实例)的磁盘的网络吞吐量,CPU 容量和磁盘性能(例如,使用高性能 SSD)来完成. 增加 Sidekiq 工作人员的数量*不会*减少克隆存储库所花费的时间. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/url\345\257\274\345\205\245.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/url\345\257\274\345\205\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..1fad93b282989889173b92d39a7d07adceec6012 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\257\274\345\205\245/url\345\257\274\345\205\245.md" @@ -0,0 +1,12 @@ +# 通过URL导入[](#通过URL导入 "Permalink") + +您可以通过提供 Git URL 来导入现有存储库: + +1. 在您的 GitLab 仪表板中,单击" **新建项目".** +2. 切换到**导入项目**选项卡 +3. 点击**按 URL 回购**按钮 +4. 填写" Git 存储库 URL"和其余项目字段 +5. 单击**创建项目**开始导入过程 +6. 完成后,您将被重定向到新创建的项目 + +[![Import project by repo URL](img/731943edb4428a3eb27c86d8d454d0e0.png)](img/import_projects_from_repo_url.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\276\275\347\253\240.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\276\275\347\253\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..86d831192504e0bd5c6df82206bc469d030bfad3 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\276\275\347\253\240.md" @@ -0,0 +1,50 @@ +# 徽章[](#徽章 "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 diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\277\253\351\200\237\346\223\215\344\275\234.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\277\253\351\200\237\346\223\215\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..5ad01deb4eff5b25243dfd53618fb6a20c92084a --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\345\277\253\351\200\237\346\223\215\344\275\234.md" @@ -0,0 +1,2 @@ +# 快速操作 + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\211\271\351\207\217\347\274\226\350\276\221.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\211\271\351\207\217\347\274\226\350\276\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..e0f013c17843478433e622671034a1f47c91eae8 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\211\271\351\207\217\347\274\226\350\276\221.md" @@ -0,0 +1,58 @@ +# 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 editing issues and merge requests at the project level](#bulk-editing-issues-and-merge-requests-at-the-project-level) +- [批量编辑 Issue 及合并请求](#批量编辑-issue-及合并请求) + - [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) + +# 批量编辑 Issue 及合并请求[](#批量编辑issue及合并请求 "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 diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\216\250\351\200\201\351\200\211\351\241\271.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\216\250\351\200\201\351\200\211\351\241\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..12d89147c8e772353f0e998f329d458ccedd3b00 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\216\250\351\200\201\351\200\211\351\241\271.md" @@ -0,0 +1,97 @@ +# 推送选项[](#推送选项 "Permalink") + +在 GitLab 11.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) . + +GitLab 支持使用客户端[Git 推送选项](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)在推送更改的同时执行各种操作. 此外, [推送规则](../../push_rules/push_rules.html)提供服务器端控制和实施选项. + +当前,有推送选项可用于: + +* [Skipping CI jobs](#push-options-for-gitlab-cicd) +* [Merge requests](#push-options-for-merge-requests) + +**注意:** Git 推送选项仅在 Git 2.10 或更高版本中可用. + +对于 2.10 至 2.17 版本的 Git,请使用`--push-option` : + +``` +git push --push-option=<push_option> +``` + +对于 2.18 及更高版本,可以使用以上格式,或更短的`-o` : + +``` +git push -o <push_option> +``` + +## Push options for GitLab CI/CD[](#push-options-for-gitlab-cicd "Permalink") + +您可以使用推入选项跳过 CI / CD 管道或传递环境变量. + +| 推送选项 | Description | 版本介绍 | +| --- | --- | --- | +| `ci.skip` | 不要为最新推送创建 CI 管道. | [11.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) | +| `ci.variable="<name>=<value>"` | 如果由于推送而创建了[环境变量](../../ci/variables/README.html) ,请提供要在 CI 管道中使用的[环境变量](../../ci/variables/README.html) . | [12.6](https://gitlab.com/gitlab-org/gitlab/-/issues/27983) | + +使用`ci.skip`的示例: + +``` +git push -o ci.skip +``` + +An example of passing some environment variables for a pipeline: + +``` +git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600" +``` + +## Push options for merge requests[](#push-options-for-merge-requests "Permalink") + +您可以在推送更改的同时使用 Git 推送选项对合并请求执行某些操作: + +| 推送选项 | Description | 版本介绍 | +| --- | --- | --- | +| `merge_request.create` | 为推送的分支创建一个新的合并请求. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.target=<branch_name>` | 将合并请求的目标设置为特定分支. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.merge_when_pipeline_succeeds` | 设置合并请求以[在其管道成功时](merge_requests/merge_when_pipeline_succeeds.html)进行[合并](merge_requests/merge_when_pipeline_succeeds.html) . | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) | +| `merge_request.remove_source_branch` | 设置合并请求以在合并时删除源分支. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.title="<title>"` | 设置合并请求的标题. 例如: `git push -o merge_request.title="The title I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.description="<description>"` | 设置合并请求的描述. 例如: `git push -o merge_request.description="The description I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) | +| `merge_request.label="<label>"` | 将标签添加到合并请求. 如果标签不存在,它将被创建. 例如,对于两个标签: `git push -o merge_request.label="label1" -o merge_request.label="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) | +| `merge_request.unlabel="<label>"` | 从合并请求中删除标签. 例如,对于两个标签: `git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) | + +如果您使用要求文本带有空格的 push 选项,则需要用引号( `"` )括起来.如果没有空格,则可以省略引号.例如: + +``` +git push -o merge_request.label="Label with spaces" +git push -o merge_request.label=Label-with-no-spaces +``` + +您可以通过使用多个`-o` (或`--push-option` )标志来组合推送选项以一次完成多个任务. 例如,如果您要创建一个新的合并请求,并定位一个名为`my-target-branch` : + +``` +git push -o merge_request.create -o merge_request.target=my-target-branch +``` + +此外,如果希望合并请求在管道成功后立即合并,则可以执行以下操作: + +``` +git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.merge_when_pipeline_succeeds +``` + +## Useful Git aliases[](#useful-git-aliases "Permalink") + +如上所示,Git 推送选项可能导致 Git 命令增长很长. 如果您经常使用相同的 push 选项,则创建[Git 别名会](https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases)很有用. Git 别名是 Git 的命令行快捷方式,可以大大简化长 Git 命令的使用. + +### Merge when pipeline succeeds alias[](#merge-when-pipeline-succeeds-alias "Permalink") + +要[在管道成功执行 Git push 选项时](#push-options-for-merge-requests)为[合并](#push-options-for-merge-requests)设置 Git 别名: + +``` +git config --global alias.mwps "push -o merge_request.create -o merge_request.target=master -o merge_request.merge_when_pipeline_succeeds" +``` + +然后,为了在管道成功时快速推送将针对 master 并合并的本地分支: + +``` +git mwps origin <local-branch-name> +``` \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\217\217\350\277\260\346\250\241\346\235\277.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\217\217\350\277\260\346\250\241\346\235\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..5e98c49032262bac4eed5454ea4e0a728eefc7e0 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\217\217\350\277\260\346\250\241\346\235\277.md" @@ -0,0 +1,117 @@ +# 描述模板[](#描述模板 "Permalink") + +我们都知道,项目开发人员更有可能及时解决提交的问题. + +使用描述模板,您可以为问题定义特定于上下文的模板,并为项目合并请求描述字段,并帮助从问题中过滤掉许多不必要的噪音. + +## Overview[](#overview "Permalink") + +通过使用描述模板,创建新发行或合并请求的用户可以选择描述模板,以帮助他们与其他贡献者进行有效沟通. + +每个 GitLab 项目都可以定义自己的一组描述模板,这些模板将被添加到 GitLab 项目存储库的根目录中. + +描述模板必须用[Markdown](../markdown.html)编写,并存储在项目的存储库中的`.gitlab`目录下. 仅考虑默认分支的模板. + +## Use-cases[](#use-cases "Permalink") + +* 添加一个模板,该模板将用于特定项目的每个问题,并提供说明和指南,要求提供特定于该主题的信息. 例如,如果您有一个用于跟踪新博客文章的项目,则可以要求标题,大纲,作者姓名,作者社交媒体信息等等. +* 在前面的示例之后,您可以为随新博客帖子提交的每个 MR 创建模板,要求提供有关帖子日期,前事数据,图像准则,相关问题的链接,审阅者姓名等信息. +* 您还可以为工作流的不同阶段创建问题并合并请求模板,例如功能建议,功能改进或错误报告. + +## Creating issue templates[](#creating-issue-templates "Permalink") + +在存储库的`.gitlab/issue_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +To create a Markdown file: + +1. 单击`master`旁边的`+`按钮,然后单击**New file** . +2. 将问题模板的名称添加到`master`旁边的**File name**文本字段中. 确保单词之间用下划线分隔,并且文件的扩展名为`.md` ,例如`feature_request.md` . +3. 提交并推送到您的默认分支. + +如果您的存储库中没有`.gitlab/issue_templates`目录,则需要创建它. + +要创建`.gitlab/issue_templates`目录: + +1. 单击`master`旁边的`+`按钮,然后选择**New directory** . +2. 将此新目录`.gitlab`并提交到默认分支. +3. 再次单击`master`旁边的`+`按钮,然后选择**New directory** .这次,n +4. 将目录`issue_templates`并提交到默认分支. + +要检查它是否正常工作,请[创建一个新问题,](./issues/managing_issues.html#create-a-new-issue)然后查看是否可以选择描述模板. + +## Creating merge request templates[](#creating-merge-request-templates "Permalink") + +与发布模板类似,在存储库的`.gitlab/merge_request_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +## Using the templates[](#using-the-templates "Permalink") + +让我们以创建了`.gitlab/issue_templates/Bug.md`文件`.gitlab/issue_templates/Bug.md` . 在创建或编辑问题时,这将启用`Bug`下拉选项. 选择`Bug` , `Bug.md`模板文件中的内容将被复制到问题描述字段. "重置模板"按钮将放弃您在选择模板后所做的任何更改,并将其恢复为初始状态. + +[![Description templates](img/6224c1a367d53cc7bb5c5536af96ec6e.png)](img/description_templates.png) + +## Setting a default template for merge requests and issues[](#setting-a-default-template-for-merge-requests-and-issues-starter "Permalink") + +版本历史 + +* 此功能是在[描述模板](#overview)之前引入的,可在[GitLab Starter 中使用](https://about.gitlab.com/pricing/) . 可以在项目设置中启用它. +* 问题模板在 GitLab EE 8.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28) . +* 在 GitLab EE 6.9 中[引入](https://gitlab.com/gitlab-org/gitlab/commit/7478ece8b48e80782b5465b96c79f85cc91d391b)了合并请求的模板. + +在项目的**"设置" /"可见性","项目功能","权限"**部分中,应将问题和/或合并请求的可见性设置为"每个人都可以访问"或"只有项目成员",否则模板文本区域将不会显示. 这是默认行为,因此在大多数情况下都可以. + +1. 转到项目的**"设置"** . +2. 单击**合并请求**标题下的**展开** . +3. 填写" **合并请求**的**默认描述模板"**文本区域. +4. Click **Expand** under **默认问题模板**. +5. 填写问题的**默认描述模板**文本区域. 由于 GitLab 合并请求和问题支持[Markdown](../markdown.html) ,因此您可以使用它来格式化标题,列表等. + +[![Default merge request description templates](img/c7ee3e55c50a5f7d0e3faceda16e2dc2.png)](img/description_templates_merge_request_settings.png) + +[![Default issue description templates](img/c9d2a45b5906d81d1118b63a832bbcd4.png)](img/description_templates_issue_settings.png) + +添加描述后,点击**保存更改**以使设置生效. 现在,每次创建新的合并请求或问题时,都将使用您在模板中输入的文本预先填充. + +## Description template example[](#description-template-example "Permalink") + +我们在 GitLab 社区版项目中使用问题和合并请求的描述模板. 请参考[`.gitlab`文件夹](https://gitlab.com/gitlab-org/gitlab/tree/master/.gitlab)中的一些示例. + +**提示:**可以在描述模板中使用[快速操作](quick_actions.html)来快速添加标签,受让人和里程碑. 仅当提交问题或合并请求的用户有权执行相关操作时,才执行快速操作. + +这是错误报告模板的示例: + +``` +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 diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\227\266\351\227\264\350\267\237\350\270\252.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\227\266\351\227\264\350\267\237\350\270\252.md" new file mode 100644 index 0000000000000000000000000000000000000000..f57d82674ea4e7904bb5d8dd3a2ddd0e8a79eb8a --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\227\266\351\227\264\350\267\237\350\270\252.md" @@ -0,0 +1,2 @@ +# 时间跟踪 + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\234\215\345\212\241\345\217\260.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\234\215\345\212\241\345\217\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..5e72493821ac19cb5f524b1a72d95d57be5742b2 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\234\215\345\212\241\345\217\260.md" @@ -0,0 +1,189 @@ +# 服务台[](#服务台 "Permalink") + +Version history + +* [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/149) in [GitLab Premium](https://about.gitlab.com/pricing/) 9.1. +* 在 13.0 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/214839) [GitLab Starter](https://about.gitlab.com/pricing/) . +* 在 13.2 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/215364) [GitLab Core](https://about.gitlab.com/pricing/) . + +## Overview[](#overview "Permalink") + +Service Desk 是一个模块,可让您的团队直接在 GitLab 内部通过电子邮件与任何外部方联系. 无需外部工具. 在构建软件的过程中进行的持续对话可确保用户反馈直接在需要的地方结束,从而帮助您构建正确的功能来解决用户的实际问题. + +借助 Service Desk,您可以为客户提供有效的电子邮件支持,他们现在可以通过电子邮件向您发送错误报告,功能请求或常规反馈,这些问题将作为新问题最终出现在您的 GitLab 项目中. 反过来,您的团队可以直接从项目中做出回应. + +由于 Service Desk 直接内置在 GitLab 中,因此消除了多种工具和外部集成的复杂性和低效率,从而大大缩短了从反馈到软件更新的周期时间. + +有关概述,请查看[GitLab 服务](https://about.gitlab.com/blog/2017/05/09/demo-service-desk/)台上的视频演示. + +## Use cases[](#use-cases "Permalink") + +例如,假设您为 iOS 或 Android 开发游戏. 该代码库托管在您的 GitLab 实例中,并通过 GitLab CI / CD 构建和部署. + +这是 Service Desk 为您工作的方式: + +1. 您向付费客户提供特定于项目的电子邮件地址,他们可以直接从应用程序内向您发送电子邮件. +2. 他们发送的每封电子邮件都会在相应的项目中产生一个问题. +3. 您的团队成员导航到 Service Desk 问题跟踪器,在这里他们可以查看新的支持请求并在内部相关问题中做出响应. +4. 您的团队与客户进行来回沟通以了解请求. +5. 您的团队开始着手实施代码以解决客户的问题. +6. 当您的团队完成实施后,合并请求将合并,问题将自动关闭. +7. 该客户将通过电子邮件成功出席,而无需真正访问您的 GitLab 实例. +8. 您的团队无需离开 GitLab(或设置任何集成)即可跟进客户,从而节省了时间. + +## How it works[](#how-it-works "Permalink") + +GitLab 服务台是一种简单的方法,使人们无需自己的用户帐户即可在您的 GitLab 实例中创建问题. + +它为最终用户提供了一个在项目中创建问题的唯一电子邮件地址,并且可以通过 GitLab 界面或通过电子邮件发送答复. 最终用户将仅通过电子邮件看到该主题. + +## Configuring Service Desk[](#configuring-service-desk "Permalink") + +**注意:**在 GitLab.com 上启用了 Service Desk. 您可以跳过下面的步骤 1; 您只需要为每个项目启用它. + +如果您具有项目维护者访问权限,则可以选择设置服务台. 请按照以下步骤操作: + +1. 为 GitLab 实例[设置传入电子邮件](../../administration/incoming_email.html#set-it-up) . + + * 我们建议使用[电子邮件子地址](../../administration/incoming_email.html#email-sub-addressing) ,但在 GitLab 11.7 及更高版本中,您也可以使用[全部接收邮箱](../../administration/incoming_email.html#catch-all-mailbox) . +2. 导航到项目的**"设置">"常规",**然后找到" **服务台"**部分. +3. 启用**激活服务台**切换. 这显示了一个唯一的电子邮件地址,可将问题发送给项目. 这些问题将是[机密的](issues/confidential_issues.html) ,因此它们仅对项目成员可见. 请注意,在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 仍然支持较旧的格式,但是允许现有的别名或联系人继续工作. + + **危险:**任何人都可以使用此电子邮件地址在此项目上创建问题,无论他们是否有权访问您的 GitLab 实例. 我们建议**将其放在别名后面,**以便可以根据需要进行更改,并在您的 GitLab 实例上**[启用 Akismet](../../integration/akismet.html)**来向该服务添加垃圾邮件检查. 畅通无阻的电子邮件垃圾邮件将导致创建许多垃圾邮件问题. + + 如果存储库中有[模板](description_templates.html) ,则可以选择从选择器菜单中选择一个[模板](description_templates.html) ,以将其附加到所有 Service Desk 问题上. + + [![Service Desk enabled](img/d32d8400522e9b5c9dd295fba00e1255.png)](img/service_desk_enabled.png) + +现在已为此项目启用 Service Desk! 您应该能够从项目导航的" **问题"**菜单中访问它. + +[![Service Desk Navigation Item](img/c42e6852cdd2c45b0a814f7a659ee5d2.png)](img/service_desk_nav_item.png) + +### Using customized email templates[](#using-customized-email-templates "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2460) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.7. + +当用户使用 Service Desk 提交新问题时,或在 Service Desk 问题上创建新便笺时,将向作者发送电子邮件. + +这些电子邮件的正文可以使用模板进行自定义. 要创建新的自定义模板,请在存储库的`.gitlab/service_desk_templates/`目录内创建一个新的 Markdown( `.md` )文件. 提交并推送到您的默认分支. + +#### Thank you email[](#thank-you-email "Permalink") + +**谢谢电子邮件**是用户提交问题后发送给用户的电子邮件. 模板的文件名必须为`thank_you.md` . 您可以使用`%{ISSUE_ID}`占位符,它将由电子邮件中的问题 IID 替换;而`%{ISSUE_PATH}`占位符,将由项目路径和问题 IID 替换. 由于服务台问题被创建为机密(只有项目成员才能看到),因此回复电子邮件中没有提供问题链接. + +#### New note email[](#new-note-email "Permalink") + +**新笔记电子邮件**是当用户提交的问题有新评论时发送给用户的电子邮件. 模板的文件名必须为`new_note.md` . 您可以使用`%{ISSUE_ID}`占位符(将在电子邮件中替换为问题 IID), `%{ISSUE_PATH}`占位符(将替换为项目路径)以及问题 IID 和`%{NOTE_TEXT}`占位符(将替换为注释文本) . + +### Using custom email display name[](#using-custom-email-display-name "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/7529) . + +您可以自定义电子邮件显示名称. 从服务台发送的电子邮件在" `From`标题中将具有此名称. 默认显示名称是`GitLab Support Bot` . + +### Using custom email address[](#using-custom-email-address "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/2201) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.0. + +**注意:**默认情况下禁用此功能. 有关启用它的步骤,请参阅[启用自定义电子邮件地址](#enable-custom-email-address) . + +如果在配置中启用了`service_desk_email`功能标记,则可以通过将电子邮件发送到自定义 Service Desk 电子邮件地址来创建 Service Desk 问题,该电子邮件地址应采用以下格式: `project_contact+%{key}@example.com` . + +`%{key}`部分用于查找应在其中创建问题的项目. `%{key}`部分组合了项目的路径和可配置的项目名称后缀: `<project_full_path>-<project_name_suffix>` . + +您可以在项目的服务台设置中设置项目名称后缀. 它只能包含小写字母( `az` ),数字( `0-9` )或下划线( `_` ). + +[![Setting custom Service Desk email address](img/210e34a4dbdbe21aba5083c6f7dac9cb.png)](img/service_desk_custom_email_address_v13_0.png) + +您可以将以下代码片段添加到您的配置中. + +从源安装的示例: + +``` +service_desk_email: + enabled: true + address: "project_contact+%{key}@example.com" + user: "project_support@example.com" + password: "[REDACTED]" + host: "imap.gmail.com" + port: 993 + ssl: true + start_tls: false + log_path: "log/mailroom.log" + mailbox: "inbox" + idle_timeout: 60 + expunge_deleted: true +``` + +Omnibus GitLab 安装示例: + +``` +gitlab_rails['service_desk_email_enabled'] = true + +gitlab_rails['service_desk_email_address'] = "project_contact+%{key}@gmail.com" + +gitlab_rails['service_desk_email_email'] = "project_support@gmail.com" + +gitlab_rails['service_desk_email_password'] = "[REDACTED]" + +gitlab_rails['service_desk_email_mailbox_name'] = "inbox" + +gitlab_rails['service_desk_email_idle_timeout'] = 60 + +gitlab_rails['service_desk_email_log_file'] = "/var/log/gitlab/mailroom/mail_room_json.log" + +gitlab_rails['service_desk_email_host'] = "imap.gmail.com" + +gitlab_rails['service_desk_email_port'] = 993 + +gitlab_rails['service_desk_email_ssl'] = true + +gitlab_rails['service_desk_email_start_tls'] = false +``` + +在这种情况下,假设`mygroup/myproject`项目 Service Desk 设置的项目名称后缀设置为`support` ,并且用户将电子邮件发送到`project_contact+mygroup-myproject-support@example.com` . 结果,将在`mygroup/myproject`项目中从此电子邮件中创建一个新的 Service Desk 问题. + +#### Enable custom email address[](#enable-custom-email-address "Permalink") + +默认情况下,此功能附带`service_desk_custom_address`功能标志. 要打开此功能,请要求具有 Rails 控制台访问权限的 GitLab 管理员运行以下命令: + +``` +Feature.enable(:service_desk_custom_address) +``` + +配置选项与配置[传入电子邮件](../../administration/incoming_email.html#set-it-up)相同. + +## Using Service Desk[](#using-service-desk "Permalink") + +### As an end user (issue creator)[](#as-an-end-user-issue-creator "Permalink") + +要创建服务台问题,最终用户无需了解有关 GitLab 实例的任何信息. 他们只是将电子邮件发送到给定的地址,然后收到一封确认回执的电子邮件: + +[![Service Desk enabled](img/3b8b0bcac599d7207d90ed8194bed83e.png)](img/service_desk_confirmation_email.png) + +这也使最终用户可以选择退订. + +如果他们不选择退订,那么添加到该问题的任何新评论都将作为电子邮件发送: + +[![Service Desk reply email](img/85055487485aff8bd5dc0cf97f711d52.png)](img/service_desk_reply.png) + +他们发送的所有回复都将显示在问题本身中. + +### As a responder to the issue[](#as-a-responder-to-the-issue "Permalink") + +For responders to the issue, everything works as usual. They will see a familiar looking issue tracker, where they can see issues created via customer support requests and filter and interact with them just like other GitLab issues. + +[![Service Desk Issue tracker](img/daa9468beb587bb748cbb9ec37bbb43f.png)](img/service_desk_issue_tracker.png) + +来自最终用户的消息将显示为来自特殊的支持机器人用户,但是除此之外,您可以像平常一样阅读和编写评论: + +[![Service Desk issue thread](img/1b69e9fcb692fa835e9b7e06fa856aee.png)](img/service_desk_thread.png) + +注意: + +* 项目的可见性(私有,内部,公共)不会影响 Service Desk. +* 项目的路径,包括其组或名称空间,将显示在电子邮件中. + +### Support Bot user[](#support-bot-user "Permalink") + +在后台,服务台由支持机器人的特殊用户创建问题. 该用户不计入许可证限制数. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\240\207\347\255\276.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\240\207\347\255\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..69ec11790ebe74939ffa97aac2b24953b291e679 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\346\240\207\347\255\276.md" @@ -0,0 +1,188 @@ +# 标签[](#标签 "Permalink") + +## Overview[](#overview "Permalink") + +随着您在 GitLab 中问题,合并请求和史诗数量的增长,跟踪这些项目变得越来越困难. 尤其是随着您的组织从只有几个人发展到成百上千. 标签就是在这里出现的.它们可以帮助您组织和标记工作,以便您可以跟踪和找到您感兴趣的工作项. + +标签是[发行板](issue_board.html)的关键部分. 使用标签,您可以: + +* 使用颜色和描述性标题(例如`bug` , `feature request`或`docs`对史诗,问题和合并请求进行分类. +* 动态过滤和管理史诗,问题和合并请求. +* [搜索问题列表,合并请求和史诗](../search/index.html#issues-and-merge-requests)以及[问题面板](../search/index.html#issue-boards) . + +## Project labels and group labels[](#project-labels-and-group-labels "Permalink") + +GitLab 中有两种类型的标签: + +* **项目标签**只能分配给该项目,并且只能合并该项目中的请求. +* 可以将**组标签**分配给选定组或其子组中的任何项目中的问题并合并请求. + * 也可以将它们分配给所选组或其子组中的史诗. + +## Assign and unassign labels[](#assign-and-unassign-labels "Permalink") + +每个问题,合并请求和史诗都可以分配任意数量的标签. 标签在右侧栏中管理,您可以在其中根据需要分配或取消分配标签. + +要将标签分配给问题,请合并请求或史诗: + +1. 在侧边栏的标签部分,点击**编辑** ,然后: + * 在列表中,单击所需的标签. 每个标签都带有复选标记. + * 通过输入搜索查询并单击搜索来查找标签( ),然后点击它们. 您可以反复搜索并添加更多标签. +2. 单击**X**或标签部分之外的任何位置,然后将应用标签. + +您也可以使用[`/assign @username`快速操作](quick_actions.html)来分配标签. + +## Label management[](#label-management "Permalink") + +具有 Reporter 或更高[权限级别](../permissions.html)的用户可以创建和编辑标签. + +### Project labels[](#project-labels "Permalink") + +通过转到项目并单击**问题>标签**来查看项目标签列表. 该列表包括在项目级别定义的所有标签,以及从直接父组继承的所有标签. 您可以通过在顶部输入搜索查询并点击搜索( ). + +要创建一个新的项目标签: + +1. 导航到项目中的" **问题">"标签** ". +2. 单击**新建标签**按钮. + * 输入标题. + * (可选)输入描述. + * (可选)通过单击可用颜色来选择背景颜色,或输入特定颜色的十六进制颜色值. +3. 单击**创建标签**以创建标签. + +您也可以从发布或合并请求中创建新的项目标签. 在问题或合并请求的右侧栏中的标签部分: + +1. Click **Edit**. +2. Click **创建项目标签**. + * 填写名称字段. 请注意,如果以此方式创建标签,则无法指定描述. 您可以稍后通过编辑标签来添加描述(请参见下文). + * (可选)通过单击可用颜色来选择颜色,或输入特定颜色的十六进制颜色值. +3. Click **Create**. + +创建标签后,您可以通过点击铅笔( ),或通过单击三个点( )旁边的" **订阅"**按钮,然后选择" **删除"** . + +#### Promote a project label to a group label[](#promote-a-project-label-to-a-group-label "Permalink") + +如果您以前创建了项目标签,现在想使其可用于同一组中的其他项目,则可以将其升级为组标签. + +如果同一组中的其他项目具有相同标题的标签,则它们将全部与新的组标签合并. 如果存在具有相同标题的组标签,则它也会被合并. + +所有发行,合并请求,发行板列表,发行板过滤器以及带有旧标签的标签订阅都将分配给新的组标签. + +警告: **警告:**提升标签是永久性的操作,不能撤消. + +要将项目标签提升为组标签: + +1. 导航到项目中的" **问题">"标签** ". +2. 单击三个点( )旁边的**订阅**按钮,然后选择**升级为组标签** . + +### Group labels[](#group-labels "Permalink") + +通过转到组并单击**问题>标签**来查看组标签列表. 该列表包括仅在组级别定义的所有标签. 它没有列出项目中定义的任何标签. 您可以通过在顶部输入搜索查询并点击搜索( ). + +要创建**组标签** ,请导航到**组中的"** **问题">"标签"** ,并按照与[创建项目标签](#project-labels)相同的过程进行操作. + +#### Create group labels from epics[](#create-group-labels-from-epics-ultimate "Permalink") + +您可以从 Epic 侧边栏创建组标签. 您创建的标签将属于该史诗所属的直接组. 该过程与根据[发布或合并请求](#project-labels)创建[项目标签](#project-labels)的过程相同. + +### Generate default labels[](#generate-default-labels "Permalink") + +如果项目或组没有标签,则可以从标签列表页面生成一组默认的项目或组标签. 如果列表为空,该页面将显示一个" **生成默认标签集"**按钮,单击该按钮会将以下默认标签添加到项目中: + +* `bug` +* `confirmed` +* `critical` +* `discussion` +* `documentation` +* `enhancement` +* `suggestion` +* `support` + +## Scoped labels[](#scoped-labels-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9175) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10. + +范围标签允许团队使用标签功能来注释问题,合并请求和具有互斥标签的史诗. 通过防止某些标签一起使用,可以启用更复杂的工作流程. + +当标签标题中使用特殊的双冒号( `::` :)语法时,该标签将成为作用域,例如: + +[![Sample scoped labels](img/eeadc0bb054ceec8f09d2c44982f4103.png)](img/labels_key_value_v12_1.png) + +issue,merge request 或 epic 不能具有形式为`key::value`且具有相同`key`两个范围标签. 使用相同的`key`添加一个新标签,但是使用不同的`value`将导致以前的`key`标签被新标签替换. + +用例示例: + +1. 一个问题被标识为低优先级,并向其添加了`priority::low`项目标签. +2. 经过更多审查后,问题优先级增加了,并添加了`priority::high`标签. +3. manbetx 客户端打不开会自动删除`priority::low`标签,因为一个问题不应同时具有两个优先级标签. + +### Workflows with scoped labels[](#workflows-with-scoped-labels "Permalink") + +假设您要在问题中创建一个自定义字段,以跟踪功能所针对的操作系统平台,而每个问题只应针对一个平台. 然后,您将创建三个标签`platform::iOS` , `platform::Android` , `platform::Linux` . 在给定的问题上应用这些标签中的任何一个都会自动删除以`platform::`开头的任何其他现有标签. + +可以将相同的模式应用于代表团队的工作流状态. 假设您具有标签以下标签`workflow::development` , `workflow::review`和`workflow::deployed` . 如果一个问题已经应用了标签`workflow::development` ,并且开发人员想要将该问题推进到`workflow::review` ,他们将简单地应用该标签,然后`workflow::development`标签将被自动删除. 当您在整个标签列表中移动的问题这种行为已经存在[问题板](issue_board.html#create-workflows) ,但现在,谁可能无法在一个问题板上工作的团队成员直接将仍然能够推进工作流程中的问题始终国家本身. + +在有关[将范围标签用于自定义字段和工作流](https://www.youtube.com/watch?v=4BCBby6du3c)的视频中演示了此功能. + +### Scoped labels with nested scopes[](#scoped-labels-with-nested-scopes "Permalink") + +创建标签时,可以使用多个双冒号`::`来创建具有嵌套作用域的标签. 在这种情况下,最后一个`::`之前的所有内容都将成为作用域. + +例如, `workflow::backend::review`和`workflow::backend::development`是有效的作用域标签,但是它们**不能同时**存在于同一问题上,因为它们都共享相同的作用域, `workflow::backend` . + +此外, `workflow::backend::review`和`workflow::frontend::review`是有效的范围标签,并且它们**可以同时**存在于同一问题上,因为它们都具有不同的范围, `workflow::frontend`和`workflow::backend` . + +## Subscribing to labels[](#subscribing-to-labels "Permalink") + +在项目标签列表页面和组标签列表页面中,您可以单击任何标签右侧的**订阅**以启用该标签的[通知](../profile/notifications.html) . 只要将标签分配给史诗,发行或合并请求,您就会收到通知. + +如果要从项目内订阅组标签,则可以选择仅订阅项目或整个组的标签通知. + +[![Labels subscriptions](img/074834195e0c24213cffeef5ef08a9e1.png)](img/labels_subscriptions_v12_1.png) + +## Label priority[](#label-priority "Permalink") + +版本历史 + +* 在 GitLab 8.9 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/14189) . +* 优先级排序仅基于最高优先级标签. [讨论中](https://gitlab.com/gitlab-org/gitlab/-/issues/14523)考虑改变这一点. + +标签可以具有相对优先级,在史诗,发布和合并请求列表页面的" **标签优先级"**和" **优先级"**排序顺序中使用. 组标签和项目标签的优先级都在项目级别进行,不能从组标签列表中进行. + +在项目标签列表页面上,在标签上加上星号以表明它具有优先级. + +[![Labels prioritized](img/2fe480e26b1b89b82607729986e5b13a.png)](img/labels_prioritized_v12_1.png) + +在列表中上下拖动已加星标的标签以更改其优先级,列表中的较高表示优先级较高. + +[![Drag to change label priority](img/9e837ca8522bced4f7b219416c893fe4.png)](img/labels_drag_priority_v12_1.gif) + +在史诗般的,合并请求和问题列表页面上(针对组和项目),您可以按`Label priority`或`Priority`进行排序. + +如果您按`Label priority`排序,则 GitLab 将使用以下排序比较顺序: + +1. 具有较高优先级标签的项目. +2. 没有优先标签的项目. + +领带被任意打破. 请注意,只会检查优先级最高的标签,而忽略优先级较低的标签. 有关更多信息,请参见此[相关问题](https://gitlab.com/gitlab-org/gitlab/-/issues/14523) . + +[![Labels sort label priority](img/3636c78ef6cb3ccc1462dd451c7f3efc.png)](img/labels_sort_label_priority.png) + +如果您按`Priority`排序,则 GitLab 将使用以下排序比较顺序: + +1. 具有里程碑的截止日期的项目,最早分配的[里程碑](milestones/index.html)在此列出. +2. 具有里程碑的项目,没有截止日期. +3. 具有较高优先级标签的项目. +4. 没有优先标签的项目. + +领带被任意打破. + +[![Labels sort priority](img/640bc8c28d8cd3035fbe0c4c1018d2d1.png)](img/labels_sort_priority.png) + +## Troubleshooting[](#troubleshooting "Permalink") + +### Some label titles end with `_duplicate<number>`[](#some-label-titles-end-with-_duplicatenumber "Permalink") + +在特定情况下,可以在同一名称空间中创建具有重复标题的标签. + +为了解决重复问题, [在 GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21384)和更高版本中,某些重复标签的标题后面`_duplicate<number>` . + +如果愿意,可以安全地更改这些标签的标题. 有关原始问题的详细信息,请参见[问题 30390](https://gitlab.com/gitlab-org/gitlab/issues/30390) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\347\234\213\346\235\277.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\347\234\213\346\235\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..7dff131abf9b63d44c4a3a45c1f98e3a219634c5 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\347\234\213\346\235\277.md" @@ -0,0 +1,404 @@ +# 看板[](#issue-boards "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5554) in [GitLab 8.11](https://about.gitlab.com/releases/2016/08/22/gitlab-8-11-released/#issue-board). + +## Overview[](#overview "Permalink") + +GitLab 发行板是一个软件项目管理工具,用于计划,组织和可视化功能或产品发布的工作流程. 它可以用作[看板](https://en.wikipedia.org/wiki/Kanban_(development))或[Scrum](https://en.wikipedia.org/wiki/Scrum_(software_development))板. + +它结合了问题跟踪和项目管理功能,将所有内容保持在同一位置,因此您无需在不同平台之间切换即可组织工作流程. + +使用问题板,您可以将问题组织在与其分配的标签相对应的列表中,从而在这些列表中可视化设计为卡片的问题. + +您定义流程,GitLab 会为您进行组织. 您添加标签,然后创建相应的列表以提取现有问题. 准备就绪后,可以将发行卡从一个步骤拖放到下一个步骤. + +[![GitLab issue board - Core](img/2a62cf1a17a5306e4d6cd91c30149941.png)](img/issue_boards_core.png) + +观看发布板功能的[视频演示](https://youtu.be/UWsJ8tkHAa8) (在 GitLab 8.11 中引入-2016 年 8 月). + +### Advanced features of issue boards[](#advanced-features-of-issue-boards "Permalink") + +* 每个项目创建多个发行板. +* 每个组创建多个发行板. +* 添加[受让人](#assignee-lists-premium)和[里程碑的](#milestone-lists-premium)列表. + +检查[GitLab Enterprise 的](#gitlab-enterprise-features-for-issue-boards)所有[功能是否有发行板](#gitlab-enterprise-features-for-issue-boards) . + +[![GitLab issue boards - Premium](img/e6522f2cefe000bb17275b2a0451bf82.png)](img/issue_boards_premium.png) + +## How it works[](#how-it-works "Permalink") + +发行板功能通过将 GitLab 现有的[发行跟踪功能](issues/index.html#issues-list)和[标签](labels.html)用作 Scrum 板的列表而建立. + +使用问题板,您可以对问题有不同的看法,同时保持在问题跟踪器中看到的相同过滤和排序功能. 发行板基于其项目的标签结构,因此它使用相同的描述性标签来指示在板上的位置,从而在整个开发生命周期中保持一致性. + +问题板向您显示团队正在处理的问题,分配给每个人的问题以及这些问题在工作流中的位置. + +您可以从一个平台创建问题,托管代码,执行审阅,构建,测试和部署. 问题板可帮助您在 GitLab 中可视化和管理整个过程. + +有了[多个发行板](#use-cases-for-multiple-issue-boards) ,您可以走得更远,因为您不仅可以从更广阔的角度组织自己和您的项目,每个项目使用一个发行板,还可以让您的团队成员通过在多个发行板中创建多个发行板来组织自己的工作流程.同一项目. + +## Use cases[](#use-cases "Permalink") + +有多种方法可以使用针对自己喜欢的工作流程量身定制的 GitLab 发行板. 这是发行板的一些常见用例. + +### Use cases for a single issue board[](#use-cases-for-a-single-issue-board "Permalink") + +借助 GitLab 工作流程,您可以讨论问题中的提案,使用标签对其进行分类,然后在其中使用问题委员会进行组织并确定优先级. + +例如,让我们考虑以下简化的开发工作流程: + +1. 您有一个托管应用程序代码库的存储库,而您的团队则在积极贡献代码. +2. 您的**后端**团队将开始新的实施工作,收集反馈和批准,并将其传递给**前端**团队. +3. 前端完成后,新功能将部署到要测试的**登台**环境中. +4. 成功后,它将部署到**生产中** . + +如果您具有标签" **后端** "," **前端** "," **暂存** "和" **生产** ",以及带有每个列表的发行板,则可以: + +* 可视化从开发生命周期开始到部署到生产的整个实现流程. +* 通过垂直移动优先顺序排列列表中的问题. +* 在列表之间移动问题,以根据您设置的标签进行整理. +* 通过选择一个或多个现有问题,将多个问题添加到板中的列表中. + +[![issue card moving](img/a1f2874d536bbec36fba8132d424e066.png)](img/issue_board_move_issue_card_list.png) + +### Use cases for multiple issue boards[](#use-cases-for-multiple-issue-boards "Permalink") + +借助[多个发行委员会](#multiple-issue-boards) ,每个团队可以拥有自己的董事会来单独组织其工作流程. + +#### Scrum team[](#scrum-team "Permalink") + +具有多个发行董事会,每个团队只有一个董事会. 现在,您可以在流程的每个部分中解决问题. 例如: **To Do** , **Doing**和**Done** . + +#### Organization of topics[](#organization-of-topics "Permalink") + +创建列表以按主题对问题进行排序,并快速在主题或组之间(例如**UX** , **Frontend**和**Backend**之间)进行更改. 更改反映在各个方面,因为更改列表会相应更新每个问题的标签. + +#### Advanced team handover[](#advanced-team-handover "Permalink") + +例如,假设我们有一个 UX 小组,其问题板包含: + +* **去做** +* **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[](#quick-assignments "Permalink") + +为每个团队成员创建列表,然后将问题快速拖放到每个团队成员的列表中. + +## Issue board terminology[](#issue-board-terminology "Permalink") + +**发行板**代表您的**发行**的独特视图. 它可以有多个列表,每个列表由卡代表的问题组成. + +**列表**是问题板上的一列,显示与某些属性匹配的问题. 除了默认的"打开"和"关闭"列表外,每个其他列表还显示与您选择的标签,受让人或里程碑匹配的问题. 在每个列表的顶部,您可以看到属于该问题的数量. 列表类型包括: + +* **开** (默认):不属于其他列表中的一个所有打开的问题. 始终显示为最左边的列表. +* **已关闭** (默认):所有已关闭的问题. 始终显示为最右边的列表. +* **标签列表** : **标签的**所有未解决问题. +* [**受让人列表**](#assignee-lists-premium) :分配给用户的所有未解决的问题. +* [**里程碑列表**](#milestone-lists-premium) : [**里程碑的**](#milestone-lists-premium)所有未解决的问题. + +**卡**是列表中的一个框,它代表一个问题. 您可以将卡片从一个列表拖动到另一个列表,以更改其标签,受让人或里程碑. 卡上显示的信息包括: + +* 发行标题 +* 相关标签 +* 发行数量 +* Assignee + +## Permissions[](#permissions "Permalink") + +具有[报告者和更高角色的](../permissions.html)用户可以使用发布板功能的所有功能来创建或删除列表,并将问题从一个列表拖动到另一个列表. + +## GitLab Enterprise features for issue boards[](#gitlab-enterprise-features-for-issue-boards "Permalink") + +GitLab 核心和 GitLab.com 免费层上均提供 GitLab 发行板,但某些高级功能仅在[更高层中提供](https://about.gitlab.com/pricing/) . + +### Summary of features per tier[](#summary-of-features-per-tier "Permalink") + +下表列出了在不同的[GitLab 层](https://about.gitlab.com/pricing/)中可用的不同发行板功能: + +| Tier | 项目发行委员会的数量 | Number of Group issue boards | 可配置的发行板 | 受让人名单 | +| --- | --- | --- | --- | --- | +| 核心/免费 | Multiple | 1 | No | No | +| 入门/青铜 | Multiple | 1 | Yes | No | +| 高级/白银 | Multiple | Multiple | Yes | Yes | +| 终极/金 | Multiple | Multiple | Yes | Yes | + +### Multiple issue boards[](#multiple-issue-boards "Permalink") + +版本历史 + +* 在 GitLab 8.13 中[引入](https://about.gitlab.com/releases/2016/10/22/gitlab-8-13-released/) . +* 每个项目有多个发行板[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53811) GitLab 12.1 中的[GitLab Core](https://about.gitlab.com/pricing/) . +* 每套[GitLab Premium 中](https://about.gitlab.com/pricing/)都有多个发行板. + +多个发行板允许给定项目或组使用多个发行板. 对于具有多个团队的大型项目,或者在使用存储库托管多个产品代码的情况下,这非常有用. + +使用菜单顶部的搜索框,您可以过滤列出的板. + +当您有十个或更多的板可用时,菜单中还会显示" **最近"**部分,其中包含最后四个被访问板的快捷方式. + +[![Multiple issue boards](img/dbb80511727781129d638c6d3413a45f.png)](img/issue_boards_multiple.png) + +当您在具有多个板的项目或组中重新访问问题板时,GitLab 会自动加载您上次访问的板. + +#### Create an issue board[](#create-an-issue-board "Permalink") + +要创建新的发行板: + +1. 单击"发行板"页面左上角的具有当前板名称的下拉菜单. +2. Click **创建新板**. +3. 输入新板的名称并选择其范围:里程碑,标签,受让人或权重. + +#### Delete an issue board[](#delete-an-issue-board "Permalink") + +要删除当前活动的发行板: + +1. 单击"发行板"页面左上角的具有当前板名称的下拉菜单. +2. Click **删除板**. +3. 单击**删除**进行确认. + +### Configurable issue boards[](#configurable-issue-boards-starter "Permalink") + +[Introduced](https://about.gitlab.com/releases/2017/11/22/gitlab-10-2-released/#issue-boards-configuration) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.2. + +发行板可以与 GitLab [里程碑](milestones/index.html#milestones) , [标签](labels.html) ,受让人和权重关联,它们会根据这些字段自动过滤发行板问题. 这使您可以根据团队的需要创建独特的董事会. + +[![Create scoped board](img/bba7007707d548d73c9b6f0efad3c50b.png)](img/issue_board_creation.png) + +您可以在创建木板时或单击"编辑木板"按钮来定义木板的范围. 将里程碑,受让人或权重分配给发行板后,您将不再能够在搜索栏中进行筛选. 为此,您需要从发行板上删除所需的范围(例如,里程碑,受让人或权重). + +[![Edit board configuration](img/0d59f9135c1fed79a51921909516ef69.png)](img/issue_board_edit_button.png) + +如果您在木板中没有编辑权限,则仍然可以通过点击**查看范围**来**查看**配置. + +[![Viewing board configuration](img/c01efbb34a741e385a7089a6799e9b59.png)](img/issue_board_view_scope.png) + +### Focus mode[](#focus-mode "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 9.1 中[引入]((https://about.gitlab.com/releases/2017/04/22/gitlab-9-1-released/#issue-boards-focus-mode-ees-eep)) . +* [移动](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28597)到 GitLab.com 的自由层在 12.10\. +* 在 13.0 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/212331) GitLab Core. + +单击右上角的按钮可打开和关闭聚焦模式. 在焦点模式下,导航 UI 处于隐藏状态,使您可以集中精力处理板上的问题. + +[![Board focus mode](img/0fdd144a1493e4d21226f1b04a5d336a.png)](img/issue_board_focus_mode.gif) + +* * * + +### Sum of issue weights[](#sum-of-issue-weights-starter "Permalink") + +每个列表的顶部指示属于该列表的问题的问题权重之和. 当使用板进行容量分配时,尤其是与[受让人列表](#assignee-lists-premium)结合使用时,这很有用. + +[![issue board summed weights](img/38c073cc1c78dc88bf317e878e9995cc.png)](img/issue_board_summed_weights.png) + +### Group issue boards[](#group-issue-boards-premium "Permalink") + +[Introduced](https://about.gitlab.com/releases/2017/09/22/gitlab-10-0-released/#group-issue-boards) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.0. + +可以在组导航级别上访问,组问题委员会提供与项目级委员会相同的功能,但是它可以显示该组及其子孙组中所有项目的问题. 同样,您只能按组标签过滤这些板. 通过边栏更新机制更新问题的里程碑和标签时,再次只有组级对象可用. + +**注意:** [GitLab Premium](https://about.gitlab.com/pricing/) 10.0 最初[引入](https://about.gitlab.com/releases/2017/09/22/gitlab-10-0-released/#group-issue-boards)了多个组发行板,而 GitLab Core 10.6 提供了每个组一个组发行板. + +[![Group issue board](img/ce119917ec56b195b909d4371bb994aa.png)](img/group_issue_board.png) + +### Assignee lists[](#assignee-lists-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5784) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.0. + +就像在常规列表中显示带有选定标签的所有问题一样,您可以添加一个受让人列表,该列表显示分配给用户的所有问题. 您可以拥有一个包含标签列表和受让人列表的木板. 添加受让人列表: + +1. Click **新增清单**. +2. 选择" **受理人列表"**选项卡. +3. 搜索并单击要添加为受让人的用户. + +现在已添加了受让人列表,您可以通过[将问题拖到](#drag-issues-between-lists)受让人列表中或从受让人列表中[拖动问题](#drag-issues-between-lists)来向该用户分配或取消分配问题. 要删除受让人列表(与标签列表一样),请单击垃圾桶图标. + +[![Assignee lists](img/baa29e50412ef4acd25e287681ad9e9e.png)](img/issue_board_assignee_lists.png) + +### Milestone lists[](#milestone-lists-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6469) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.2. + +You’re also able to create lists of a milestone. These are lists that filter issues by the assigned milestone, giving you more freedom and visibility on the issue board. To add a milestone list: + +1. Click **新增清单**. +2. 选择" **里程碑"**选项卡. +3. 搜索并单击里程碑. + +与受让人列表类似,您现在可以[将问题拖到](#drag-issues-between-lists)里程碑列表中或从里程碑列表中[拖动](#drag-issues-between-lists)出来,以操纵所拖动问题的里程碑. 与其他列表类型一样,单击垃圾桶图标以删除列表. + +[![Milestone lists](img/6261dd255633edf09ab3d7245ccaf2c1.png)](img/issue_board_milestone_lists.png) + +## Work In Progress limits[](#work-in-progress-limits-starter "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/11403) + +您可以为每个问题列表设置进行中(WIP)限制. 设置限制后,列表的标题将显示列表中的问题数和问题的软限制. + +Examples: + +* 您有一个包含四个问题的列表,限制为五个,标题将显示**4/5** . 如果超出限制,则当前的问题数将显示为红色. +* 您有一个包含五个问题的列表,限制为五个. 当您将另一个问题移到该列表时,列表的标题显示**6/5** ,其中六个显示为红色. + +设置列表的在制品限制: + +1. 导航到您所属的项目或小组委员会. +2. 点击设置图标( )放在列表​​标题中. +3. 在"进行中的**工作限制"**旁边,单击" **编辑"** . +4. 输入最大问题数. +5. 按`Enter`保存. + +## Blocked issues[](#blocked-issues "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/34723) . + +如果一个问题被另一个问题阻止,则其标题旁边会出现一个图标,指示其阻止状态. + +[![Blocked issues](img/b1edf28a1aa5c59ffa779a574c4fc548.png)](img/issue_boards_blocked_icon_v12_8.png) + +## Actions you can take on an issue board[](#actions-you-can-take-on-an-issue-board "Permalink") + +* [Create a new list](#create-a-new-list). +* [Delete an existing list](#delete-a-list). +* [Add issues to a list](#add-issues-to-a-list). +* [Remove an issue from a list](#remove-an-issue-from-a-list). +* [筛选](#filter-issues)出现在问题板上的问题. +* [Create workflows](#create-workflows). +* [Drag issues between lists](#drag-issues-between-lists). +* [Multi-select issue cards](#multi-select-issue-cards). +* [Re-order issues in lists](#issue-ordering-in-a-list). +* 拖动列表并重新排序. +* 更改问题标签(通过在列表之间拖动问题). +* 解决问题(将其拖动到" **完成"**列表中). + +如果您无法执行上述某些操作,请确保您具有正确的[权限](#permissions) . + +### First time using an issue board[](#first-time-using-an-issue-board "Permalink") + +第一次打开问题面板时,会显示默认列表(" **打开"**和" **关闭"** )以及欢迎消息,其中提供了两个选项. 您可以: + +* 创建一组预定义的标签(默认情况下: **To Do**和**Doing** ),并在发行板上创建其对应的列表. +* 退出并使用自己的列表. + +[![issue board welcome message](img/768ab05f8c35931c200b6da1f8d92352.png)](img/issue_board_welcome_message.png) + +如果选择使用并创建预定义列表,则它们将显示为空,因为与它们关联的标签要到那时才存在,这意味着系统无法自动填充它们. 当然,如果预定义标签还不存在. 如果确实存在,则会创建该列表,并填充具有该标签的问题. + +### Create a new list[](#create-a-new-list "Permalink") + +通过单击发行板右上角的" **添加列表"**按钮来创建新列表. + +[![issue board welcome message](img/604dc2f6326d049dca30995958a84ad2.png)](img/issue_board_add_list.png) + +然后,选择标签或用户以从中创建列表. 新列表将被插入列表的末尾,在**完成**之前. 移动和重新排序列表就像拖动列表一样简单. + +要为尚不存在的标签创建列表,请选择**创建新标签**来**创建标签** . 这将立即创建标签并将其添加到下拉列表中. 现在,您可以选择它来创建列表. + +### Delete a list[](#delete-a-list "Permalink") + +要从发布板上删除列表,请使用列表标题中的小垃圾桶图标. 将出现一个确认对话框供您确认. + +删除列表对问题和标签没有任何影响,只是删除了列表视图. 如果需要,您随时可以将其添加回去. + +### Add issues to a list[](#add-issues-to-a-list "Permalink") + +您可以通过单击**问题**面板右上角的" **添加问题"**按钮将问题添加到列表中. 这将打开一个模式窗口,您可以在其中查看不属于任何列表的所有问题. + +通过单击卡片选择一个或多个问题,然后单击" **添加问题"**以将其添加到所选列表中. 您可以通过按作者,受让人,里程碑和标签筛选来限制要添加到列表中的问题. + +[![Bulk adding issues to lists](img/1d54aa31264e3f3b98ebf2049669f910.png)](img/issue_boards_add_issues_modal.png) + +### Remove an issue from a list[](#remove-an-issue-from-a-list "Permalink") + +从列表中删除问题可以通过单击问题卡,然后单击侧边栏中的**从**面板中**删除**按钮来完成. 相应的标签被删除. + +[![Remove issue from list](img/529405d6cc5cbeb813be69b57b0e45b1.png)](img/issue_boards_remove_issue.png) + +### Filter issues[](#filter-issues "Permalink") + +You should be able to use the filters on top of your issue board to show only the results you want. This is similar to the filtering used in the issue tracker since the metadata from the issues and labels are re-used in the issue board. + +您可以按作者,受让人,里程碑和标签过滤. + +### Create workflows[](#create-workflows "Permalink") + +通过对列表重新排序,可以创建工作流程. 由于发行版中的列表基于标签,因此可以与您现有的发行版一起使用. 因此,如果您已经用"后端"和"前端"标记了事物,则问题在创建它们时会出现在列表中. 此外,这意味着您可以通过更改标签轻松地在列表之间移动某些内容. + +使用发行板的典型工作流程为: + +1. 您已经[创建了](labels.html#label-management)标签并对其进行了[优先排序,](labels.html#label-priority)以便可以轻松地对问题进行分类. +2. 您遇到很多问题(理想情况下是带有标签的). +3. 您访问发行板并开始[创建列表](#create-a-new-list)以创建工作流程. +4. 您可以在列表中四处移动问题,以便您的团队知道谁应该处理什么问题. +5. 当一个团队的工作完成时,可以将问题拖到下一个列表中,以便其他人来接听. +6. 最终解决问题后,该问题将移至" **完成"**列表并自动关闭. + +例如,您可以基于"前端"标签和"后端"标签创建一个列表. 设计师可以通过将问题添加到"前端"列表来开始处理问题. 这样,每个人都知道设计师现在正在研究此问题. 然后,一旦完成,所有要做的就是将其拖到下一个列表"后端",后端开发人员最终可以在该列表中进行选择. 完成后,将其移至**完成** ,以解决问题. + +访问问题时可以清楚地看到此过程,因为每次移动到另一个列表时,标签都会更改,并且不会记录系统. + +[![issue board system notes](img/1be5fea51b824b103e9b5bac12136a90.png)](img/issue_board_system_notes.png) + +### Drag issues between lists[](#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[](#multi-select-issue-cards "Permalink") + +在 GitLab 12.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/18954) . + +您可以选择多个发行卡,然后将组拖动到列表中的另一个位置或另一个列表中. 这样可以更快地一次重新排序许多问题. + +要选择并移动多张卡片: + +1. 使用`Ctrl`选择每个卡+ `Click`在 Windows 或 Linux,或者`Cmd 的` + `Click`在 MacOS. +2. 将所选卡中的一张拖到另一个位置或列表,所有所选卡都将移动. + +[![Multi-select Issue Cards](img/09b8263a3534de004ff180005a876b4a.png)](img/issue_boards_multi_select_v12_4.png) + +### Issue ordering in a list[](#issue-ordering-in-a-list "Permalink") + +访问董事会时,问题在任何列表中都显示为有序. 您可以通过拖放问题来更改顺序. 更改后的订单将保存到系统中,以便以后访问同一板的任何人都可以看到重新排序,但有一些例外. + +给定问题首次出现在任何面板中(即,用户首次加载包含该问题的面板)时,将根据[优先级顺序](labels.html#label-priority)对该列表中的其他问题进行[排序](labels.html#label-priority) . + +此时,系统会为该问题分配一个相对顺序值,该值代表其相对于列表中其他问题的相对顺序. 每当您拖放该问题的重新排序时,其相对订单值都会相应更改. + +同样,当问题由用户加载时,在任何板上出现的任何时间,都会使用更新的相对订单值进行订购. (这是第一次出现从上述优先顺序中提取问题的问题.)这意味着,如果您的 GitLab 实例内给定板上的任何用户将问题`A`拖放到问题`B`上方的顺序进行了重新排序,每当随后将这两个问题加载到同一实例中的任何板(例如,可以是不同的项目板或不同的组板)中时,都将维持订购. + +此顺序还会影响[问题列表](issues/sorting_issue_lists.html) . 在发行板上更改订单会更改发行列表中的顺序,反之亦然. + +## Tips[](#tips "Permalink") + +需要记住的几件事: + +* 在列表之间移动问题会从其来源列表中删除标签,并从其去往列表中添加标签. +* 如果一个问题有多个标签,则它可以存在于多个列表中. +* 如果标记了问题,则会自动用问题填充列表. +* 单击卡片内的问题标题,将您转到该问题. +* 单击卡内的标签可快速筛选整个问题板,并仅显示所有带有该标签的列表中的问题. +* 出于性能和可见性的原因,每个列表默认显示前 20 个问题. 如果问题超过 20 个,请开始向下滚动,然后出现下 20 个问题. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\207\252\345\212\250\345\241\253\345\205\205.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\207\252\345\212\250\345\241\253\345\205\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ab58dac6c781796c637b808259eed6c6c638b3c --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\207\252\345\212\250\345\241\253\345\205\205.md" @@ -0,0 +1,2 @@ +# 自动填充 + diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\277\201\347\247\273\351\241\271\347\233\256.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\277\201\347\247\273\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..bc4f17dc0901de62465addb26fbdc7d407458859 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\350\277\201\347\247\273\351\241\271\347\233\256.md" @@ -0,0 +1,54 @@ +# 迁移项目[](#迁移项目 "Permalink") + +1. [From Bitbucket Cloud](bitbucket.html) +2. [From Bitbucket Server (also known as Stash)](bitbucket_server.html) +3. [From ClearCase](clearcase.html) +4. [From CVS](cvs.html) +5. [From FogBugz](fogbugz.html) +6. [From GitHub.com or GitHub Enterprise](github.html) +7. [From GitLab.com](gitlab_com.html) +8. [From Gitea](gitea.html) +9. [From Perforce](perforce.html) +10. [From SVN](svn.html) +11. [From TFVC](tfvc.html) +12. [From repo by URL](repo_by_url.html) +13. [By uploading a manifest file (AOSP)](manifest.html) +14. [From Gemnasium](gemnasium.html) +15. [From Phabricator](phabricator.html) +16. [From Jira (issues only)](jira.html) + +除了上述特定的迁移文档之外,您还可以从 New Project 页面通过 HTTP 导入任何 Git 存储库. 请注意,如果存储库太大,则导入可能会超时. + +还可以选择[连接您的外部存储库以获得 CI / CD 好处](../../../ci/ci_cd_for_external_repos/index.html) . + +## Migrating from self-managed GitLab to GitLab.com[](#migrating-from-self-managed-gitlab-to-gitlabcom "Permalink") + +如果只需要迁移 Git 仓库,则可以[通过 URL 导入每个项目](repo_by_url.html) . 问题和合并请求无法导入. + +如果要保留所有元数据(例如问题和合并请求),则可以使用[导入/导出功能](../settings/import_export.html)从自我管理的 GitLab 导出项目,并将这些项目导入 GitLab.com. + +所有的 GitLab 用户关联(例如评论作者)都将更改为导入项目的用户. 有关更多信息,请参阅[导入说明](../settings/import_export.html#important-notes) . + +如果您需要迁移所有数据,则可以利用我们的[API](../../../api/README.html)从自我管理迁移到 GitLab.com. 从自我管理实例迁移到 GitLab.com 的资产顺序如下: + +**注意:**迁移到 GitLab.com 时,除非要使用[SCIM,](../../../user/group/saml_sso/scim_setup.html)否则需要手动创建用户. 使用 API​​创建用户仅限于自我管理的实例,因为它需要管理员访问权限. + +1. [Groups](../../../api/groups.html) +2. [Projects](../../../api/projects.html) +3. [Project variables](../../../api/project_level_variables.html) + +请记住[导入/导出功能](../settings/import_export.html#exported-contents)的局限性. + +您仍然需要通过一系列 Docker 推和推来迁移 Container Registry,并重新运行任何 CI 管道以检索任何构建工件. + +## Migrating from GitLab.com to self-managed GitLab[](#migrating-from-gitlabcom-to-self-managed-gitlab "Permalink") + +该过程与[从自我管理的 GitLab 迁移到 GitLab.com](#migrating-from-self-managed-gitlab-to-gitlabcom)的过程基本相同. 主要区别在于,管理员可以通过 UI 或[用户 API](../../../api/users.html#user-creation)在自助 GitLab 实例上创建[用户](../../../api/users.html#user-creation) . + +## Migrating between two self-managed GitLab instances[](#migrating-between-two-self-managed-gitlab-instances "Permalink") + +The best method for migrating from one GitLab instance to another, perhaps from an old server to a new server for example, is to [back up the instance](../../../raketasks/backup_restore.html), then restore it on the new server. + +如果将两个 GitLab 实例合并在一起(例如,两个实例上都有现有数据,并且不能擦除),请参阅[从自我管理的 GitLab 迁移到 GitLab.com 中的说明](#migrating-from-self-managed-gitlab-to-gitlabcom) . + +此外,您可以将用户[API](../../../api/users.html)与管理员用户一起使用来迁移用户. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\207\214\347\250\213\347\242\221.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\207\214\347\250\213\347\242\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..ea85f7189ad2279be88c16e21a1cd1042a83cb81 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\207\214\347\250\213\347\242\221.md" @@ -0,0 +1,153 @@ +# 里程碑[](#里程碑 "Permalink") + +## Overview[](#overview "Permalink") + +GitLab 中的里程碑是一种跟踪问题并合并为在一定时期内实现更广泛目标而创建的请求的方法. + +里程碑使您可以组织问题并将请求合并到一个紧密联系的组中,并带有一个可选的开始日期和一个可选的截止日期. + +## Milestones as Agile sprints[](#milestones-as-agile-sprints "Permalink") + +里程碑可用作敏捷冲刺,因此您可以跟踪所有问题并合并与特定冲刺有关的请求. 为此: + +1. 设置里程碑的开始日期和截止日期,以代表敏捷冲刺的开始和结束. +2. 将里程碑标题设置为敏捷 sprint 的名称,例如`November 2018 sprint` . +3. 通过将问题的右侧边栏关联到所需的里程碑,将问题添加到敏捷冲刺中. + +## Milestones as releases[](#milestones-as-releases "Permalink") + +同样,里程碑可以用作发布. 为此: + +1. 设置里程碑到期日期以表示发布的发布日期,并将里程碑开始日期保留为空白. +2. 将里程碑标题设置为您的发行版,例如`Version 9.4` . +3. 通过关联问题右侧的期望里程碑,将问题添加到您的发行中. + +此外,您可以将里程碑与 GitLab 的[Releases 功能](../releases/index.html#associate-milestones-with-a-release)集成. + +## Project milestones and group milestones[](#project-milestones-and-group-milestones "Permalink") + +您可以将**项目里程碑**分配给问题或仅合并该项目中的请求. 要查看项目里程碑列表,请在项目中转到 **问题>里程碑** . + +您可以将**组里程碑**分配给该**组**中任何项目的任何发行或合并请求. 要查看组里程碑列表,请在组中转到 **问题>里程碑** . + +您还可以在仪表板里程碑列表中查看您有权访问的所有里程碑. 要查看您可以访问的项目里程碑和组里程碑,请单击顶部导航栏上的**更多>里程碑** . + +有关项目和组里程碑 API 的信息,请参阅: + +* [Project Milestones API](../../../api/milestones.html) +* [Group Milestones API](../../../api/group_milestones.html) + +**注意:**如果您在一个小组中,然后单击**问题>里程碑** ,您将看到小组里程碑和该小组中的项目里程碑. 如果您在项目中,然后单击" **问题">"里程碑"** ,则只会看到该项目的里程碑. + +## Creating milestones[](#creating-milestones "Permalink") + +**注意:**创建里程碑需要[开发者或更高](../../permissions.html)级别的权限. + +### New project milestone[](#new-project-milestone "Permalink") + +创建**项目里程碑** : + +1. 在一个项目中,转到 **问题>里程碑** . +2. Click **新的里程碑**. +3. 输入标题,可选描述,可选开始日期和可选截止日期. +4. Click **新的里程碑**. + +[![New project milestone](img/9807a6b10b783af2ed7c8703958f017a.png)](img/milestones_new_project_milestone.png) + +### New group milestone[](#new-group-milestone "Permalink") + +创建**组里程碑** : + +1. 在一个小组中,转到 **问题>里程碑** . +2. Click **新的里程碑**. +3. 输入标题,可选描述,可选开始日期和可选截止日期. +4. Click **新的里程碑**. + +[![New group milestone](img/4d2f841f1dee2bdbbdcd14bd5518c000.png)](img/milestones_new_group_milestone.png) + +## Editing milestones[](#editing-milestones "Permalink") + +**注意:**编辑里程碑需要[开发者或更高的](../../permissions.html)权限级别. + +要编辑里程碑: + +1. 在项目或小组中,转到 **问题>里程碑** . +2. 单击里程碑标题. +3. Click **Edit**. + +您可以通过单击" **删除"**按钮来删除里程碑. + +### Promoting project milestones to group milestones[](#promoting-project-milestones-to-group-milestones "Permalink") + +If you are expanding from a few projects to a larger number of projects within the same group, you may want to share the same milestone among multiple projects in the same group. If you previously created a project milestone and now want to make it available for other projects within the same group, you can promote it to a group milestone. + +从项目里程碑列表页面,您可以将项目里程碑升级为组里程碑. 这会将具有相同名称的该组中所有项目中的所有项目里程碑合并为一个组里程碑. 以前已分配给这些项目里程碑之一的所有问题和合并请求现在都将分配给新的组里程碑. 此操作不能撤消,更改是永久的. + +**警告:**从 GitLab 12.4 和更早版本开始,将项目里程碑提升为组里程碑时,某些信息会丢失. 组里程碑视图上并非项目里程碑视图上的所有功能都可用. 如果将项目里程碑升级为组里程碑,则将失去这些功能. 请参阅" [里程碑"视图,](#milestone-view)以查看组里程碑视图中缺少哪些功能. + +[![Promote milestone](img/e14dc9ee9528f343daf09a4dd5340b99.png)](img/milestones_promote_milestone.png) + +## Assigning milestones from the sidebar[](#assigning-milestones-from-the-sidebar "Permalink") + +可以为每个问题和合并请求分配一个里程碑. 里程碑在边栏中的每个问题和合并请求页面上可见. 它们在发行板上也可见. 您可以从边栏中为对象分配或取消分配里程碑. 您也可以在评论中[快速](../quick_actions.html)执行此[操作](../quick_actions.html) . [如前所述](#project-milestones-and-group-milestones) ,对于给定的发布或合并请求,可以选择项目里程碑和组里程碑并将其分配给对象. + +## Filtering issues and merge requests by milestone[](#filtering-issues-and-merge-requests-by-milestone "Permalink") + +### Filtering in list pages[](#filtering-in-list-pages "Permalink") + +在项目发布/合并请求列表页面和组发布/合并请求列表页面中,可以按组里程碑和项目里程碑进行[筛选](../../search/index.html#issues-and-merge-requests) . + +### Filtering in issue boards[](#filtering-in-issue-boards "Permalink") + +* 在[项目发布板上](../issue_board.html) ,您可以在[搜索和过滤器栏中](../../search/index.html#issue-boards)按组里程碑和项目里程碑进行[筛选](../../search/index.html#issue-boards) . +* 在[组发布板上](../issue_board.html#group-issue-boards-premium) ,您只能在[搜索和过滤器栏中](../../search/index.html#issue-boards)按组里程碑进行[过滤](../../search/index.html#issue-boards) . +* 在[项目发行板中](../issue_board.html) ,可以在[发行板配置中](../issue_board.html#configurable-issue-boards-starter)按组里程碑和项目里程碑进行筛选. +* 在[组发行板上,](../issue_board.html#group-issue-boards-premium)您只能按[发行板配置](../issue_board.html#configurable-issue-boards-starter)中的组里程碑进行筛选. + +### Special milestone filters[](#special-milestone-filters "Permalink") + +在按里程碑进行筛选时,除了选择特定的项目里程碑或组里程碑之外,还可以选择特殊的里程碑筛选器. + +* **无** :显示问题或没有分配里程碑的合并请求. +* **任何** :显示问题或合并具有指定里程碑的请求. +* **即将到来的** :显示已分配的公开里程碑的问题或合并请求,该里程碑具有下一个即将到来的到期日(即将来的最近到期日). +* **已开始** :显示具有打开的指定里程碑且开始日期在今天之前的问题或合并请求. + +## Milestone view[](#milestone-view "Permalink") + +里程碑视图显示标题和描述. + +这些标签下面还包含显示以下内容的标签: + +* **问题** :显示分配给里程碑的所有问题. 这些内容显示在名为: + * 未开始的问题(未解决和未分配) + * 进行中的问题(未解决和已分配) + * 已完成的问题(已关闭) +* **合并请求** :显示分配给里程碑的所有合并请求. 这些将显示在名为: + * 进行中的工作(开放且未分配) + * 等待合并(打开和未分配) + * 拒绝(关闭) + * 合并后 +* **参与者** :显示分配给该里程碑的所有问题的受让人. +* **Labels**: Shows all labels that are used in issues assigned to the milestone. + +### Project Burndown Charts[](#project-burndown-charts-starter "Permalink") + +对于[GitLab Starter 中的](https://about.gitlab.com/pricing/)项目里程碑,里程碑视图中有一个[燃尽图](burndown_charts.html) ,显示完成里程碑的进度. + +[![burndown chart](img/eb36e4acf26c49641689d1a05dd8fa8a.png)](img/burndown_chart.png) + +### Group Burndown Charts[](#group-burndown-charts-premium "Permalink") + +对于[GitLab Premium 中的](https://about.gitlab.com/pricing/)组里程碑,里程碑视图中有一个[燃尽图](burndown_charts.html) ,显示完成里程碑的进度. + +### Milestone sidebar[](#milestone-sidebar "Permalink") + +里程碑视图上的里程碑侧栏显示以下内容: + +* 完成百分比,计算方式为已完成的问题数除以问题总数. +* 开始日期和截止日期. +* 在分配给里程碑的所有问题和合并请求上花费的总时间. +* 分配给里程碑的所有问题的总问题权重. + +[![Project milestone page](img/11f64bd49fd604a4644dd54ed7e423e8.png)](img/milestones_project_milestone_page.png) \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..15ee7de113fffe74200c4e509c59371b292f51c2 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230.md" @@ -0,0 +1,119 @@ +# 项目成员[](#项目成员 "Permalink") + +您可以在所有项目中管理组和用户及其访问级别. 您还可以个性化为每个项目赋予每个用户的访问级别. + +您应该具有维护者或所有者[权限,](../../permissions.html)才能将新用户添加或导入到项目中. + +要查看,编辑,添加和删除项目的成员,请转到项目的**成员** . + +## Inherited membership[](#inherited-membership "Permalink") + +当您的项目属于该组时,组成员将从该组继承该项目的成员资格和权限级别. + +[![Project members page](img/3f64ac42c5324a759f292fa0f7e4d991.png)](img/project_members.png) + +从上图可以得出以下几点: + +* 有 3 个成员可以访问该项目. +* User0 是记者,并且已从包含当前项目的组`demo`继承了他们的权限. +* 对于 User1,没有组的指示,因此它们直接属于我们正在检查的项目. +* 管理员是**所有**组的所有者和所有者,因此,有迹象表明祖先组和继承的所有者权限. + +[在 GitLab 12.6 中](https://gitlab.com/gitlab-org/gitlab/-/issues/21727) ,您可以使用右侧的下拉列表过滤此列表: + +[![Project members filter](img/4d5fab6dd3f65351ba798d87517db0bd.png)](img/project_members_filter_v12_6.png) + +* **仅显示直接成员**仅显示 User1. +* **仅显示继承的成员将**显示 User0 和 Administrator. + +## Add a user[](#add-a-user "Permalink") + +旁边的**人** ,开始输入要添加的用户的姓名或用户名. + +[![Search for people](img/5d98850d2ad30c43029645c8c0486059.png)](img/add_user_search_people.png) + +选择用户以及您要赋予该用户的[权限级别](../../permissions.html) . 请注意,您可以选择多个用户. + +[![Give user permissions](img/c736ba09ab7186102250ad9e624d79c1.png)](img/add_user_give_permissions.png) + +完成后,点击**将用户添加到项目中** ,这些**用户**将立即使用您在上面授予他们的权限添加到您的项目中. + +[![List members](img/a94b1f6b20cc665168a8d8359d195f78.png)](img/add_user_list_members.png) + +从那里开始,您可以删除现有用户或更改其对项目的访问级别. + +## Import users from another project[](#import-users-from-another-project "Permalink") + +您可以通过单击" **成员"**菜单右上角的" **导入成员"**按钮,将另一个项目的用户导入您自己的项目中. + +在下拉菜单中,您只能看到维护者所在的项目. + +[![Import members from another project](img/4c34240e5c09caa62a018e3d109c1ba3.png)](img/add_user_import_members_from_another_project.png) + +选择所需的一个,然后单击" **导入项目成员"** . 将会出现一条简短的消息,通知您导入已成功,并且新成员现在位于项目的成员列表中. 请注意,保留了他们对您从中导入的项目的权限. + +[![Members list of new members](img/f9a1ce8fe1042543bc2355950f642a05.png)](img/add_user_imported_members.png) + +## Invite people using their e-mail address[](#invite-people-using-their-e-mail-address "Permalink") + +如果要授予访问权限的用户在您的 GitLab 实例上没有帐户,则可以通过在用户搜索字段中键入其电子邮件地址来邀请他们. + +[![Invite user by mail](img/27d6bf9eb64fd8e4298e7a2a8ae64983.png)](img/add_user_email_search.png) + +可以想象,您可以混合邀请多个人并将现有的 GitLab 用户添加到项目中. + +[![Invite user by mail ready to submit](img/1fa927abbc0d78f64822dcc6c7295cd4.png)](img/add_user_email_ready.png) + +完成后,点击" **将用户添加到项目中",**然后观察到有一个新成员具有我们上面使用的电子邮件地址. 在此之后,您可以重新发送邀请,更改其访问级别,甚至删除它们. + +[![Invite user members list](img/878c3488cf7403499b80fcd402198e32.png)](img/add_user_email_accept.png) + +用户接受邀请后,将提示他们使用邀请发送到的相同电子邮件地址创建一个新的 GitLab 帐户. + +## Project membership and requesting access[](#project-membership-and-requesting-access "Permalink") + +项目所有者可以: + +* 允许非成员请求访问该项目. +* 防止非会员请求访问. + +要进行配置,请转到项目设置,然后单击**允许用户请求访问权限** . + +GitLab 用户可以请求成为项目成员. 转到您要加入的项目,然后单击屏幕右侧的" **请求访问**权"按钮. + +[![Request access button](img/1ff79a3af1496b3e864efbcf5f93307f.png)](img/request_access_button.png) + +请求访问后: + +* 通过电子邮件将最多十个项目维护者通知该请求. 电子邮件被发送给最近活跃的项目维护者. +* 任何项目维护者都可以在成员页面上批准或拒绝该请求. + +**注意:**如果项目没有任何维护者,则将通知发送给该项目组的最近活动的所有者. + +[![Manage access requests](img/083580c1827d40263d500a21f072249f.png)](img/access_requests_management.png) + +如果您在批准请求之前改变主意,只需单击" **撤回访问请求"**按钮. + +[![Withdraw access request button](img/dbb89cfb3c7539310a17d809c65c34a5.png)](img/withdraw_access_request_button.png) + +## Share project with group[](#share-project-with-group "Permalink") + +或者,您可以[与整个组共享一个项目,](share_project_with_groups.html)而不是一个一个地添加用户. + +## Remove a member from the project[](#remove-a-member-from-the-project "Permalink") + +只有[拥有所有者](../../permissions.html#group-members-permissions)权限的[用户](../../permissions.html#group-members-permissions)才能管理项目成员. + +如果给定成员在项目中具有直接成员资格,则可以从项目中删除用户. 如果成员资格是从父组继承的,则该成员只能从父组本身中删除. + +删除成员时,您可以决定是从所有问题中取消分配用户,还是合并当前已分配的请求,还是保留分配. + +* 当用户离开私有项目并且您希望撤消他们对所有问题和已分配的合并请求的访问时,从所有问题和合并请求中**取消分配已删除的成员**可能会有所帮助. +* **保留问题和合并请求的分配**可能对于接受公共贡献的项目很有帮助,在这些项目中,用户不必成为成员就可以为问题和合并请求做出贡献. + +To remove a member from a project: + +1. 在一个项目中,转到 **成员们** . +2. 点击**删除** 要删除的项目成员旁边的按钮. 出现" **删除成员"**模态. +3. (可选)选中" **也从相关问题中取消分配此用户并合并请求"**复选框. +4. Click **删除会员**. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..41332df6b25a681b305cb6263d27e75f7366c675 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\346\210\220\345\221\230/\344\270\216\347\276\244\347\273\204\345\205\261\344\272\253\351\241\271\347\233\256.md" @@ -0,0 +1,48 @@ +# 与群组共享项目[](#与群组共享项目 "Permalink") + +您可以与其他[小组](../../group/index.html)共享项目. 这样就可以通过一个操作将一组用户添加到项目中. + +## Groups as collections of users[](#groups-as-collections-of-users "Permalink") + +组主要用于[创建项目集合](../../group/index.html) ,但是您还可以利用以下事实:组定义了*用户*集合,即组成员. + +## Sharing a project with a group of users[](#sharing-a-project-with-a-group-of-users "Permalink") + +在 GitLab 中授予一组用户(例如"工程")访问项目(例如" Acme 项目")的主要机制是使"工程"组成为" Project Acme"的所有者. 但是,如果" Acme 项目"已经属于另一个小组,比如"开源",该怎么办? 这是可以使用组共享功能的地方. + +与"工程"组共享" Acme 项目": + +1. 对于" Acme 项目",请使用左侧导航菜单转到" **会员"** + + [![share project with groups](img/0d1c10a8d14f11dd831b96878fc521e5.png)](img/share_project_with_groups.png) + +2. 选择"与组共享"标签 +3. 添加具有您选择的最大访问权限级别的"工程"组 +4. 点击**共享**分享 + + [![share project with groups tab](img/0e2287fb4b32bf9dff45f3255ddd45fe.png)](img/share_project_with_groups_tab.png) + +5. 与"工程"共享"项目 Acme"后,该项目将列在组仪表板上 + + [!['Project Acme' is listed as a shared project for 'Engineering'](img/000b14e609fee563642c55e238caca88.png)](img/other_group_sees_shared_project.png) + +请注意,您只能与以下项目共享一个项目: + +* 您具有明确定义的成员资格的组 +* 包含嵌套子组或项目的组,您对其具有明确定义的角色 + +管理员可以与系统中的任何组共享项目. + +## Maximum access level[](#maximum-access-level "Permalink") + +在上面的示例中,"工程"成员的最大"开发人员"访问级别意味着"工程"中具有较高访问级别的用户("维护者"或"所有者")将仅对" Acme 项目"具有"开发者"访问权限'. + +## Sharing public project with private group[](#sharing-public-project-with-private-group "Permalink") + +与私有组共享公共项目时,项目的所有者和维护者将在`members`页面上看到该组的名称. 所有者还可以在问题或合并请求中提及他们时,可以看到他们无权访问的私人群组的成员. + +## Share project with group lock[](#share-project-with-group-lock "Permalink") + +可以防止一个组中[的项目与另一个组共享一个项目](../members/share_project_with_groups.html) . 这样可以更严格地控​​制项目访问. + +了解更多有关[使用组锁共享的信息](../../group/index.html#share-with-group-lock) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\350\256\276\347\275\256.md" "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\350\256\276\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..cc2c001b59f38f385a08d6f694255475a2f37c25 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\241\271\347\233\256/\351\241\271\347\233\256\350\256\276\347\275\256.md" @@ -0,0 +1,219 @@ +# 项目设置[](#项目设置 "Permalink") + +**注意:**只有项目维护者和管理员用户[有权](../../permissions.html#project-members-permissions)访问项目设置. + +您可以通过导航到项目的主页并点击**设置**来调整[项目](../index.html)设置. + +## General settings[](#general-settings "Permalink") + +在项目的常规设置下,您可以找到与项目功能有关的所有内容. + +### General project settings[](#general-project-settings "Permalink") + +调整项目的名称,描述,头像, [默认分支](../repository/branches/index.html#default-branch)和主题: + +[![general project settings](img/743ce9a40d40e900e957589a9024f116.png)](img/general_settings.png) + +项目描述还部分支持[标准 Markdown](../../markdown.html#standard-markdown-and-extensions-in-gitlab) . 您可以使用[强调](../../markdown.html#emphasis) , [链接](../../markdown.html#links)和[换行符](../../markdown.html#line-breaks)为项目描述添加更多上下文. + +#### Compliance framework[](#compliance-framework-premium "Permalink") + +您可以选择一个框架标签来标识您的项目具有某些合规性要求或需要其他监督. 可用的标签包括: + +* GDPR-通用数据保护法规 +* HIPAA-健康保险可移植性和责任法案 +* PCI-DSS-支付卡行业数据安全标准 +* SOC 2-服务组织控制 2 +* SOX-萨班斯-奥克斯利 + +### Sharing and permissions[](#sharing-and-permissions "Permalink") + +对于您的存储库,您可以设置功能,例如公共访问,存储库功能,文档,访问权限等等. 要从您的项目中执行此操作,请转到**"设置"** >" **常规"** ,然后展开" **可见性","项目功能","权限"**部分. + +现在,您可以更改[项目可见性](../../../public_access/public_access.html) . 如果将" **项目可见性"**设置为公开,则可以将某些功能的访问权限限制为" **仅项目成员"** . 此外,您可以选择[允许用户请求访问权限](../members/index.html#project-membership-and-requesting-access)的选项. + +**警告:**如果[降低项目的可见性级别](../../../public_access/public_access.html#reducing-visibility) ,则该操作将取消该项目的所有分支的链接. + +使用开关启用或禁用以下功能: + +| Option | 更多访问限制选项 | Description | +| --- | --- | --- | +| **Issues** | ✓ | 激活 GitLab 问题跟踪器 | +| **Repository** | ✓ | Enables [repository](../repository/) functionality | +| **合并请求** | ✓ | 启用[合并请求](../merge_requests/)功能; 另请参阅[合并请求设置](#merge-request-settings) | +| **Forks** | ✓ | Enables [forking](../index.html#fork-a-project) functionality | +| **Pipelines** | ✓ | Enables [CI/CD](../../../ci/README.html) functionality | +| **集装箱登记处** |   | 为您的 Docker 映像激活[注册表](../../packages/container_registry/) | +| **Git 大文件存储** |   | 允许使用[大文件](../../../topics/git/lfs/index.html#git-large-file-storage-lfs) | +| **Packages** |   | Supports configuration of a [package registry](../../../administration/packages/index.html#gitlab-package-registry-administration-premium-only) functionality | +| **Wiki** | ✓ | 启用单独的[文档](../wiki/)系统 | +| **Snippets** | ✓ | Enables [sharing of code and text](../../snippets.html) | +| **Pages** | ✓ | 允许您[发布静态网站](../pages/) | +| **指标仪表板** | ✓ | 控制对[指标仪表板的](../integrations/prometheus.html)访问 | + +一些功能取决于其他功能: + +* 如果禁用" **问题"**选项,则 GitLab 还将删除以下功能: + * **发行板** + * [**服务台**](#service-desk-starter)**注意:**禁用" **问题"**选项后,您仍然可以从合并请求访问**里程碑** . +* 此外,如果您同时禁用**Issues**和**Merge Requests** ,则将无法再访问: + * **标签** + * **大事记** +* 如果禁用**存储库**功能,GitLab 还将为您的项目禁用以下功能: + * **合并请求** + * **流水线** + * **集装箱登记处** + * **Git 大文件存储** + * **配套** +* 指标仪表板访问要求同时阅读项目环境和部署. 有权访问指标仪表板的用户还可以访问环境和部署. + +#### Disabling email notifications[](#disabling-email-notifications "Permalink") + +项目所有者可以通过选中" **禁用电子邮件通知"**复选框来**禁用**与项目相关的所有[电子邮件通知](../../profile/notifications.html#gitlab-notification-emails) . + +### Merge request settings[](#merge-request-settings "Permalink") + +设置项目的合并请求设置: + +* 设置合并请求方法(合并提交, [快速合并](../merge_requests/fast_forward_merge.html) ). +* 添加合并请求[描述模板](../description_templates.html#description-templates) . +* Enable [merge request approvals](../merge_requests/merge_request_approvals.html). +* Enable [merge only if pipeline succeeds](../merge_requests/merge_when_pipeline_succeeds.html). +* Enable [merge only when all threads are resolved](../../discussions/index.html#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved). +* Enable [`delete source branch after merge` option by default](../merge_requests/getting_started.html#deleting-the-source-branch) +* Configure [suggested changes commit messages](../../discussions/index.html#configure-the-commit-message-for-applied-suggestions) + +[![project's merge request settings](img/813cda0881e353d15eed9ca9417104f1.png)](img/merge_requests_settings.png) + +### Service Desk[](#service-desk-starter "Permalink") + +为您的项目启用[Service Desk](../service_desk.html)以提供客户支持. + +### Export project[](#export-project "Permalink") + +了解如何在 GitLab 中[导出项目](import_export.html#importing-the-project) . + +### Advanced settings[](#advanced-settings "Permalink") + +在这里,您可以运行内部管理,存档,重命名,传输, [删除派生关系](#removing-a-fork-relationship)或删除项目. + +#### Archiving a project[](#archiving-a-project "Permalink") + +归档项目后,所有用户都将其设为只读,并表明该项目已不再处于主动维护状态. 也可以取消归档已归档的项目. 只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)归档项目. + +归档项目后,存储库,问题,合并请求和所有其他功能均为只读. 归档的项目也隐藏在项目列表中. + +归档项目: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在" **存档项目"**部分中,单击" **存档项目"**按钮. +4. 根据要求确认操作. + +#### Unarchiving a project[](#unarchiving-a-project "Permalink") + +取消归档项目会删除对项目的只读限制,并使其在项目列表中可用. 只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)取消归档项目. + +要查找已归档的项目: + +1. 以具有项目所有者或管理员权限的用户身份登录到 GitLab. +2. 如果你: + * 拥有项目的 URL,在浏览器中打开项目的页面. + * 没有项目的 URL:1.单击**项目>浏览项目** . 1.在" **排序项目"**下拉框中,选择" **显示存档的项目"** . 1.在**按名称过滤**字段中,提供项目的名称. 1.单击指向项目的链接以打开其" **详细信息"**页面. + +接下来,要取消归档项目: + +1. 导航到您项目的 **设置>常规** . +2. Under **Advanced**, click **Expand**. +3. 在" **取消存档项目"**部分中,单击" **取消存档项目"**按钮. +4. 根据要求确认操作. + +#### Renaming a repository[](#renaming-a-repository "Permalink") + +**注意:**只有项目维护者和管理员用户才[有权](../../permissions.html#project-members-permissions)重命名存储库. 不要与项目名称混淆,也可以从[常规项目设置中](#general-project-settings)进行更改. + +项目的存储库名称定义其 URL(您用于通过浏览器访问该项目的 URL)及其在安装 GitLab 的文件磁盘上的位置. + +要重命名存储库: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在"重命名存储库"下,根据您的喜好更改"路径". +4. Hit **重命名项目**. + +请记住,这可能会带来意想不到的副作用,因为使用旧网址的每个人都无法推送或拉动. 阅读有关[重命名存储库时重定向](../index.html#redirects-when-changing-repository-paths)发生的更多[信息](../index.html#redirects-when-changing-repository-paths) . + +#### Transferring an existing project into another namespace[](#transferring-an-existing-project-into-another-namespace "Permalink") + +**注意:**只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)传输项目. + +在以下情况下,您可以将现有项目转移到[组中](../../group/index.html) : + +* 您至少对该组具有**维护者** [权限](../../permissions.html#project-members-permissions) . +* 您至少是要转让的项目的**所有者** . +* 将项目转移到的组必须允许创建新项目. + +转移项目: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在"传输项目"下,选择要将项目传输到的名称空间. +4. 按照说明键入项目路径,以确认传输. + +完成后,您将被带到新项目的名称空间. 此时,请阅读[从旧项目到新项目](../index.html#redirects-when-changing-repository-paths)的[重定向](../index.html#redirects-when-changing-repository-paths)发生了什么. + +**注意:**如果需要,GitLab 管理员可以使用管理界面将任何项目移动到任何名称空间. + +#### Remove a project[](#remove-a-project "Permalink") + +**注意:**只有项目所有者和管理员才[有权](../../permissions.html#project-members-permissions)删除项目. + +删除项目: + +1. 导航到您的项目,然后选择 **设置>常规>高级** . +2. 在"删除项目"部分中,单击" **删除项目"**按钮. +3. 根据要求确认操作. + +这个动作: + +* 删除包含所有相关资源(问题,合并请求等)的项目. +* 从[Premium 或 Silver](https://about.gitlab.com/pricing/)或更高级别的[GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) ,组管理员可以[将](../../group/index.html#enabling-delayed-project-removal-premium)组内的项目[配置](../../group/index.html#enabling-delayed-project-removal-premium)为在延迟一段时间后删除. 启用后,实际删除将在[实例设置中](../../admin_area/settings/visibility_and_access_controls.html#default-deletion-adjourned-period-premium-only)指定的天数后发生. + +**Warning:** The default behavior of [Delayed Project deletion](https://gitlab.com/gitlab-org/gitlab/-/issues/32935) in GitLab 12.6 was changed to [Immediate deletion](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) in GitLab 13.2. + +#### Restore a project[](#restore-a-project-premium "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32935) . + +要还原标记为删除的项目: + +1. 导航到您的项目,然后选择 **设置>常规>高级** . +2. 在"还原项目"部分中,单击" **还原项目"**按钮. + +#### Removing a fork relationship[](#removing-a-fork-relationship "Permalink") + +分叉是为您不是会员[的项目](../repository/forking_workflow.html)做[贡献](../repository/forking_workflow.html)的好方法. 如果您想自己使用 fork,而无需将[合并请求](../merge_requests.html)发送到上游项目,则可以安全地删除 fork 关系. + +**注意:**删除后,将无法恢复派生关系. 您将不再能够将合并请求发送到源,并且如果有人分叉了您的项目,他们的分支也将失去关系. + +为此: + +1. 导航到项目的**设置>常规>高级** . +2. 在" **删除分叉关系"下** ,单击同样标记的按钮. +3. 按照说明键入项目的路径,以确认操作. + +**注意:**只有项目所有者[有权](../../permissions.html#project-members-permissions)删除派生关系. + +## Operations settings[](#operations-settings "Permalink") + +### Error Tracking[](#error-tracking "Permalink") + +配置错误跟踪以[在 GitLab 中](../operations/error_tracking.html)发现和查看[Sentry 错误](../operations/error_tracking.html) . + +### Jaeger tracing[](#jaeger-tracing-ultimate "Permalink") + +添加 Jaeger 服务器的 URL,以使您的用户可以[从 GitLab 轻松访问 Jaeger UI](../../../operations/tracing.html) . + +### Status Page[](#status-page "Permalink") + +[添加存储凭据](../status_page/#syncing-incidents-to-the-status-page)以启用将公共问题同步到已[部署状态页面的功能](../status_page/#status-page-project) . \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" "b/docs/\347\224\250\346\210\267/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" new file mode 100644 index 0000000000000000000000000000000000000000..91053e7815150a7228463548c17cbb6db7a6d40e --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" @@ -0,0 +1,2 @@ +# 预留命名空间 + diff --git "a/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" "b/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..335a2f831a89a5438ce727e3c22edb9f6145bae6 --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" @@ -0,0 +1,2 @@ +# 高级全局搜索 + diff --git "a/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" "b/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..8c857c93dcf683d6c9557cbe67326b3f743878fb --- /dev/null +++ "b/docs/\347\224\250\346\210\267/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" @@ -0,0 +1,2 @@ +# 高级语法搜索 + diff --git "a/docs/\347\224\250\346\210\267\346\235\203\351\231\220.md" "b/docs/\347\224\250\346\210\267\346\235\203\351\231\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..ec7e2a2fa96112adf76001b51919a593370e8233 --- /dev/null +++ "b/docs/\347\224\250\346\210\267\346\235\203\351\231\220.md" @@ -0,0 +1,391 @@ +# 用户权限[](#用户权限 "Permalink") + +用户具有不同的能力,具体取决于他们在特定组或项目中具有的访问级别. 如果用户既属于项目组又属于项目本身,则使用最高权限级别. + +在公共和内部项目上,不执行来宾角色. 所有用户将能够: + +* 创造问题. +* 留言. +* 克隆或下载项目代码. + +当成员离开团队的项目时,所有分配的" [问题"](project/issues/index.html)和" [合并请求"](project/merge_requests/index.html)将自动取消分配. + +GitLab [管理员拥有](../administration/index.html)所有权限. + +要添加或导入用户,可以遵循[项目成员文档](project/members/index.html) . + +## Principles behind permissions[](#principles-behind-permissions "Permalink") + +有关[权限的信息,](https://about.gitlab.com/handbook/product/gitlab-the-product/#permissions-in-gitlab)请参见我们的[产品手册](https://about.gitlab.com/handbook/product/gitlab-the-product/#permissions-in-gitlab) . + +## Instance-wide user permissions[](#instance-wide-user-permissions "Permalink") + +默认情况下,用户可以创建顶级组并更改其用户名. GitLab 管理员可以配置 GitLab 实例来[修改此行为](../administration/user_settings.html) . + +## Project members permissions[](#project-members-permissions "Permalink") + +**注意:**在 GitLab 11.0 中,"主"角色已重命名为"维护者". + +虽然维护者是项目级别的最高角色,但是某些操作只能由拥有所有权限的个人名称空间或组所有者或实例管理员执行. 有关更多信息,请参阅[项目成员文档](project/members/index.html) . + +下表描述了项目中的各种用户权限级别. + +| Action | Guest | Reporter | Developer | Maintainer | Owner* | +| --- | --- | --- | --- | --- | --- | +| 下载专案 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 留言 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看允许和拒绝的许可证 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看许可证合规性报告 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看安全报告 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ | +| 查看相关性列表 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看许可证列表 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 在相关性列表中查看许可证 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| View [Design Management](project/issues/design_management.html) pages | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看项目代码 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 拉项目代码 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看受[访问控制](project/pages/introduction.html#gitlab-pages-access-control-core)保护的 GitLab 页面 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看维基页面 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看工作清单 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ | +| 查看工作日志 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ | +| 下载和浏览工作工件 | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ | +| 创刊号 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看相关问题 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 创建机密问题 | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | +| 查看机密问题 | (*2*) | ✓ | ✓ | ✓ | ✓ | +| View [Releases](project/releases/index.html) | ✓ (*6*) | ✓ | ✓ | ✓ | ✓ | +| 查看要求 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 管理用户加星标的指标仪表板( *7* ) | ✓ | ✓ | ✓ | ✓ | ✓ | +| 分配问题 |   | ✓ | ✓ | ✓ | ✓ | +| 标签问题 |   | ✓ | ✓ | ✓ | ✓ | +| 设定发行权重 |   | ✓ | ✓ | ✓ | ✓ | +| 锁定问题线程 |   | ✓ | ✓ | ✓ | ✓ | +| 管理问题追踪器 |   | ✓ | ✓ | ✓ | ✓ | +| 管理相关问题 |   | ✓ | ✓ | ✓ | ✓ | +| 管理标签 |   | ✓ | ✓ | ✓ | ✓ | +| 创建代码段 |   | ✓ | ✓ | ✓ | ✓ | +| 查看提交状态 |   | ✓ | ✓ | ✓ | ✓ | +| 查看容器注册表 |   | ✓ | ✓ | ✓ | ✓ | +| 查看环境 |   | ✓ | ✓ | ✓ | ✓ | +| 查看合并请求列表 |   | ✓ | ✓ | ✓ | ✓ | +| 查看项目统计 |   |   | ✓ | ✓ | ✓ | +| 查看错误跟踪列表 |   | ✓ | ✓ | ✓ | ✓ | +| 创建新的合并请求 |   | ✓ | ✓ | ✓ | ✓ | +| 查看指标仪表板注释 |   | ✓ | ✓ | ✓ | ✓ | +| 创建/编辑需求 |   | ✓ | ✓ | ✓ | ✓ | +| Pull [packages](packages/index.html) |   | ✓ | ✓ | ✓ | ✓ | +| Publish [packages](packages/index.html) |   |   | ✓ | ✓ | ✓ | +| Upload [Design Management](project/issues/design_management.html) files |   |   | ✓ | ✓ | ✓ | +| Create/edit/delete [Releases](project/releases/index.html) |   |   | ✓ | ✓ | ✓ | +| 创建新分支 |   |   | ✓ | ✓ | ✓ | +| 推送到不受保护的分支 |   |   | ✓ | ✓ | ✓ | +| 强制推送到不受保护的分支 |   |   | ✓ | ✓ | ✓ | +| 删除不受保护的分支 |   |   | ✓ | ✓ | ✓ | +| 分配合并请求 |   |   | ✓ | ✓ | ✓ | +| 标签合并请求 |   |   | ✓ | ✓ | ✓ | +| 锁定合并请求线程 |   |   | ✓ | ✓ | ✓ | +| 批准合并请求( *9* ) |   |   | ✓ | ✓ | ✓ | +| 管理/接受合并请求 |   |   | ✓ | ✓ | ✓ | +| 创建新环境 |   |   | ✓ | ✓ | ✓ | +| 停止环境 |   |   | ✓ | ✓ | ✓ | +| 启用评论应用 |   |   | ✓ | ✓ | ✓ | +| 添加标签 |   |   | ✓ | ✓ | ✓ | +| 取消并重试作业 |   |   | ✓ | ✓ | ✓ | +| 创建或更新提交状态 |   |   | ✓ (*5*) | ✓ | ✓ | +| 更新容器注册表 |   |   | ✓ | ✓ | ✓ | +| 删除容器注册表映像 |   |   | ✓ | ✓ | ✓ | +| 创建/编辑/删除项目里程碑 |   |   | ✓ | ✓ | ✓ | +| 使用安全仪表板 |   |   | ✓ | ✓ | ✓ | +| 在"依赖关系"列表中查看漏洞发现 |   |   | ✓ | ✓ | ✓ | +| 从漏洞发现中创建问题 |   |   | ✓ | ✓ | ✓ | +| 消除漏洞发现 |   |   | ✓ | ✓ | ✓ | +| 查看漏洞 |   |   | ✓ | ✓ | ✓ | +| 通过漏洞发现创建漏洞 |   |   | ✓ | ✓ | ✓ | +| 解决漏洞 |   |   | ✓ | ✓ | ✓ | +| 消除漏洞 |   |   | ✓ | ✓ | ✓ | +| 应用代码更改建议 |   |   | ✓ | ✓ | ✓ | +| 创建和编辑 Wiki 页面 |   |   | ✓ | ✓ | ✓ | +| 重写/删除 Git 标签 |   |   | ✓ | ✓ | ✓ | +| 管理功能标记 |   |   | ✓ | ✓ | ✓ | +| 创建/编辑/删除指标仪表板注释 |   |   | ✓ | ✓ | ✓ | +| 针对受保护的分支运行 CI / CD 管道 |   |   | ✓ (*5*) | ✓ | ✓ | +| 使用环境终端 |   |   |   | ✓ | ✓ | +| 运行 Web IDE 的交互式 Web 终端 |   |   |   | ✓ | ✓ | +| 添加新的团队成员 |   |   |   | ✓ | ✓ | +| 启用/禁用分支保护 |   |   |   | ✓ | ✓ | +| 推送到受保护的分支 |   |   |   | ✓ | ✓ | +| 为开发人员打开/关闭受保护的分支推送 |   |   |   | ✓ | ✓ | +| 启用/禁用标签保护 |   |   |   | ✓ | ✓ | +| 编辑专案 |   |   |   | ✓ | ✓ | +| 编辑项目徽章 |   |   |   | ✓ | ✓ | +| 与小组共享(邀请)项目 |   |   |   | ✓ (*8*) | ✓ (*8*) | +| 将部署密钥添加到项目 |   |   |   | ✓ | ✓ | +| 配置项目挂钩 |   |   |   | ✓ | ✓ | +| 管理跑步者 |   |   |   | ✓ | ✓ | +| 管理工作触发器 |   |   |   | ✓ | ✓ | +| 管理 CI / CD 变量 |   |   |   | ✓ | ✓ | +| 管理 GitLab 页面 |   |   |   | ✓ | ✓ | +| 管理 GitLab Pages 域和证书 |   |   |   | ✓ | ✓ | +| 删除 GitLab 页面 |   |   |   | ✓ | ✓ | +| 管理集群 |   |   |   | ✓ | ✓ | +| 管理项目运作 |   |   |   | ✓ | ✓ | +| 查看 Pod 日志 |   |   |   | ✓ | ✓ | +| 管理许可政策 |   |   |   | ✓ | ✓ | +| 编辑评论(由任何用户发布) |   |   |   | ✓ | ✓ | +| 管理错误跟踪 |   |   |   | ✓ | ✓ | +| 删除维基页面 |   |   |   | ✓ | ✓ | +| 查看项目审核事件 |   |   |   | ✓ | ✓ | +| Manage [push rules](../push_rules/push_rules.html) |   |   |   | ✓ | ✓ | +| Manage [project access tokens](./project/settings/project_access_tokens.html) |   |   |   | ✓ | ✓ | +| Switch visibility level |   |   |   |   | ✓ | +| 将项目转移到另一个名称空间 |   |   |   |   | ✓ | +| 重命名项目 |   |   |   |   | ✓ | +| 删除分叉关系 |   |   |   |   | ✓ | +| 移除专案 |   |   |   |   | ✓ | +| 存档项目 |   |   |   |   | ✓ | +| 删除问题 |   |   |   |   | ✓ | +| 删除管道 |   |   |   |   | ✓ | +| 删除合并请求 |   |   |   |   | ✓ | +| 禁用通知电子邮件 |   |   |   |   | ✓ | +| 用力推动到受保护的分支( *4* ) |   |   |   |   |   | +| 卸下受保护的分支( *4* ) |   |   |   |   |   | +| 查看 CI \ CD 分析 |   | ✓ | ✓ | ✓ | ✓ | +| 查看代码审查分析 |   | ✓ | ✓ | ✓ | ✓ | +| 查看见解 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看问题分析 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看存储库分析 |   | ✓ | ✓ | ✓ | ✓ | +| 查看价值流分析 | ✓ | ✓ | ✓ | ✓ | ✓ | + +*所有者权限仅在组或个人名称空间级别(例如,管理员)可用,并由其项目继承. + +1. 来宾用户能够对公共和内部项目执行此操作,但不能对私有项目执行此操作. +2. 来宾用户只能查看他们自己创建的机密问题. +3. 如果在**项目设置> CI / CD 中**启用了**公共管道** . +4. 不允许访客,记者,开发人员,维护人员或所有者使用. 请参阅[受保护的分支](./project/protected_branches.html) . +5. 如果[分支受保护](./project/protected_branches.html#using-the-allowed-to-merge-and-allowed-to-push-settings) ,则取决于授予开发人员和维护人员的权限. +6. 来宾用户可以访问 GitLab [**版本**](project/releases/index.html)来下载资产,但不能下载源代码,也不能查看存储库信息(例如标签和提交). +7. 操作仅限于用户拥有(引用)的记录​​. +8. 启用" [共享组锁定"后](./group/index.html#share-with-group-lock) ,该项目将无法与其他组共享. 它不影响具有组共享的组. +9. 有关合并请求的[合格批准人的](project/merge_requests/merge_request_approvals.html#eligible-approvers)信息,请参阅[合格](project/merge_requests/merge_request_approvals.html#eligible-approvers)合并[人](project/merge_requests/merge_request_approvals.html#eligible-approvers) . + +## Project features permissions[](#project-features-permissions "Permalink") + +### Wiki and issues[](#wiki-and-issues "Permalink") + +可以根据用户在项目设置上选择的可见性级别对用户隐藏 Wiki 和问题等项目功能. + +* 禁用:所有人禁用 +* 仅团队成员:即使您的项目是公开的或内部的,也只有团队成员才能看到 +* 有访问权限的所有人:每个人都可以看到,具体取决于您的项目可见性级别 +* 每个人:为所有人启用(仅适用于 GitLab 页面) + +### Protected branches[](#protected-branches "Permalink") + +可以在每个分支的[受保护](project/protected_branches.html)分支上应用其他限制. 此外,您可以自定义权限,以允许或阻止项目维护者和开发者推送到受保护的分支. 阅读有关" [允许合并"和"允许推送"设置](project/protected_branches.html#using-the-allowed-to-merge-and-allowed-to-push-settings)的文档以了解更多信息. + +### Value Stream Analytics permissions[](#value-stream-analytics-permissions "Permalink") + +如[相关文档](analytics/value_stream_analytics.html#permissions)所述,在 Value Stream Analytics 仪表板上找到当前权限. + +### Issue Board permissions[](#issue-board-permissions "Permalink") + +具有较高权限级别的开发人员和用户可以使用发行版的所有功能,即创建/删除列表并拖动发行版. 通读[有关发行板权限](project/issue_board.html#permissions)的[文档](project/issue_board.html#permissions)以了解更多信息. + +### File Locking permissions[](#file-locking-permissions-premium "Permalink") + +锁定文件或目录的用户是唯一可以编辑并将其更改推回锁定对象所在存储库的用户. + +通读[有关文件锁定权限的文档](project/file_lock.html#permissions-on-file-locking)以了解更多信息. + +### Confidential Issues permissions[](#confidential-issues-permissions "Permalink") + +报告者和更高的权限级别以及创建机密问题的来宾用户都可以访问机密问题. 要了解更多信息,请通读有关[权限和访问机密问题](project/issues/confidential_issues.html#permissions-and-access-to-confidential-issues)的文档. + +## Group members permissions[](#group-members-permissions "Permalink") + +**注意:**在 GitLab 11.0 中,"主"角色已重命名为"维护者". + +任何用户都可以将自己从组中删除,除非他们是该组的最后一个所有者. 下表描述了组中的各种用户权限级别. + +| Action | Guest | Reporter | Developer | Maintainer | Owner | +| --- | --- | --- | --- | --- | --- | +| 浏览组 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看见解图表 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看小组史诗 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 创建/编辑小组史诗 |   | ✓ | ✓ | ✓ | ✓ | +| 管理群组标签 |   | ✓ | ✓ | ✓ | ✓ | +| 查看容器注册表 |   | ✓ | ✓ | ✓ | ✓ | +| Pull [packages](packages/index.html) |   | ✓ | ✓ | ✓ | ✓ | +| Publish [packages](packages/index.html) |   |   | ✓ | ✓ | ✓ | +| 查看指标仪表板注释 |   | ✓ | ✓ | ✓ | ✓ | +| 分组创建项目 |   |   | ✓ (3) | ✓ (3) | ✓ (3) | +| 与群组分享(邀请)群组 |   |   |   |   | ✓ | +| 创建/编辑/删除组里程碑 |   |   | ✓ | ✓ | ✓ | +| 创建/编辑/删除迭代 |   |   | ✓ | ✓ | ✓ | +| 启用/禁用依赖项代理 |   |   | ✓ | ✓ | ✓ | +| 使用安全仪表板 |   |   | ✓ | ✓ | ✓ | +| 创建/编辑/删除指标仪表板注释 |   |   | ✓ | ✓ | ✓ | +| 查看/管理组级别的 Kubernetes 集群 |   |   |   | ✓ | ✓ | +| 创建子组 |   |   |   | ✓ (1) | ✓ | +| 编辑史诗般的评论(由任何用户发布) |   |   |   | ✓ (2) | ✓ (2) | +| 编辑群组设定 |   |   |   |   | ✓ | +| 管理组级 CI / CD 变量 |   |   |   |   | ✓ | +| 列出组部署令牌 |   |   |   | ✓ | ✓ | +| 创建/删除组部署令牌 |   |   |   |   | ✓ | +| 管理小组成员 |   |   |   |   | ✓ | +| 删除群组 |   |   |   |   | ✓ | +| 删除组史诗 |   |   |   |   | ✓ | +| 编辑 SAML SSO 帐单 | ✓ | ✓ | ✓ | ✓ | ✓ (4) | +| 查看组审核事件 |   |   |   |   | ✓ | +| 禁用通知电子邮件 |   |   |   |   | ✓ | +| 查看贡献分析 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看见解 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看问题分析 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看生产力分析 |   | ✓ | ✓ | ✓ | ✓ | +| 查看价值流分析 | ✓ | ✓ | ✓ | ✓ | ✓ | +| 查看帐单 |   |   |   |   | ✓ (4) | +| 查看使用配额 |   |   |   |   | ✓ (4) | + +1. 可以设置组以[允许所有者或所有者和维护者创建子组](group/subgroups/index.html#creating-a-subgroup) +2. 在 GitLab 12.2 中引入. +3. 可以在以下位置更改默认项目创建角色: + * [实例级别](admin_area/settings/visibility_and_access_controls.html#default-project-creation-protection) . + * [小组级别](group/index.html#default-project-creation-level) . +4. 不适用于子组. + +### Subgroup permissions[](#subgroup-permissions "Permalink") + +将成员添加到子组时,它们将从父组继承成员资格和权限级别. 如果您是其父级成员之一,则该模型允许访问嵌套组. + +To learn more, read through the documentation on [subgroups memberships](group/subgroups/index.html#membership). + +## External users[](#external-users-core-only "Permalink") + +如果希望用户只能访问某些内部或私有项目,则可以选择创建**外部用户** . 例如,当承包商在给定项目上工作且仅应访问该项目时,此功能可能很有用. + +外部用户: + +* 无法创建群组,项目或个人摘要. +* 只能访问公共项目和显式授予其访问权限的项目,从而对它们隐藏所有其他内部或私有项目(例如注销). + +可以通过将用户添加为项目或组的成员来授予访问权限. 与普通用户一样,他们将在项目或组中获得角色,具有[上面权限表](#project-members-permissions)中提到的所有功能. 例如,如果将外部用户添加为 Guest,而您的项目是私有项目,则他们将无权访问该代码; 如果您希望外部用户具有访问代码的权限,则需要授予其外部访问权限. 您应始终考虑[项目的可见性和权限设置](project/settings/index.html#sharing-and-permissions)以及用户的权限级别. + +**注意:**外部用户仍然计入许可证席位. + +管理员可以通过以下两种方法之一将用户标记为外部用户: + +* Either [through the API](../api/users.html#user-modification). +* 或通过导航到**管理区域>概述>用户**来创建新用户或编辑现有用户. 在那里,您将找到将用户标记为外部的选项. + +### Setting new users to external[](#setting-new-users-to-external "Permalink") + +默认情况下,新用户未设置为外部用户. 管理员可以在" **帐户和限制"**下的" **管理区域">"设置">"常规"**页面上更改此行为. + +如果更改了将新用户创建为外部用户的默认行为,则可以选择通过定义一组内部用户来缩小范围. **内部用户**字段允许指定电子邮件地址正则表达式模式以标识默认内部用户. 默认情况下,其电子邮件地址与正则表达式模式匹配的新用户将设置为内部用户,而不是外部协作者. + +正则表达式模式格式为 Ruby,但需要将其转换为 JavaScript,并将设置大小写忽略标志( `/regex pattern/i` ). 这里有些例子: + +* 使用`\.internal@domain\.com$`将以`.internal@domain.com`结尾的电子邮件地址标记为内部. +* 使用`^(?:(?!\.ext@domain\.com).)*$\r?` 使用不包含`.ext@domain.com`电子邮件地址标记用户为内部用户. + +**警告:**请注意,此正则表达式可能导致[正则表达式拒绝服务(ReDoS)攻击](https://en.wikipedia.org/wiki/ReDoS) . + +## Free Guest users[](#free-guest-users-ultimate "Permalink") + +如果为用户授予了项目,组或组或两者的来宾权限,并且对 GitLab 实例上的任何其他项目或组均没有更高的权限级别,则该用户被 GitLab 视为来宾用户,并且不会占用许可证席位. 对于新创建的用户,没有其他特定的"来宾"指定. + +如果在任何项目或组上为用户分配了更高的角色,则该用户将获得许可席位. 如果用户创建项目,则该用户将成为该项目的维护者,从而导致使用许可证席位. 另外,请注意,如果您的项目是内部项目或私有项目,则来宾用户将具有[上面](#project-members-permissions)的[权限表](#project-members-permissions)中提到的所有功能(例如,他们将无法浏览项目的存储库). + +**提示:**为防止访客用户创建项目,请以管理员身份编辑用户的个人资料,以将该用户标记为[external](#external-users-core-only) . 请注意,即使用户是外部用户,如果他们在任何项目或组中已经具有 Reporter 或更高权限, **也不**会将其计为免费的来宾用户. + +## Auditor users[](#auditor-users-premium-only "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/998) in [GitLab Premium](https://about.gitlab.com/pricing/) 8.17. + +审核员用户被授予对 GitLab 实例上所有项目,组和其他资源的只读访问权限. + +审核员用户应能够使用[审核员用户权限](../administration/auditor_users.html#permissions-and-restrictions-of-an-auditor-user)文档中所述的权限访问 GitLab 实例的所有项目和组. + +[Read more about Auditor users.](../administration/auditor_users.html) + +## Project features[](#project-features "Permalink") + +可以根据用户在项目设置上选择的可见性级别对用户隐藏 Wiki 和问题等项目功能. + +* 禁用:所有人禁用 +* 仅团队成员:即使您的项目是公开的或内部的,也只有团队成员才能看到 +* 有访问权限的所有人:每个人都可以看到,具体取决于您的项目可见性级别 +* 每个人:为所有人启用(仅适用于 GitLab 页面) + +## GitLab CI/CD permissions[](#gitlab-cicd-permissions "Permalink") + +**注意:**在 GitLab 11.0 中,"主"角色已重命名为"维护者". + +GitLab CI / CD 权限取决于用户在 GitLab 中的角色. 共有四个权限级别: + +* admin +* maintainer +* developer +* guest/reporter + +管理员用户可以在 GitLab 实例和项目范围内对 GitLab CI / CD 执行任何操作. 此外,所有管理员都可以使用`/admin/runners`下的管理界面. + +| Action | 来宾,记者 | Developer | Maintainer | Admin | +| --- | --- | --- | --- | --- | +| 查看提交和工作 | ✓ | ✓ | ✓ | ✓ | +| 重试或取消作业 |   | ✓ | ✓ | ✓ | +| 擦除工件和跟踪 |   | ✓ (*1*) | ✓ | ✓ | +| 移除专案 |   |   | ✓ | ✓ | +| 建立专案 |   |   | ✓ | ✓ | +| 更改项目配置 |   |   | ✓ | ✓ | +| 添加特定跑步者 |   |   | ✓ | ✓ | +| 添加共享的跑步者 |   |   |   | ✓ | +| 查看系统中的事件 |   |   |   | ✓ | +| 管理界面 |   |   |   | ✓ | + +1. 仅当工作是: + * 由用户触发 + * [从 GitLab 13.0 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/35069) ,不为受保护的分支运行 + +### Job permissions[](#job-permissions "Permalink") + +**注意:**在 GitLab 11.0 中,"主"角色已重命名为"维护者". + +> **注意:** GitLab 8.12 具有完全重新设计的作业权限系统. 阅读有关[新模型及其含义的](project/new_ci_build_permissions_model.html)所有信息. + +下表显示了由特定类型的用户触发的作业的授予特权: + +| Action | 来宾,记者 | Developer | Maintainer | Admin | +| --- | --- | --- | --- | --- | +| 运行 CI 作业 |   | ✓ | ✓ | ✓ | +| 从当前项目克隆源和 LFS |   | ✓ | ✓ | ✓ | +| 从公共项目克隆源和 LFS |   | ✓ | ✓ | ✓ | +| 从内部项目克隆源和 LFS |   | ✓ (*1*) | ✓ (*1*) | ✓ | +| 从私有项目克隆源和 LFS |   | ✓ (*2*) | ✓ (*2*) | ✓ (*2*) | +| 从当前项目中提取容器图像 |   | ✓ | ✓ | ✓ | +| 从公共项目中提取容器图像 |   | ✓ | ✓ | ✓ | +| 从内部项目中提取容器图像 |   | ✓ (*1*) | ✓ (*1*) | ✓ | +| 从私有项目中提取容器图像 |   | ✓ (*2*) | ✓ (*2*) | ✓ (*2*) | +| 将容器图像推送到当前项目 |   | ✓ | ✓ | ✓ | +| 将容器图像推送到其他项目 |   |   |   |   | +| 推送源和 LFS |   |   |   |   | + +1. 仅当用户不是外部用户时 +2. 仅当用户是项目成员时 + +### New CI job permissions model[](#new-ci-job-permissions-model "Permalink") + +GitLab 8.12 具有完全重新设计的工作权限系统. 要了解更多信息,请通读有关[新 CI / CD 权限模型](project/new_ci_build_permissions_model.html#new-ci-job-permissions-model)的文档. + +## Running pipelines on protected branches[](#running-pipelines-on-protected-branches "Permalink") + +合并或推送到受保护分支的权限用于定义用户是否可以运行 CI / CD 管道并在与那些分支相关的作业上执行操作. + +有关管道安全模型的详细信息,请参阅[受保护分支上](../ci/pipelines/index.html#pipeline-security-on-protected-branches)的安全性. + +## LDAP users permissions[](#ldap-users-permissions "Permalink") + +从 GitLab 8.15 开始,LDAP 用户权限现在可以由管理员用户手动覆盖. 通读有关[LDAP 用户权限](group/index.html#manage-group-memberships-via-ldap)的文档以了解更多信息. + +## Project aliases[](#project-aliases "Permalink") + +项目别名只能由 GitLab 管理员读取,创建和删除. 通读有关[项目别名](../user/project/index.html#project-aliases-premium-only)的文档以了解更多信息. \ No newline at end of file diff --git "a/docs/\347\224\250\346\210\267\350\264\246\345\217\267.md" "b/docs/\347\224\250\346\210\267\350\264\246\345\217\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..77b48846eea75e828c56a757542b62eb7c636ffd --- /dev/null +++ "b/docs/\347\224\250\346\210\267\350\264\246\345\217\267.md" @@ -0,0 +1,227 @@ +# 用户账号[](#用户账号 "Permalink") + +每个 GitLab 帐户都有一个用户个人资料和设置. 您的[个人资料](#user-profile)包含有关您以及您的 GitLab 活动的信息. 您的[设置](#profile-settings)允许您自定义 GitLab 的某些方面以适合自己. + +## Creating users[](#creating-users "Permalink") + +在 GitLab 上有几种创建用户的方法. 有关更多详细信息,请参见[创建用户文档](account/create_accounts.html) . + +## Signing in[](#signing-in "Permalink") + +有几种方法可以登录您的 GitLab 帐户. 有关更多详细信息,请参见[身份验证主题](../../topics/authentication/index.html) . + +### Unknown sign-in[](#unknown-sign-in "Permalink") + +GitLab will notify you if a sign-in occurs that is from an unknown IP address or device. See [Unknown Sign-In Notification](unknown_sign_in_notification.html) for more details. + +## User profile[](#user-profile "Permalink") + +要访问您的个人资料: + +1. 单击您的头像. +2. Select **Profile**. + +在您的个人资料页面上,您将看到以下信息: + +* 个人信息 +* 活动流:查看您的活动流线和贡献历史 +* 组: [组](../group/index.html)你的成员 +* 参与的项目:您参与的[项目](../project/index.html) +* 个人项目:您的个人项目(尊重项目的可见性级别) +* 已加星标的项目:您已加星标的项目 +* 片段:您的个人代码[片段](../snippets.html#personal-snippets) + +## Profile settings[](#profile-settings "Permalink") + +要访问您的个人资料设置: + +1. 单击您的头像. +2. Select **Settings**. + +从那里,您可以: + +* 更新您的个人信息 +* 修改[密码](#changing-your-password) +* 为您的个人资料设置[自定义状态](#current-status) +* 管理您的个人资料的[提交电子邮件](#commit-email) +* Manage [2FA](account/two_factor_authentication.html) +* 添加[外部帐户的](#add-details-of-external-accounts)详细信息. +* 更改您的用户名并[删除您的帐户](account/delete_account.html) +* 管理可以[将 GitLab 用作 OAuth 提供](../../integration/oauth_provider.html#introduction-to-oauth)程序的应用[程序](../../integration/oauth_provider.html#introduction-to-oauth) +* 管理[个人访问令牌](personal_access_tokens.html)以通过 API 和授权的应用程序访问您的帐户 +* 添加和删​​除链接到您帐户的电子邮件 +* 选择用于[通知](notifications.html) ,基于 Web 的提交并显示在您的公开个人资料上的电子邮件 +* 管理[SSH 密钥](../../ssh/README.html)以通过 SSH 访问您的帐户 +* 管理您的[首选项](preferences.html#syntax-highlighting-theme)以自定义自己的 GitLab 体验 +* [查看您的活动会话](active_sessions.html)并在必要时撤消其中的任何一个 +* 访问审核日志,这是涉及您帐户的重要事件的安全日志 + +## Changing your password[](#changing-your-password "Permalink") + +1. 导航到您的[个人资料的](#profile-settings) **设置>密码** . +2. 在"当前密码"字段中输入您的当前密码. +3. 两次输入所需的新密码,一次在"新密码"字段中,一次在"密码确认"字段中. +4. 点击"保存密码"按钮. + +如果您不知道当前密码,请选择"我忘记了密码"链接. + +[![Change your password](img/87be547831d2207399009a0f9dd4b91a.png)](./img/change_password_v13_0.png) + +## Changing your username[](#changing-your-username "Permalink") + +`username`是与用户 ID 相关的唯一[`namespace`](../group/index.html#namespaces) . 对其进行更改可能会产生意想不到的副作用,请在继续之前阅读[重定向的行为](../project/index.html#redirects-when-changing-repository-paths) . + +更改`username` : + +1. 导航到您的[个人资料的](#profile-settings) **设置>帐户** . +2. 在**更改用户**名下输入新的用户**名** . +3. Click **更新用户名**. + +**注意:**如果用户名包含带有[Container Registry](../packages/container_registry/index.html)标签的项目,则当前无法更改用户名,因为该项目无法移动.**提示:**如果要保留对原始名称空间的所有权并保护 URL 重定向,则可以更改一个组并向其传输项目,而无需更改组的路径或重命名用户名. 另外,您可以按照[《 GitLab 团队手册》中的详细步骤进行操作,该手册](https://about.gitlab.com/handbook/tools-and-tips/#how-to-change-your-username-at-gitlabcom)还介绍了使用[GitLab Pages](../project/pages/index.html)托管项目的情况. + +## Private profile[](#private-profile "Permalink") + +如果启用了此功能,将从用户配置文件页面( `https://gitlab.example.com/username` )中隐藏以下信息: + +* 原子饲料 +* 创建帐户的日期 +* 活动标签 +* 组选项卡 +* 参与项目标签 +* 个人项目标签 +* 已加星标的项目标签 +* 片段标签 + +要启用私人资料: + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. 在" **主要设置"**部分中选中" **私人个人资料"**选项. +5. Click **更新配置文件设置**. + +**Note:** All your profile information can be seen by yourself, and GitLab admins, even if the **私人简介** option is enabled. + +## Add details of external accounts[](#add-details-of-external-accounts "Permalink") + +GitLab 允许您将链接添加到您可能拥有的某些其他外部帐户,例如 Skype 和 Twitter. 他们可以帮助其他用户在其他平台上与您建立联系. + +要将链接添加到其他帐户: + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. 在" **主要设置"**部分中完成外部帐户的所需字段: + * Skype 的 + * 推特 + * 领英 +5. Click **更新配置文件设置**. + +## Private contributions[](#private-contributions "Permalink") + +在 GitLab 11.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/14078) . + +启用私人捐款将包括对私人项目的捐款,用户捐款日历图和用户最近的活动. + +要启用私人捐款: + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. 选中**私人捐款**选项. +5. Click **更新配置文件设置**. + +## Current status[](#current-status "Permalink") + +在 GitLab 11.2 中引入. + +您可以为用户个人资料提供自定义状态消息以及描述它的表情符号. 当您不在办公室或不在家时,这可能会有所帮助. 然后,其他用户可以在回答您的问题或为您分配工作时考虑您的身份. 请注意,即使您的[个人资料是私人的](#private-profile) ,您的状态也是公开可见的. + +状态消息限制为 100 个纯文本字符. 但是,它们可能包含表情符号代码,例如" `I'm on vacation :palm_tree:` . + +设置当前状态: + +1. 单击您的头像. +2. 点击**设置状态** ,或点击**编辑状态(**如果您已经设置了状态). +3. 设置所需的表情符号和/或状态消息. +4. 点击**设置状态** . 或者,您可以单击" **删除状态"**以完全删除您的用户状态. + +or + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. 在**您的状态**文本字段中输入您的状态消息. +5. 点击**添加状态表情符号** (笑脸),然后选择所需的表情符号. +6. Click **更新配置文件设置**. + +您还可以[使用 API](../../api/users.html#user-status)设置当前状态. + +## Commit email[](#commit-email "Permalink") + +在 GitLab 11.4 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21598) . + +提交电子邮件是在通过 GitLab 界面执行的每个与 Git 相关的操作中显示的电子邮件地址. + +您自己的任何已验证电子邮件地址都可以用作提交电子邮件. + +要更改您的提交电子邮件: + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. Click **提交电子邮件** dropdown. +5. 选择任何已验证的电子邮件. +6. Click **更新配置文件设置**. + +### Private commit email[](#private-commit-email "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22560) . + +GitLab 为用户提供了一个自动生成的私人提交电子邮件选项,该选项允许用户将其电子邮件信息保密. + +要启用此选项: + +1. 单击您的头像. +2. Select **Profile**. +3. 单击**编辑配置文件** (铅笔图标). +4. Click **提交电子邮件** dropdown. +5. Select **使用私人电子邮件** option. +6. Click **更新配置文件设置**. + +启用此选项后,将使用私有提交电子邮件执行与 Git 相关的所有操作. + +要保持完全匿名,您还可以复制此私人提交电子邮件,并使用以下命令在本地计算机上对其进行配置: + +``` +git config --global user.email <your email address> +``` + +## Troubleshooting[](#troubleshooting "Permalink") + +### Why do I keep getting signed out?[](#why-do-i-keep-getting-signed-out "Permalink") + +登录主 GitLab 应用程序时,将设置`_gitlab_session` cookie. `_gitlab_session`在您关闭浏览器时在客户端清除,并在"应用程序设置->会话持续时间(分钟)" / `session_expire_delay` (默认为`10080`分钟= 7 天)后过期. + +登录到主要的 GitLab 应用程序时,您还可以选中" Remember me"选项,该选项设置了`remember_user_token` cookie(通过[`devise`](https://github.com/heartcombo/devise) ). `remember_user_token`之后到期`config/initializers/devise.rb` > - `config.remember_for` (默认为 2 周). + +当`_gitlab_session`过期或不可用,GitLab 使用`remember_user_token`让你一个新的`_gitlab_session` ,让你在浏览器中通过重新签署. + +你的后`remember_user_token`到期,你的`_gitlab_session`清/过期,你会被要求再次登录验证您的身份出于安全原因. + +### Increased sign-in time[](#increased-sign-in-time "Permalink") + +在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/20340) . + +该`remember_user_token`一个 cookie 的寿命,现在可以通过超出期限延长集`config.remember_for` ,作为`config.extend_remember_period`标志现在设置为 true. + +GitLab 使用会话和持久性 Cookie: + +* 会话 cookie:通常,在关闭浏览器后,会话 cookie 会在浏览器会话结束时删除. `_gitlab_session` cookie 没有到期日期. +* 永久性 cookie: `remember_me_token`是有效期为两周的 cookie. 如果您在登录时单击"记住我",则 GitLab 会激活此 cookie. + +默认情况下,服务器在使用的任何会话上将生存时间(TTL)设置为 1 周. + +当您关闭浏览器时,会话 cookie 可能仍然保留. 例如,Chrome 具有"恢复上次退出的位置"选项,该选项可还原会话 Cookie. 换句话说,只要您每两周至少访问 GitLab 一次,只要打开浏览器选项卡,就可以保持登录状态. 无论是否安装了 2FA,服务器都会继续为该会话重置 TTL.如果关闭浏览器并再次打开它,则`remember_user_token`用户令牌 cookie 允许您的用户重新进行身份验证. + +如果没有`config.extend_remember_period`标志,则两周后您将被迫再次登录. \ No newline at end of file diff --git "a/docs/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" "b/docs/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..fec1f4116d93ab87d63c6ab073659ea25ef8e7a3 --- /dev/null +++ "b/docs/\347\224\265\345\255\220\351\202\256\344\273\266\351\200\232\347\237\245.md" @@ -0,0 +1,224 @@ +# 电子邮件通知[](#电子邮件通知 "Permalink") + +GitLab 通知使您可以随时了解 GitLab 中发生的事情. 启用通知后,您可以接收有关问题,合并请求和史诗活动的更新. 通知通过电子邮件发送. + +## Receiving notifications[](#receiving-notifications "Permalink") + +您将由于以下原因之一收到通知: + +* 您参与发行,合并请求或史诗. 在这种情况下, *参与*意味着评论或编辑. +* You enable notifications in an issue, merge request, or epic. To enable notifications, click the **Notifications** toggle in the sidebar to *on*. + +启用通知后,您将收到有关该问题,合并请求或史诗中发生的操作的通知. + +**注意:**通知可能会被管理员阻止,从而阻止发送通知. + +## Tuning your notifications[](#tuning-your-notifications "Permalink") + +通知的数量可能是巨大的. GitLab 允许您调整收到的通知. 例如,您可能希望收到有关特定项目中所有活动的通知,而对于其他项目,仅当您的名字被提及时才得到通知. + +您可以通过组合通知设置来调整收到的通知: + +* [Global notification settings](#global-notification-settings) +* [Notification scope](#notification-scope) +* [Notification levels](#notification-levels) + +### Editing notification settings[](#editing-notification-settings "Permalink") + +编辑通知设置: + +1. 点击您的个人资料图片,然后选择**设置** . +2. 点击左侧边栏中的**通知** . +3. 编辑所需的通知设置. 编辑的设置将自动保存并启用. + +这些通知设置仅适用于您. 它们不会影响同一项目或组中其他任何人收到的通知. + +[![notification settings](img/81fe297de1dccaedd3340735454273bc.png)](img/notification_global_settings.png) + +## Global notification settings[](#global-notification-settings "Permalink") + +**全局通知设置**是默认设置,除非您为项目或组选择不同的值. + +* 通知电子邮件 + * 这是您的通知将发送到的电子邮件地址. +* 全局通知级别 + * 这是适用于所有通知的默认[通知级别](#notification-levels) . +* 接收有关您自己的活动的通知. + * 如果您想接收有关自己活动的通知,请选中此复选框. 默认值:未选中. + +### Notification scope[](#notification-scope "Permalink") + +您可以通过为每个项目和组选择不同的通知级别来调整通知的范围. + +通知范围按优先级顺序应用(从高到低): + +* Project + * 对于每个项目,您可以选择一个通知级别. 您的项目设置将覆盖组设置. +* Group + * 对于每个组,您可以选择一个通知级别. 您的群组设置会覆盖您的默认设置. +* 全局(默认) + * 如果尚未为发生活动的项目或组选择通知级别,则将应用全局或*默认*通知级别. + +#### Project notifications[](#project-notifications "Permalink") + +您可以为每个项目选择一个通知级别. 如果您需要密切监视选定项目中的活动,这将很有用. + +[![notification settings](img/bab81ba0a915cec8b039166d2defc074.png)](img/notification_project_settings_v12_8.png) + +要为项目选择通知级别,请使用以下两种方法之一: + +1. 点击您的个人资料图片,然后选择**设置** . +2. 点击左侧边栏中的**通知** . +3. 在" **项目"**部分中找到该项目. +4. 选择所需的[通知级别](#notification-levels) . + +Or: + +1. 导航到项目页面. +2. 单击带有下拉图标的通知下拉列表. +3. 选择所需的[通知级别](#notification-levels) . + +有关如何在有新版本发布时通知的演示,请参阅[发布通知](https://www.youtube.com/watch?v=qyeNkGgqmH4) . + +#### Group notifications[](#group-notifications "Permalink") + +您可以为每个组选择通知级别和电子邮件地址. + +[![notification settings](img/c39dc466882289b42ad827dbbc05b39f.png)](img/notification_group_settings_v12_8.png) + +##### Group notification level[](#group-notification-level "Permalink") + +要为组选择通知级别,请使用以下两种方法之一: + +1. 点击您的个人资料图片,然后选择**设置** . +2. 点击左侧边栏中的**通知** . +3. 在" **组"**部分中找到该项目. +4. 选择所需的[通知级别](#notification-levels) . + +* * * + +1. 导航到组的页面. +2. 单击带有下拉图标的通知下拉列表. +3. 选择所需的[通知级别](#notification-levels) . + +##### Group notification email address[](#group-notification-email-address "Permalink") + +在 GitLab 12.0 中引入 + +您可以选择一个电子邮件地址,以接收您所属的每个组的通知. 例如,如果您是自由职业者,并且希望将有关客户项目的电子邮件分开存放,这可能会很有用. + +1. 点击您的个人资料图片,然后选择**设置** . +2. 点击左侧边栏中的**通知** . +3. 在" **组"**部分中找到该项目. +4. 选择所需的电子邮件地址. + +### Notification levels[](#notification-levels "Permalink") + +对于每个项目和组,您可以选择以下级别之一: + +| Level | Description | +| --- | --- | +| Global | 您的全局设置适用. | +| Watch | 接收任何活动的通知. | +| 提一下 | `@mentioned`在评论中`@mentioned`接收通知. | +| Participate | 接收有关您参与的线程的通知. | +| Disabled | 关闭通知. | +| Custom | 接收有关自定义选定事件的通知. | + +## Notification events[](#notification-events "Permalink") + +将通知用户以下事件: + +| Event | 发给 | 设定等级 | +| --- | --- | --- | +| 添加了新的 SSH 密钥 | User | 安全电子邮件,始终发送. | +| 添加了新电子邮件 | User | 安全电子邮件,始终发送. | +| 电邮已变更 | User | 安全电子邮件,始终发送. | +| 密码已更改 | User | 安全电子邮件,始终发送. | +| 新用户创建 | User | 在创建用户时发送,但 OmniAuth(LDAP)除外 | +| 用户已添加到项目 | User | 将用户添加到项目时发送 | +| 项目访问权限级别已更改 | User | 更改用户项目访问级别时发送 | +| 用户已添加到组 | User | 将用户添加到组时发送 | +| 群组访问权限级别已更改 | User | 更改用户组访问级别时发送 | +| 项目已移 | 项目成员(1) | (1)不禁用 | +| 新品发布 | 项目成员 | 自定义通知 | + +## Issue / Epics / Merge request events[](#issue--epics--merge-request-events "Permalink") + +在以下大多数情况下,通知将发送到: + +* Participants: + * 发行/合并请求的作者和受让人 + * 关于问题/合并请求的评论的作者 + * `@username`在问题,合并请求或史诗的标题或描述中提到的任何人 + * `@username`在有关问题,合并请求或史诗的任何评论中提及的"参与"或更高通知级别的任何人 +* 观察者:通知级别为"观察"的用户 +* 订阅者:手动订阅问题,合并请求或史诗的任何人 +* 自定义:通知级别为"自定义"的用户针对下表中显示的任何事件打开了通知 + +**注意:**为了最大程度地减少不需要任何操作的通知的数量,从[GitLab 12.9 起](https://gitlab.com/gitlab-org/gitlab/-/issues/616) ,不再为项目中的所有活动通知合格的批准者. 要接收它们,他们必须将其用户通知设置更改为" **观看"** . + +| Event | 发给 | +| --- | --- | +| 新问题 |   | +| 结束期 |   | +| 重新分配问题 | 以上,加上旧的受让人 | +| 重新打开问题 |   | +| 到期问题 | 选择此事件的参与者和自定义通知级别 | +| 更改里程碑问题 | 选择了此事件的订户,提及的参与者和自定义通知级别 | +| 消除里程碑问题 | 选择了此事件的订户,提及的参与者和自定义通知级别 | +| 新合并请求 |   | +| 推送合并请求 | 选择此事件的参与者和自定义通知级别 | +| 重新分配合并请求 | 以上,加上旧的受让人 | +| 关闭合并请求 |   | +| 重新打开合并请求 |   | +| 合并合并请求 |   | +| 更改里程碑合并请求 | 选择了此事件的订户,提及的参与者和自定义通知级别 | +| 删除里程碑合并请求 | 选择了此事件的订户,提及的参与者和自定义通知级别 | +| 新评论 | 以上内容,加上评论中`@username`提及的任何人,通知级别为"提及"或更高 | +| 管道失败 | 管道的作者 | +| 固定管道 | 管道的作者. 默认启用. 在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/24309) . 管理员可以使用`ci_pipeline_fixed_notifications` [功能标记](../../administration/feature_flags.html)禁用此通知选项. | +| 成功的管道 | 管道的作者(如果他们具有成功管道的自定义通知设置). 如果管道先前失败,则将为失败后的第一个成功管道发送`Fixed pipeline`消息,然后为任何进一步成功的管道发送`Successful pipeline`消息. | +| 新史诗 |   | +| 接近史诗 |   | +| 重新开启史诗 |   | + +此外,如果发布或合并请求的标题或描述发生了更改,则通知将通过`@username`发送到任何**新**提及的内容,就像在原始文本中提到的一样. + +您不会收到有关您自己创建的问题,合并请求或里程碑的通知(除非由于问题而定). 仅当其他人对您创建或提及的内容进行评论或添加更改时,您才会收到自动通知. + +如果开放的合并请求由于冲突而变得不可合并,则将通知其原因. 如果用户还将合并请求设置为一旦管道成功就自动合并,则该用户也会收到通知. + +## Filtering email[](#filtering-email "Permalink") + +通知电子邮件包括特定于 GitLab 的标题. 您可以根据这些标头的内容过滤通知电子邮件,以更好地管理您的通知. 例如,您可以过滤特定项目的所有电子邮件,在该项目中您将被分配合并请求或问题. + +下表列出了所有特定于 GitLab 的电子邮件标题: + +| Header | Description | +| --- | --- | +| `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 diff --git "a/docs/\347\231\273\345\275\225\346\227\245\345\277\227.md" "b/docs/\347\231\273\345\275\225\346\227\245\345\277\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..7b694e71a81ecd6ee97f5f4dd8110879516f76c3 --- /dev/null +++ "b/docs/\347\231\273\345\275\225\346\227\245\345\277\227.md" @@ -0,0 +1,24 @@ +# 登录日志[](#登录日志 "Permalink") + +在 GitLab 10.8 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17867) . + +GitLab 列出了已登录到您帐户的所有设备. 这使您可以查看会话,并撤销所有您不认识的会话. + +## Listing all active sessions[](#listing-all-active-sessions "Permalink") + +1. 单击您的头像. +2. Select **Settings**. +3. 点击边栏中的**活动会话** . + +[![Active sessions list](img/2d1845503f8ff90d4dc71459313e4e62.png)](img/active_sessions_list.png) + +## Active sessions limit[](#active-sessions-limit "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/31611) . + +GitLab 允许用户一次拥有多达 100 个活动会话. 如果活动会话数超过 100,则最早的会话将被删除. + +## Revoking a session[](#revoking-a-session "Permalink") + +1. 使用前面的步骤导航到" **活动会话"** . +2. 单击除会话外的**撤消** . 当前会话无法撤消,因为这将使您退出 GitLab. \ No newline at end of file diff --git "a/docs/\347\234\213\346\235\277.md" "b/docs/\347\234\213\346\235\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..7dff131abf9b63d44c4a3a45c1f98e3a219634c5 --- /dev/null +++ "b/docs/\347\234\213\346\235\277.md" @@ -0,0 +1,404 @@ +# 看板[](#issue-boards "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5554) in [GitLab 8.11](https://about.gitlab.com/releases/2016/08/22/gitlab-8-11-released/#issue-board). + +## Overview[](#overview "Permalink") + +GitLab 发行板是一个软件项目管理工具,用于计划,组织和可视化功能或产品发布的工作流程. 它可以用作[看板](https://en.wikipedia.org/wiki/Kanban_(development))或[Scrum](https://en.wikipedia.org/wiki/Scrum_(software_development))板. + +它结合了问题跟踪和项目管理功能,将所有内容保持在同一位置,因此您无需在不同平台之间切换即可组织工作流程. + +使用问题板,您可以将问题组织在与其分配的标签相对应的列表中,从而在这些列表中可视化设计为卡片的问题. + +您定义流程,GitLab 会为您进行组织. 您添加标签,然后创建相应的列表以提取现有问题. 准备就绪后,可以将发行卡从一个步骤拖放到下一个步骤. + +[![GitLab issue board - Core](img/2a62cf1a17a5306e4d6cd91c30149941.png)](img/issue_boards_core.png) + +观看发布板功能的[视频演示](https://youtu.be/UWsJ8tkHAa8) (在 GitLab 8.11 中引入-2016 年 8 月). + +### Advanced features of issue boards[](#advanced-features-of-issue-boards "Permalink") + +* 每个项目创建多个发行板. +* 每个组创建多个发行板. +* 添加[受让人](#assignee-lists-premium)和[里程碑的](#milestone-lists-premium)列表. + +检查[GitLab Enterprise 的](#gitlab-enterprise-features-for-issue-boards)所有[功能是否有发行板](#gitlab-enterprise-features-for-issue-boards) . + +[![GitLab issue boards - Premium](img/e6522f2cefe000bb17275b2a0451bf82.png)](img/issue_boards_premium.png) + +## How it works[](#how-it-works "Permalink") + +发行板功能通过将 GitLab 现有的[发行跟踪功能](issues/index.html#issues-list)和[标签](labels.html)用作 Scrum 板的列表而建立. + +使用问题板,您可以对问题有不同的看法,同时保持在问题跟踪器中看到的相同过滤和排序功能. 发行板基于其项目的标签结构,因此它使用相同的描述性标签来指示在板上的位置,从而在整个开发生命周期中保持一致性. + +问题板向您显示团队正在处理的问题,分配给每个人的问题以及这些问题在工作流中的位置. + +您可以从一个平台创建问题,托管代码,执行审阅,构建,测试和部署. 问题板可帮助您在 GitLab 中可视化和管理整个过程. + +有了[多个发行板](#use-cases-for-multiple-issue-boards) ,您可以走得更远,因为您不仅可以从更广阔的角度组织自己和您的项目,每个项目使用一个发行板,还可以让您的团队成员通过在多个发行板中创建多个发行板来组织自己的工作流程.同一项目. + +## Use cases[](#use-cases "Permalink") + +有多种方法可以使用针对自己喜欢的工作流程量身定制的 GitLab 发行板. 这是发行板的一些常见用例. + +### Use cases for a single issue board[](#use-cases-for-a-single-issue-board "Permalink") + +借助 GitLab 工作流程,您可以讨论问题中的提案,使用标签对其进行分类,然后在其中使用问题委员会进行组织并确定优先级. + +例如,让我们考虑以下简化的开发工作流程: + +1. 您有一个托管应用程序代码库的存储库,而您的团队则在积极贡献代码. +2. 您的**后端**团队将开始新的实施工作,收集反馈和批准,并将其传递给**前端**团队. +3. 前端完成后,新功能将部署到要测试的**登台**环境中. +4. 成功后,它将部署到**生产中** . + +如果您具有标签" **后端** "," **前端** "," **暂存** "和" **生产** ",以及带有每个列表的发行板,则可以: + +* 可视化从开发生命周期开始到部署到生产的整个实现流程. +* 通过垂直移动优先顺序排列列表中的问题. +* 在列表之间移动问题,以根据您设置的标签进行整理. +* 通过选择一个或多个现有问题,将多个问题添加到板中的列表中. + +[![issue card moving](img/a1f2874d536bbec36fba8132d424e066.png)](img/issue_board_move_issue_card_list.png) + +### Use cases for multiple issue boards[](#use-cases-for-multiple-issue-boards "Permalink") + +借助[多个发行委员会](#multiple-issue-boards) ,每个团队可以拥有自己的董事会来单独组织其工作流程. + +#### Scrum team[](#scrum-team "Permalink") + +具有多个发行董事会,每个团队只有一个董事会. 现在,您可以在流程的每个部分中解决问题. 例如: **To Do** , **Doing**和**Done** . + +#### Organization of topics[](#organization-of-topics "Permalink") + +创建列表以按主题对问题进行排序,并快速在主题或组之间(例如**UX** , **Frontend**和**Backend**之间)进行更改. 更改反映在各个方面,因为更改列表会相应更新每个问题的标签. + +#### Advanced team handover[](#advanced-team-handover "Permalink") + +例如,假设我们有一个 UX 小组,其问题板包含: + +* **去做** +* **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[](#quick-assignments "Permalink") + +为每个团队成员创建列表,然后将问题快速拖放到每个团队成员的列表中. + +## Issue board terminology[](#issue-board-terminology "Permalink") + +**发行板**代表您的**发行**的独特视图. 它可以有多个列表,每个列表由卡代表的问题组成. + +**列表**是问题板上的一列,显示与某些属性匹配的问题. 除了默认的"打开"和"关闭"列表外,每个其他列表还显示与您选择的标签,受让人或里程碑匹配的问题. 在每个列表的顶部,您可以看到属于该问题的数量. 列表类型包括: + +* **开** (默认):不属于其他列表中的一个所有打开的问题. 始终显示为最左边的列表. +* **已关闭** (默认):所有已关闭的问题. 始终显示为最右边的列表. +* **标签列表** : **标签的**所有未解决问题. +* [**受让人列表**](#assignee-lists-premium) :分配给用户的所有未解决的问题. +* [**里程碑列表**](#milestone-lists-premium) : [**里程碑的**](#milestone-lists-premium)所有未解决的问题. + +**卡**是列表中的一个框,它代表一个问题. 您可以将卡片从一个列表拖动到另一个列表,以更改其标签,受让人或里程碑. 卡上显示的信息包括: + +* 发行标题 +* 相关标签 +* 发行数量 +* Assignee + +## Permissions[](#permissions "Permalink") + +具有[报告者和更高角色的](../permissions.html)用户可以使用发布板功能的所有功能来创建或删除列表,并将问题从一个列表拖动到另一个列表. + +## GitLab Enterprise features for issue boards[](#gitlab-enterprise-features-for-issue-boards "Permalink") + +GitLab 核心和 GitLab.com 免费层上均提供 GitLab 发行板,但某些高级功能仅在[更高层中提供](https://about.gitlab.com/pricing/) . + +### Summary of features per tier[](#summary-of-features-per-tier "Permalink") + +下表列出了在不同的[GitLab 层](https://about.gitlab.com/pricing/)中可用的不同发行板功能: + +| Tier | 项目发行委员会的数量 | Number of Group issue boards | 可配置的发行板 | 受让人名单 | +| --- | --- | --- | --- | --- | +| 核心/免费 | Multiple | 1 | No | No | +| 入门/青铜 | Multiple | 1 | Yes | No | +| 高级/白银 | Multiple | Multiple | Yes | Yes | +| 终极/金 | Multiple | Multiple | Yes | Yes | + +### Multiple issue boards[](#multiple-issue-boards "Permalink") + +版本历史 + +* 在 GitLab 8.13 中[引入](https://about.gitlab.com/releases/2016/10/22/gitlab-8-13-released/) . +* 每个项目有多个发行板[移至](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53811) GitLab 12.1 中的[GitLab Core](https://about.gitlab.com/pricing/) . +* 每套[GitLab Premium 中](https://about.gitlab.com/pricing/)都有多个发行板. + +多个发行板允许给定项目或组使用多个发行板. 对于具有多个团队的大型项目,或者在使用存储库托管多个产品代码的情况下,这非常有用. + +使用菜单顶部的搜索框,您可以过滤列出的板. + +当您有十个或更多的板可用时,菜单中还会显示" **最近"**部分,其中包含最后四个被访问板的快捷方式. + +[![Multiple issue boards](img/dbb80511727781129d638c6d3413a45f.png)](img/issue_boards_multiple.png) + +当您在具有多个板的项目或组中重新访问问题板时,GitLab 会自动加载您上次访问的板. + +#### Create an issue board[](#create-an-issue-board "Permalink") + +要创建新的发行板: + +1. 单击"发行板"页面左上角的具有当前板名称的下拉菜单. +2. Click **创建新板**. +3. 输入新板的名称并选择其范围:里程碑,标签,受让人或权重. + +#### Delete an issue board[](#delete-an-issue-board "Permalink") + +要删除当前活动的发行板: + +1. 单击"发行板"页面左上角的具有当前板名称的下拉菜单. +2. Click **删除板**. +3. 单击**删除**进行确认. + +### Configurable issue boards[](#configurable-issue-boards-starter "Permalink") + +[Introduced](https://about.gitlab.com/releases/2017/11/22/gitlab-10-2-released/#issue-boards-configuration) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.2. + +发行板可以与 GitLab [里程碑](milestones/index.html#milestones) , [标签](labels.html) ,受让人和权重关联,它们会根据这些字段自动过滤发行板问题. 这使您可以根据团队的需要创建独特的董事会. + +[![Create scoped board](img/bba7007707d548d73c9b6f0efad3c50b.png)](img/issue_board_creation.png) + +您可以在创建木板时或单击"编辑木板"按钮来定义木板的范围. 将里程碑,受让人或权重分配给发行板后,您将不再能够在搜索栏中进行筛选. 为此,您需要从发行板上删除所需的范围(例如,里程碑,受让人或权重). + +[![Edit board configuration](img/0d59f9135c1fed79a51921909516ef69.png)](img/issue_board_edit_button.png) + +如果您在木板中没有编辑权限,则仍然可以通过点击**查看范围**来**查看**配置. + +[![Viewing board configuration](img/c01efbb34a741e385a7089a6799e9b59.png)](img/issue_board_view_scope.png) + +### Focus mode[](#focus-mode "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 9.1 中[引入]((https://about.gitlab.com/releases/2017/04/22/gitlab-9-1-released/#issue-boards-focus-mode-ees-eep)) . +* [移动](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28597)到 GitLab.com 的自由层在 12.10\. +* 在 13.0 中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/212331) GitLab Core. + +单击右上角的按钮可打开和关闭聚焦模式. 在焦点模式下,导航 UI 处于隐藏状态,使您可以集中精力处理板上的问题. + +[![Board focus mode](img/0fdd144a1493e4d21226f1b04a5d336a.png)](img/issue_board_focus_mode.gif) + +* * * + +### Sum of issue weights[](#sum-of-issue-weights-starter "Permalink") + +每个列表的顶部指示属于该列表的问题的问题权重之和. 当使用板进行容量分配时,尤其是与[受让人列表](#assignee-lists-premium)结合使用时,这很有用. + +[![issue board summed weights](img/38c073cc1c78dc88bf317e878e9995cc.png)](img/issue_board_summed_weights.png) + +### Group issue boards[](#group-issue-boards-premium "Permalink") + +[Introduced](https://about.gitlab.com/releases/2017/09/22/gitlab-10-0-released/#group-issue-boards) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.0. + +可以在组导航级别上访问,组问题委员会提供与项目级委员会相同的功能,但是它可以显示该组及其子孙组中所有项目的问题. 同样,您只能按组标签过滤这些板. 通过边栏更新机制更新问题的里程碑和标签时,再次只有组级对象可用. + +**注意:** [GitLab Premium](https://about.gitlab.com/pricing/) 10.0 最初[引入](https://about.gitlab.com/releases/2017/09/22/gitlab-10-0-released/#group-issue-boards)了多个组发行板,而 GitLab Core 10.6 提供了每个组一个组发行板. + +[![Group issue board](img/ce119917ec56b195b909d4371bb994aa.png)](img/group_issue_board.png) + +### Assignee lists[](#assignee-lists-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5784) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.0. + +就像在常规列表中显示带有选定标签的所有问题一样,您可以添加一个受让人列表,该列表显示分配给用户的所有问题. 您可以拥有一个包含标签列表和受让人列表的木板. 添加受让人列表: + +1. Click **新增清单**. +2. 选择" **受理人列表"**选项卡. +3. 搜索并单击要添加为受让人的用户. + +现在已添加了受让人列表,您可以通过[将问题拖到](#drag-issues-between-lists)受让人列表中或从受让人列表中[拖动问题](#drag-issues-between-lists)来向该用户分配或取消分配问题. 要删除受让人列表(与标签列表一样),请单击垃圾桶图标. + +[![Assignee lists](img/baa29e50412ef4acd25e287681ad9e9e.png)](img/issue_board_assignee_lists.png) + +### Milestone lists[](#milestone-lists-premium "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/6469) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.2. + +You’re also able to create lists of a milestone. These are lists that filter issues by the assigned milestone, giving you more freedom and visibility on the issue board. To add a milestone list: + +1. Click **新增清单**. +2. 选择" **里程碑"**选项卡. +3. 搜索并单击里程碑. + +与受让人列表类似,您现在可以[将问题拖到](#drag-issues-between-lists)里程碑列表中或从里程碑列表中[拖动](#drag-issues-between-lists)出来,以操纵所拖动问题的里程碑. 与其他列表类型一样,单击垃圾桶图标以删除列表. + +[![Milestone lists](img/6261dd255633edf09ab3d7245ccaf2c1.png)](img/issue_board_milestone_lists.png) + +## Work In Progress limits[](#work-in-progress-limits-starter "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/11403) + +您可以为每个问题列表设置进行中(WIP)限制. 设置限制后,列表的标题将显示列表中的问题数和问题的软限制. + +Examples: + +* 您有一个包含四个问题的列表,限制为五个,标题将显示**4/5** . 如果超出限制,则当前的问题数将显示为红色. +* 您有一个包含五个问题的列表,限制为五个. 当您将另一个问题移到该列表时,列表的标题显示**6/5** ,其中六个显示为红色. + +设置列表的在制品限制: + +1. 导航到您所属的项目或小组委员会. +2. 点击设置图标( )放在列表​​标题中. +3. 在"进行中的**工作限制"**旁边,单击" **编辑"** . +4. 输入最大问题数. +5. 按`Enter`保存. + +## Blocked issues[](#blocked-issues "Permalink") + +在 GitLab 12.8 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/34723) . + +如果一个问题被另一个问题阻止,则其标题旁边会出现一个图标,指示其阻止状态. + +[![Blocked issues](img/b1edf28a1aa5c59ffa779a574c4fc548.png)](img/issue_boards_blocked_icon_v12_8.png) + +## Actions you can take on an issue board[](#actions-you-can-take-on-an-issue-board "Permalink") + +* [Create a new list](#create-a-new-list). +* [Delete an existing list](#delete-a-list). +* [Add issues to a list](#add-issues-to-a-list). +* [Remove an issue from a list](#remove-an-issue-from-a-list). +* [筛选](#filter-issues)出现在问题板上的问题. +* [Create workflows](#create-workflows). +* [Drag issues between lists](#drag-issues-between-lists). +* [Multi-select issue cards](#multi-select-issue-cards). +* [Re-order issues in lists](#issue-ordering-in-a-list). +* 拖动列表并重新排序. +* 更改问题标签(通过在列表之间拖动问题). +* 解决问题(将其拖动到" **完成"**列表中). + +如果您无法执行上述某些操作,请确保您具有正确的[权限](#permissions) . + +### First time using an issue board[](#first-time-using-an-issue-board "Permalink") + +第一次打开问题面板时,会显示默认列表(" **打开"**和" **关闭"** )以及欢迎消息,其中提供了两个选项. 您可以: + +* 创建一组预定义的标签(默认情况下: **To Do**和**Doing** ),并在发行板上创建其对应的列表. +* 退出并使用自己的列表. + +[![issue board welcome message](img/768ab05f8c35931c200b6da1f8d92352.png)](img/issue_board_welcome_message.png) + +如果选择使用并创建预定义列表,则它们将显示为空,因为与它们关联的标签要到那时才存在,这意味着系统无法自动填充它们. 当然,如果预定义标签还不存在. 如果确实存在,则会创建该列表,并填充具有该标签的问题. + +### Create a new list[](#create-a-new-list "Permalink") + +通过单击发行板右上角的" **添加列表"**按钮来创建新列表. + +[![issue board welcome message](img/604dc2f6326d049dca30995958a84ad2.png)](img/issue_board_add_list.png) + +然后,选择标签或用户以从中创建列表. 新列表将被插入列表的末尾,在**完成**之前. 移动和重新排序列表就像拖动列表一样简单. + +要为尚不存在的标签创建列表,请选择**创建新标签**来**创建标签** . 这将立即创建标签并将其添加到下拉列表中. 现在,您可以选择它来创建列表. + +### Delete a list[](#delete-a-list "Permalink") + +要从发布板上删除列表,请使用列表标题中的小垃圾桶图标. 将出现一个确认对话框供您确认. + +删除列表对问题和标签没有任何影响,只是删除了列表视图. 如果需要,您随时可以将其添加回去. + +### Add issues to a list[](#add-issues-to-a-list "Permalink") + +您可以通过单击**问题**面板右上角的" **添加问题"**按钮将问题添加到列表中. 这将打开一个模式窗口,您可以在其中查看不属于任何列表的所有问题. + +通过单击卡片选择一个或多个问题,然后单击" **添加问题"**以将其添加到所选列表中. 您可以通过按作者,受让人,里程碑和标签筛选来限制要添加到列表中的问题. + +[![Bulk adding issues to lists](img/1d54aa31264e3f3b98ebf2049669f910.png)](img/issue_boards_add_issues_modal.png) + +### Remove an issue from a list[](#remove-an-issue-from-a-list "Permalink") + +从列表中删除问题可以通过单击问题卡,然后单击侧边栏中的**从**面板中**删除**按钮来完成. 相应的标签被删除. + +[![Remove issue from list](img/529405d6cc5cbeb813be69b57b0e45b1.png)](img/issue_boards_remove_issue.png) + +### Filter issues[](#filter-issues "Permalink") + +You should be able to use the filters on top of your issue board to show only the results you want. This is similar to the filtering used in the issue tracker since the metadata from the issues and labels are re-used in the issue board. + +您可以按作者,受让人,里程碑和标签过滤. + +### Create workflows[](#create-workflows "Permalink") + +通过对列表重新排序,可以创建工作流程. 由于发行版中的列表基于标签,因此可以与您现有的发行版一起使用. 因此,如果您已经用"后端"和"前端"标记了事物,则问题在创建它们时会出现在列表中. 此外,这意味着您可以通过更改标签轻松地在列表之间移动某些内容. + +使用发行板的典型工作流程为: + +1. 您已经[创建了](labels.html#label-management)标签并对其进行了[优先排序,](labels.html#label-priority)以便可以轻松地对问题进行分类. +2. 您遇到很多问题(理想情况下是带有标签的). +3. 您访问发行板并开始[创建列表](#create-a-new-list)以创建工作流程. +4. 您可以在列表中四处移动问题,以便您的团队知道谁应该处理什么问题. +5. 当一个团队的工作完成时,可以将问题拖到下一个列表中,以便其他人来接听. +6. 最终解决问题后,该问题将移至" **完成"**列表并自动关闭. + +例如,您可以基于"前端"标签和"后端"标签创建一个列表. 设计师可以通过将问题添加到"前端"列表来开始处理问题. 这样,每个人都知道设计师现在正在研究此问题. 然后,一旦完成,所有要做的就是将其拖到下一个列表"后端",后端开发人员最终可以在该列表中进行选择. 完成后,将其移至**完成** ,以解决问题. + +访问问题时可以清楚地看到此过程,因为每次移动到另一个列表时,标签都会更改,并且不会记录系统. + +[![issue board system notes](img/1be5fea51b824b103e9b5bac12136a90.png)](img/issue_board_system_notes.png) + +### Drag issues between lists[](#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[](#multi-select-issue-cards "Permalink") + +在 GitLab 12.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/18954) . + +您可以选择多个发行卡,然后将组拖动到列表中的另一个位置或另一个列表中. 这样可以更快地一次重新排序许多问题. + +要选择并移动多张卡片: + +1. 使用`Ctrl`选择每个卡+ `Click`在 Windows 或 Linux,或者`Cmd 的` + `Click`在 MacOS. +2. 将所选卡中的一张拖到另一个位置或列表,所有所选卡都将移动. + +[![Multi-select Issue Cards](img/09b8263a3534de004ff180005a876b4a.png)](img/issue_boards_multi_select_v12_4.png) + +### Issue ordering in a list[](#issue-ordering-in-a-list "Permalink") + +访问董事会时,问题在任何列表中都显示为有序. 您可以通过拖放问题来更改顺序. 更改后的订单将保存到系统中,以便以后访问同一板的任何人都可以看到重新排序,但有一些例外. + +给定问题首次出现在任何面板中(即,用户首次加载包含该问题的面板)时,将根据[优先级顺序](labels.html#label-priority)对该列表中的其他问题进行[排序](labels.html#label-priority) . + +此时,系统会为该问题分配一个相对顺序值,该值代表其相对于列表中其他问题的相对顺序. 每当您拖放该问题的重新排序时,其相对订单值都会相应更改. + +同样,当问题由用户加载时,在任何板上出现的任何时间,都会使用更新的相对订单值进行订购. (这是第一次出现从上述优先顺序中提取问题的问题.)这意味着,如果您的 GitLab 实例内给定板上的任何用户将问题`A`拖放到问题`B`上方的顺序进行了重新排序,每当随后将这两个问题加载到同一实例中的任何板(例如,可以是不同的项目板或不同的组板)中时,都将维持订购. + +此顺序还会影响[问题列表](issues/sorting_issue_lists.html) . 在发行板上更改订单会更改发行列表中的顺序,反之亦然. + +## Tips[](#tips "Permalink") + +需要记住的几件事: + +* 在列表之间移动问题会从其来源列表中删除标签,并从其去往列表中添加标签. +* 如果一个问题有多个标签,则它可以存在于多个列表中. +* 如果标记了问题,则会自动用问题填充列表. +* 单击卡片内的问题标题,将您转到该问题. +* 单击卡内的标签可快速筛选整个问题板,并仅显示所有带有该标签的列表中的问题. +* 出于性能和可见性的原因,每个列表默认显示前 20 个问题. 如果问题超过 20 个,请开始向下滚动,然后出现下 20 个问题. \ No newline at end of file diff --git "a/docs/\347\256\241\347\220\206Issue.md" "b/docs/\347\256\241\347\220\206Issue.md" new file mode 100644 index 0000000000000000000000000000000000000000..a5a7bc65340d71bd6d5374e21784130d7653571a --- /dev/null +++ "b/docs/\347\256\241\347\220\206Issue.md" @@ -0,0 +1,210 @@ +# 管理Issue[](#管理Issue "Permalink") + +[GitLab 问题](index.html)是在[GitLab](index.html)中就想法和计划工作进行协作的基本介质. [创建](#create-a-new-issue) , [移动](#moving-issues) , [关闭](#closing-issues)和[删除](#deleting-issues)是可以解决问题的关键操作. + +## Create a new issue[](#create-a-new-issue "Permalink") + +创建新问题时,系统将提示您填写问题的[数据和字段,](issue_data_and_actions.html)如下所示. 如果知道要分配给问题的值,则可以使用" [快速操作"](../quick_actions.html)功能输入值,而不用从列表中选择它们. + +创建问题时,您可以使用**Epic**下拉列表将其与当前组中的现有史诗相关联. + +### Accessing the New Issue form[](#accessing-the-new-issue-form "Permalink") + +有多种方法可以从项目中获取"新问题"表单: + +* 导航到**项目的仪表板** > **问题** > **新问题** : + + [![New issue from the issue list view](img/ee0396a1cb32367d7ba7c6f4a7262c7f.png)](img/new_issue_from_tracker_list.png) + +* 从项目中未**解决的问题**中,单击**"**新问题"以在同一项目中创建一个新问题: + + [![New issue from an open issue](img/eb851fa4a367081c86d0a2eac3bdca65.png)](img/new_issue_from_open_issue.png) + +* 在**项目的仪表板中** ,单击加号( **+** )以打开带有一些选项的下拉菜单. 选择" **新问题"**以在该项目中创建一个问题: + + [![New issue from a project's dashboard](img/04b61606f38fddf21d194ee3e13abaa3.png)](img/new_issue_from_projects_dashboard.png) + +* 在**发行板中** ,通过单击列表顶部的加号( **+** )创建新发行. 它为该项目打开了一个新问题,并预先标记了各自的列表. + + [![From the issue board](img/7f1a1847005ab07ba8259a9e67005213.png)](img/new_issue_from_issue_board.png) + +### Elements of the New Issue form[](#elements-of-the-new-issue-form "Permalink") + +> 在[GitLab Premium](https://about.gitlab.com/pricing/) 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/13847)了将新版本添加到史诗的功能. + +[![New issue from the issues list](img/94be136c7407855701b88eaded7db929.png)](img/new_issue_v13_1.png) + +创建新期刊时,可以填写以下字段: + +* Title +* Description +* 复选框以使问题保密 +* Assignee +* Weight +* Epic +* 截止日期 +* Milestone +* Labels + +### New issue from the group-level Issue Tracker[](#new-issue-from-the-group-level-issue-tracker "Permalink") + +转到"小组"仪表板,然后单击侧边栏中的" **问题** "以访问"小组"中所有项目的问题跟踪器. 使用页面右上方的下拉按钮,选择要添加问题的项目. + +[![Select project to create issue](img/31f0a42465a379e152ef6c0c7a6395e9.png)](img/select_project_from_group_level_issue_tracker.png) + +我们将跟踪您最近选择的项目,并将其用作下次访问的默认项目. 如果您主要是为同一项目创建问题,这应该可以节省大量时间和点击次数. + +[![Create issue from group-level issue tracker](img/75ca9285f50e058d4d85796b4d0b8e69.png)](img/create_issue_from_group_level_issue_tracker.png) + +### New issue via Service Desk[](#new-issue-via-service-desk-starter "Permalink") + +为您的项目启用[Service Desk](../service_desk.html)并提供电子邮件支持. 这样,当您的客户发送新电子邮件时,可以在适当的项目中创建一个新的问题,然后从那里进行后续操作. + +### New issue via email[](#new-issue-via-email "Permalink") + +如果您的 GitLab 实例配置了[传入电子邮件](../../../administration/incoming_email.html) ,则在项目的" **问题列表"**页面的底部会显示**一个"将新问题发送到该项目的电子邮件** "链接. + +[![Bottom of a project issues page](img/fd1e35952a7538923376d54325798b24.png)](img/new_issue_from_email.png) + +当您单击此链接时,将生成并显示一个电子邮件地址,该电子邮件地址**仅供您自己使用** ,以在此项目中创建问题. 您可以将此地址另存为联系人,以方便访问. + +**注意:**这是一个私人电子邮件地址,仅为您生成. **保密** ,因为任何知道它的人都可以创建问题或合并请求,就好像它们是您一样. 如果地址被盗用,或者您出于任何原因希望重新生成该地址,请再次单击"通过**电子邮件将新问题发送到此项目"** ,然后单击"重置"链接. + +向该地址发送电子邮件将以您的名字在此项目中创建一个新问题,其中: + +* The email subject becomes the issue title. +* 电子邮件正文成为问题描述. +* 支持[降价](../../markdown.html)和[快速行动](../quick_actions.html) . + +**注意:**在 GitLab 11.7 中,我们更新了生成的电子邮件地址的格式. 但是,仍支持较旧的格式,从而允许现有别名或联系人继续工作. + +### New issue via URL with prefilled fields[](#new-issue-via-url-with-prefilled-fields "Permalink") + +您可以使用 URL 中的查询字符串参数,使用预填充的字段值直接链接到给定项目的新问题页面. 这对于在外部 HTML 页面中嵌入 URL 以及在某些情况下(希望用户创建带有预填某些字段的问题)很有用. + +标题,描述,描述模板和机密字段可以使用此方法进行预填充. 您不能在同一 URL 中预先填写描述和描述模板字段(因为描述模板也会填充描述字段). + +| Field | URL 参数名称 | Notes | +| --- | --- | --- | +| title | `issue[title]` |   | +| description | `issue[description]` |   | +| 描述模板 | `issuable_template` |   | +| confidential | `issue[confidential]` | 参数值必须为`true`才能设置为机密 | + +请按照以下示例使用预填字段来形成新的问题 URL. + +* 对于 GitLab 社区版项目中的新问题,带有预填充的标题和预填充的描述,URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issue[description]=Research idea` +* 对于 GitLab 社区版项目中的新问题,带有预填充的标题和预填充的描述模板,URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issuable_template=Research proposal` +* 对于 GitLab 社区版项目中的新问题,其中包含预填充的标题,预填充的描述以及机密标志集,其 URL 为`https://gitlab.com/gitlab-org/gitlab-foss/-/issues/new?issue[title]=Validate new concept&issue[description]=Research idea&issue[confidential]=true` + +## Moving Issues[](#moving-issues "Permalink") + +移动问题会将其复制到新位置(项目),并在旧项目中将其关闭,但不会被删除. 这两个问题上还将添加一个系统注释,以指示它来自何处. + +The “Move issue” button is at the bottom of the right-sidebar when viewing the issue. + +[![move issue - button](img/1bc92f79d9645e6ae51aff10100e5c0d.png)](img/sidebar_move_issue.png) + +### Moving Issues in Bulk[](#moving-issues-in-bulk "Permalink") + +如果您具有高级技术技能,也可以在 Rails 控制台中将所有问题从一个项目批量转移到另一个项目. 下面的脚本会将所有问题从一个项目移至另一个状态尚未**关闭的项目** . + +要访问 rails 控制台,请在 GitLab 服务器上运行`sudo gitlab-rails console`并运行以下脚本. 请确保将**project** , **admin_user**和**target_project**更改为您的值. 我们也建议您在尝试对控制台进行任何更改之前先[创建备份](../../../raketasks/backup_restore.html#back-up-gitlab) . + +``` +project = Project.find_by_full_path('full path of the project where issues are moved from') +issues = project.issues +admin_user = User.find_by_username('username of admin user') # make sure user has permissions to move the issues +target_project = Project.find_by_full_path('full path of target project where issues moved to') + +issues.each do |issue| + if issue.state != "closed" && issue.moved_to.nil? + Issues::MoveService.new(project, admin_user).execute(issue, target_project) + else + puts "issue with id: #{issue.id} and title: #{issue.title} was not moved" + end +end; nil +``` + +## Closing issues[](#closing-issues "Permalink") + +当您确定问题已解决或不再需要时,可以使用"关闭"按钮关闭该问题: + +[![close issue - button](img/4635aba96009dfb3ab93ab6f4b92ee4c.png)](img/button_close_issue.png) + +您还可以通过将发行卡从其发行版列表中拖放到" **已关闭"**列表中来**关闭** [发行板中](../issue_board.html)的发行. + +[![close issue from the Issue Board](img/0f7aab3f307e6b54ebe4d00d94f1da0a.png)](img/close_issue_from_board.gif) + +### Closing issues automatically[](#closing-issues-automatically "Permalink") + +**注意:**由于性能原因,从现有存储库的第一次推送将禁用自动问题关闭. + +当提交或合并请求解决了一个或多个问题时,当提交或合并请求到达项目的默认分支时,可能会自动关闭这些问题. + +如果提交消息或合并请求描述包含与[定义的模式](#default-closing-pattern)匹配的文本,则匹配文本中引用的所有问题均将关闭. 将提交推送到项目的[**默认**分支时](../repository/branches/index.html#default-branch) ,或者将提交或合并请求合并到其中时,就会发生这种情况. + +例如,如果合并请求描述中包含`Closes #4, #6, Related to #5`则合并 MR 时问题`#4`和`#6`将自动关闭,但不会合并`#5` . 将" `Related to` `#5`标记[相关"](related_issues.html)用作[相关问题](related_issues.html) ,但不会自动关闭. + +[![merge request closing issue when merged](img/fee3cc5116f884089066af3908605cbe.png)](img/merge_request_closes_issue.png) + +如果问题与 MR 位于不同的存储库中,请添加问题的完整 URL: + +``` +Closes #4, #6, and https://gitlab.com/<username>/<projectname>/issues/<xxx> +``` + +#### Default closing pattern[](#default-closing-pattern "Permalink") + +如果未指定,将使用如下所示的默认问题关闭模式: + +``` +\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+))+) +``` + +这将转换为以下关键字: + +* 关闭,关闭,关闭,关闭,关闭,关闭,关闭,关闭 +* 修正,修正,修正,修正,修正,修正,修正,修正 +* 解决,解决,解决,解决,解决,解决,解决,解决 +* 实施,实施,实施,实施,实施,实施,实施,实施 + +请注意, `%{issue_ref}`是在 GitLab 的源代码中定义的复杂正则表达式,可以匹配对以下内容的引用: + +* 本地问题( `#123` ). +* 跨项目问题( `group/project#123` ). +* 指向问题的链接( `https://gitlab.example.com/group/project/issues/123` ). + +例如以下提交消息: + +``` +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://gitlab.example.com/group/otherproject/issues/23. +``` + +将在提交被推送到的项目中关闭`#18` , `#19` , `#20`和`#21` ,以及`group/otherproject` `#22`和`#23` . `#17`将不会关闭,因为它与模式不匹配. 当从命令行与`git commit -m`一起使用时,它可以处理多行提交消息以及单行代码. + +#### Disabling automatic issue closing[](#disabling-automatic-issue-closing "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/19754) . + +可以在[项目的存储库设置中](../settings/index.html)针对每个项目禁用自动关闭问题功能. 引用的问题仍将按原样显示,但不会自动关闭. + +[![disable issue auto close - settings](img/a3802569c81d8f8dd179fd218322a4ca.png)](img/disable_issue_auto_close.png) + +这仅适用于受新合并请求或提交影响的问题. 已经解决的问题仍然保持原样. 禁用自动关闭的问题仅影响到项目*中*的合并请求,并不会阻止其他项目从通过跨项目的问题,将其关闭. + +#### Customizing the issue closing pattern[](#customizing-the-issue-closing-pattern-core-only "Permalink") + +为了更改默认的问题关闭模式,GitLab 管理员必须编辑安装的[`gitlab.rb`或`gitlab.yml`文件](../../../administration/issue_closing_pattern.html) . + +## Deleting issues[](#deleting-issues "Permalink") + +在 GitLab 8.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2982) + +具有[项目所有者权限的](../../permissions.html)用户可以通过编辑问题并单击删除按钮来删除问题. + +[![delete issue - button](img/51e7561422b1e74237ea14e916cffc78.png)](img/delete_issue.png) \ No newline at end of file diff --git "a/docs/\347\273\204\347\273\207.md" "b/docs/\347\273\204\347\273\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..e7c4c19241826b0107825b9e2f6e34eceb4a40b4 --- /dev/null +++ "b/docs/\347\273\204\347\273\207.md" @@ -0,0 +1,337 @@ +# 组织[](#组织 "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 diff --git "a/docs/\350\207\252\345\212\250\345\241\253\345\205\205.md" "b/docs/\350\207\252\345\212\250\345\241\253\345\205\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..69ef8138d283dd10b7e3017451317cb011df52e6 --- /dev/null +++ "b/docs/\350\207\252\345\212\250\345\241\253\345\205\205.md" @@ -0,0 +1,39 @@ +# 自动填充字符[](#自动填充字符 "Permalink") + +自动完成字符提供了一种在 Markdown 字段中输入字段值的快速方法. 当您开始在 Markdown 字段中使用以下字符之一键入单词时,GitLab 将针对一组匹配值逐步自动完成. 字符串匹配不区分大小写. + +| Character | Autocompletes | +| --- | --- | +| `~` | Labels | +| `%` | Milestones | +| `@` | 用户和组 | +| `#` | Issues | +| `!` | 合并要求 | +| `&` | Epics | +| `$` | Snippets | +| `:` | Emoji | +| `/` | 快速行动 | + +弹出列表中最多显示 5 个最相关的匹配项. 当您从列表中选择一个项目时,该值将输入到该字段中. 输入的字符越多,匹配项就越精确. + +与" [快速操作"](quick_actions.html)结合使用时,自动完成字符很有用. + +## Example[](#example "Permalink") + +假设您的 GitLab 实例包括以下用户: + +| Username | Name | +| --- | --- | +| alessandra | 罗斯·格兰特 | +| lawrence.white | 凯尔西·克鲁克 | +| leanna | 罗斯玛丽·罗甘(Rosemarie Rogahn) | +| logan_gutkowski | 李·沃克特 | +| shelba | 约瑟芬·海利 | + +在"问题"注释中,输入`@l`将显示以下弹出列表. 请注意,不包括用户`shelba` ,因为该列表仅包含与问题最相关的 5 个用户. + +[![Popup list which includes users whose username or name contains the letter `l`](img/7b1af71091089deb54dbd357d9679d9c.png)](img/autocomplete_characters_example1_v12_0.png) + +如果继续输入`@le` ,弹出列表将更改为以下内容. 现在,弹出窗口仅包括用户名中出现`le`或用户名中的单词的用户. + +[![Popup list which includes users whose username or name contains the string `le`](img/09a583a4343d2359d87040afc14139dd.png)](img/autocomplete_characters_example2_v12_0.png) \ No newline at end of file diff --git "a/docs/\350\215\211\347\250\277.md" "b/docs/\350\215\211\347\250\277.md" new file mode 100644 index 0000000000000000000000000000000000000000..784ef93df1c39e2f6c3f5c32025ac5c82de83a97 --- /dev/null +++ "b/docs/\350\215\211\347\250\277.md" @@ -0,0 +1,30 @@ +# 草稿[](#草稿 "Permalink") + +如果合并请求尚未准备好进行合并(可能是由于持续的开发或开放的线程),则可以通过将其标记为**Draft**来阻止在合并之前接受该合并请求. 这将禁用"合并"按钮,从而防止其被合并,并且在删除"草稿"标志之前它将保持禁用状态. + +[![Blocked Merge Button](img/284b72b1bfc8d5679fdaa384932b3b8c.png)](img/draft_blocked_merge_button_v13_2.png) + +## Adding the “Draft” flag to a merge request[](#adding-the-draft-flag-to-a-merge-request "Permalink") + +在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32692)的在进行中(WIP)合并请求已重命名为**Draft** . 在 GitLab 14.0 中将删除对使用**WIP 的**支持. + +There are several ways to flag a merge request as a Draft: + +* 将`[Draft]` , `Draft:`或`(Draft)`到合并请求标题的开头. 单击标题框下的" **以草稿开始标题:** ",在编辑合并请求的描述时将具有相同的效果. +* **不推荐使用**将`[WIP]`或`WIP:`添加到合并请求标题的开头. **WIP**仍然有效,但不赞成使用**Draft** . 它将在下一个主要版本(GitLab 14.0)中删除. +* 在合并请求的注释中添加`/wip` [快速操作](../quick_actions.html#quick-actions-for-issues-merge-requests-and-epics) . 这是一个切换,可以重复进行以将状态改回. 请注意,注释中的任何其他文本将被丢弃. +* 将`draft:`或`Draft:`添加到针对合并请求的源分支的提交消息的开头. 这不是切换,并且在另一次提交中再次执行将无效. + +## Removing the “Draft” flag from a merge request[](#removing-the-draft-flag-from-a-merge-request "Permalink") + +与上述类似,当准备合并请求时,可以通过以下几种方式删除" `Draft`标志: + +* 从合并请求标题的开头删除`[Draft]` , `Draft:`或`(Draft)` . 在编辑合并请求的描述时,在标题框下单击" **从标题中删除草稿:"前缀** ,将具有相同的效果. +* 在合并请求的注释中添加`/wip` [快速操作](../quick_actions.html#quick-actions-for-issues-merge-requests-and-epics) . 这是一个切换,可以重复进行以将状态改回. 请注意,注释中的任何其他文本将被丢弃. +* 点击靠近合并请求描述底部的**解决草案状态**按钮,旁边的**合并**按钮(见[上面的图片](#draft-merge-requests) ). 必须对该项目至少具有开发人员级别的权限,该按钮才可见. + +## Including/excluding WIP merge requests when searching[](#includingexcluding-wip-merge-requests-when-searching "Permalink") + +查看/搜索合并请求列表时,可以通过在搜索框中添加" WIP"过滤器,然后选择"是"(包括)或"否"(排除)来选择包括或排除 WIP 合并请求. + +[![Filter WIP MRs](img/fa591f90dc1e8840fe7fd692f24dcffe.png)](img/filter_wip_merge_requests.png) \ No newline at end of file diff --git "a/docs/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" "b/docs/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..efa605ef8a09d99c13d021dde684939a48790802 --- /dev/null +++ "b/docs/\350\247\243\345\206\263\345\220\210\345\271\266\345\206\262\347\252\201.md" @@ -0,0 +1,43 @@ +# 解决合并冲突[](#解决合并冲突 "Permalink") + +当两个分支具有无法自动合并的不同更改时,将发生合并冲突. + +在大多数情况下,Git 能够自动合并分支之间的更改,但是在某些情况下,Git 需要您的帮助来手动解决冲突. 通常,当人们更改同一文件的相同部分时,这是必需的. + +在解决所有冲突之前,GitLab 将阻止合并请求. 冲突可以在本地解决,也可以在许多情况下在 GitLab 中解决(有关何时可用的信息,请参见可解决的[冲突](#conflicts-available-for-resolution) ). + +[![Merge request widget](img/c3174e54aed82ba15686b58fc97068f1.png)](img/merge_request_widget.png) + +**注意:** GitLab 通过在未自动合并到目标分支的源分支中创建合并提交来解决冲突. 这允许在合并更改之前对合并提交进行检查和测试,从而防止意外更改进入目标分支而无需检查或破坏构建. + +## Resolve conflicts: interactive mode[](#resolve-conflicts-interactive-mode "Permalink") + +在 GitLab 8.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5479) . + +单击此按钮将显示有冲突的文件列表,突出显示冲突部分: + +[![Conflict section](img/7a9e6a406ba2eb40638f2b43024b368b.png)](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[](#resolve-conflicts-inline-editor "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/6374) in GitLab 8.13. + +合并冲突解决编辑器允许更复杂的合并冲突,需要用户手动修改文件以解决冲突,才能从 GitLab 界面中解决. 使用**内联编辑**按钮打开编辑器. 确定更改后,请单击" **提交到源"分支**按钮. + +[![Merge conflict editor](img/7a5996be0f8e75beb29e443470d79ee6.png)](img/merge_conflict_editor.png) + +## Conflicts available for resolution[](#conflicts-available-for-resolution "Permalink") + +GitLab 允许解决以下所有条件均成立的文件中的冲突: + +* 该文件是文本,不是二进制 +* 该文件采用 UTF-8 兼容编码 +* 该文件尚未包含冲突标记 +* 添加了冲突标记的文件大小不超过 200 KB +* 该文件在两个分支中位于相同路径下 + +如果该合并请求中有冲突的任何文件均不满足所有这些条件,则无法在 UI 中解决该合并请求的冲突. + +此外,GitLab 不会在路径之外的重命名中检测到冲突. 例如,这不会造成冲突:在分支`a`执行`git mv file1 file2` ; 在分支`b` ,执行`git mv file1 file3` . 而是,合并请求合并后,两个文件都将出现在分支中. \ No newline at end of file diff --git "a/docs/\350\256\250\350\256\272.md" "b/docs/\350\256\250\350\256\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d1c98b6a990dc4ff6802bb8f1e6d0efdce54c8a --- /dev/null +++ "b/docs/\350\256\250\350\256\272.md" @@ -0,0 +1,445 @@ +# 讨论[](#讨论 "Permalink") + +整个 GitLab 都提供了进行对话的能力. + +您可以在以下位置发表评论: + +* Issues +* Epics +* 合并要求 +* Snippets +* Commits +* 提交差异 + +有标准注释,您还可以选择以线程形式创建注释. 收到回复后,评论也可以[变成主题](#start-a-thread-by-replying-to-a-standard-comment) . + +评论区域支持[Markdown](../markdown.html)和[快速操作](../project/quick_actions.html) . 您可以随时编辑自己的评论,拥有" [维护者"访问级别](../permissions.html)或更高[权限的](../permissions.html)任何人也可以编辑其他人的评论. + +如果为您的 GitLab 实例配置了" [通过电子邮件回复",](../../administration/reply_by_email.html)您还可以回复评论通知电子邮件以回复评论. 回复标准评论会创建另一个标准评论. 回复主题注释会在主题中创建回复. 电子邮件回复支持[Markdown](../markdown.html)和[快速操作](../project/quick_actions.html) ,就像您从网络上回复一样. + +**注意:**每个对象最多只能有 5,000 条注释,例如:issue,epic 和 merge request. + +## Resolvable comments and threads[](#resolvable-comments-and-threads "Permalink") + +版本历史 + +* 在 GitLab 8.11 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5022) . +* 可解决的线程只能添加到合并请求差异中. + +线程解析有助于跟踪计划或代码审查期间的进度. + +合并请求,提交,提交差异和摘要中的每个标准注释或线程最初都显示为未解决. 然后,至少具有开发人员访问项目权限的任何人或所检查的更改的作者都可以单独解决这些问题. 如果该线程已解决,并且非成员取消了他们自己的响应,则这也将取消解决讨论线程. 如果非成员然后解决了相同的答复,则将解决讨论线程. + +解决所有标准注释或线程的需求可以防止您忘记处理反馈,并可以隐藏不再相关的线程. + +[!["A thread between two people on a piece of code"](img/18f2b22b7daf0beab9074c6695c99960.png)](img/thread_view.png) + +### Commit threads in the context of a merge request[](#commit-threads-in-the-context-of-a-merge-request "Permalink") + +在 GitLab 10.3 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/31847) . + +对于具有基于提交的工作流的审阅者,在合并请求的上下文中将线程添加到特定的提交差异可能很有用. 在以下情况下,这些线程将通过更改提交 ID 保持不变: + +* 重新设置后强制推动 +* 修改提交 + +创建提交差异线程: + +1. 导航到合并请求的" **提交"**选项卡. 将显示构成合并请求的提交列表. + + [![Merge request commits tab](img/b061980557a1e04fe2a2f3836b8dd9c1.png)](img/merge_request_commits_tab.png) + +2. 导航到特定的提交,单击" **更改"**选项卡(在该选项卡中,将仅显示与所选提交不同的内容),并留下评论. + + [![Commit diff discussion in merge request context](img/fc09af9303f629aff49a9a4dc5327e65.png)](img/commit_comment_mr_context.png) + +3. 以这种方式创建的任何线程都将显示在合并请求的" **讨论"**选项卡中,并且可以解决. + + [![Merge request Discussions tab](img/033c41dc1122d52872dcb67228037524.png)](img/commit_comment_mr_discussions_tab.png) + +以这种方式创建的线程将仅出现在原始合并请求中,而不是导航到项目的" **存储库">"提交"**页面下的**提交时** . + +**提示:**在合并请求内的线程中找到提交引用的链接时,它将在当前合并请求的上下文中自动转换为链接. + +### Jumping between unresolved threads[](#jumping-between-unresolved-threads "Permalink") + +当合并请求中包含大量注释时,可能很难跟踪仍未解决的问题. 您可以使用线程上"回复"字段旁边的"跳转"按钮在未解决的线程之间跳转. + +您也可以从已解决的线程跟踪器旁边的按钮跳转到下一个未解决的线程. + +您还可以使用键盘快捷键在线程之间导航: + +* 使用`n`跳到下一个未解决的线程. +* 使用`p`跳到上一个未解决的线程. + +[!["8/9 threads resolved"](img/27b77c1cf5861234d7e06b742e7cbf58.png)](img/threads_resolved.png) + +### Marking a comment or thread as resolved[](#marking-a-comment-or-thread-as-resolved "Permalink") + +您可以通过单击**线程**底部的" **解决线程"**按钮将其标记为已解决. + +[!["Resolve thread" button](img/f94efd219528f7641e29dbca3bc215ad.png)](img/resolve_thread_button.png) + +或者,您可以将每个评论标记为单独解决. + +[!["Resolve comment" button](img/9246e597493024c10e4f678f7de7318e.png)](img/resolve_comment_button.png) + +### Move all unresolved threads in a merge request to an issue[](#move-all-unresolved-threads-in-a-merge-request-to-an-issue "Permalink") + +在 GitLab 9.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/8266) + +要在新问题中继续执行来自合并请求的所有打开的线程,请单击" **解决新问题中的所有线程"**按钮. + +[![Open new issue for all unresolved threads](img/c7b2f6ed12531da21a4512becdf843af.png)](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) ,将存在**一个问题,即以后**在合并请求小部件中**解决它们的**链接. + +[![Link in merge request widget](img/4e480a29eb679b62ed97f748fc9acdd7.png)](img/resolve_thread_open_issue.png) + +这将准备一个问题,其内容涉及合并请求和未解决的线程. + +[![Issue mentioning threads in a merge request](img/cbf589a2c41bb518f8f2da56b76a59dc.png)](img/preview_issue_for_threads.png) + +击中" **提交"问题**将导致所有线程被标记为已解决,并添加注释以引用新创建的问题. + +[![Mark threads as resolved notice](img/b36e59e0da065f17e34891efef2ee0a1.png)](img/resolve_thread_issue_notice.png) + +现在,您可以继续从 UI 合并合并请求. + +### Moving a single thread to a new issue[](#moving-a-single-thread-to-a-new-issue "Permalink") + +在 GitLab 9.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/8266) + +要为单个线程创建新问题,可以使用" **在新问题中解决此线程"**按钮. + +[![Create issue for thread](img/c3948ae724d699cf1ec0da64ab3e6a14.png)](img/new_issue_for_thread.png) + +这会将您定向到预填充了线程内容的新问题,类似于为一次委派多个线程而创建的问题. 保存问题将把该线程标记为已解决,并在合并请求线程中添加引用新问题的注释. + +[![New issue for a single thread](img/e5d9c1be329fa86c36614dea613f69a3.png)](img/preview_issue_for_thread.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 "Permalink") + +在 GitLab 8.14 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7125) . + +在解决所有线程之前,可以阻止合并请求. + +导航到项目的设置页面,选中" **仅在解决所有线程后才允许合并请求"**复选框,然后单击" **保存"**以使更改生效. + +[![Only allow merge if all the threads are resolved settings](img/9bc04e4a71e5ed3917efabdca45725c7.png)](img/only_allow_merge_if_all_threads_are_resolved.png) + +从现在开始,直到所有线程解决后,您才能从 UI 进行合并. + +[![Only allow merge if all the threads are resolved message](img/4e480a29eb679b62ed97f748fc9acdd7.png)](img/resolve_thread_open_issue.png) + +### 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](img/a283d966822ac6a760d1a650273fbb3b.png)](img/automatically_resolve_outdated_discussions.png) + +从现在开始,如果推送使 diff 部分过时,默认情况下将解决 diff 上的所有线程. 不变的线上线程和顶级可解析线程不会自动解析. + +## Commit threads[](#commit-threads "Permalink") + +您可以在项目的**Repository> Commits**下向特定提交添加注释和线程. + +**注意:**如果在强制推送后更改了提交 ID,则以这种方式创建的线程将丢失. + +## Threaded discussions[](#threaded-discussions "Permalink") + +在 GitLab 9.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7527) . + +尽管可解析线程仅可用于合并请求差异,但也可以添加没有差异的线程. 您可以针对问题,提交,摘要和合并请求启动一个看起来像线程的特定线程. + +要开始主题讨论,请单击" **评论"**按钮切换下拉列表,选择" **开始主题",**并在准备发布评论时单击" **开始主题** ". + +[![Comment type toggle](img/66e7cbbe98ed69a6154c1adcd7ec4f6e.png)](img/comment_type_toggle.gif) + +这将以单个线程发布评论,使您可以更详细地讨论特定评论. + +[![Thread comment](img/d3cc00bf5599be56b0b3154ca2751cbc.png)](img/discussion_comment.png) + +## Image threads[](#image-threads "Permalink") + +在 GitLab 10.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14061) . + +有时线程围绕图像旋转. 使用图像线程,您可以轻松地定位图像的特定坐标并在其周围启动线程. 图像线程在合并请求和提交详细信息视图中可用. + +要启动图像线程,请将鼠标悬停在图像上. 您的鼠标指针应转换为图标,表示该图像可用于注释. 只需单击图像上的任意位置以创建新线程. + +[![Start image thread](img/72a8c3cb5bafa1e02d93f68a624b6094.png)](img/start_image_discussion.gif) + +单击图像后,将显示注释表单,该注释表单将成为您线程的开始. 保存评论后,您会在图像顶部看到一个新的徽章. 此徽章代表您的话题. + +> **注意:**该线程标志通常与一个数字关联,该数字仅用作每个线程的可视参考. 在合并请求线程选项卡中,此标记将带有注释图标,因为每个线程都会呈现一个新的图像部分. + +图像线程还可以在替换现有图像的差异上工作. 在此差异查看模式下,您可以切换不同的查看模式,但仍可以看到线点标记. + +| 2-up | Swipe | 洋葱皮 | +| --- | --- | --- | +| [![2-up view](img/be7e963d6561756bb87f6fea0cd245fa.png)](img/two_up_view.png) | [![swipe view](img/14110c067c5c98646bcad82dbd3be10b.png)](img/swipe_view.png) | [![onion skin view](img/5113c12752dd029f29a28c6f0660cde1.png)](img/onion_skin_view.png) | + +映像线程也可与可解析线程一起很好地工作. 差异上的已解析线程(不在"合并请求讨论"选项卡上)在页面加载时将显示为折叠状态,并且将具有对应的标记计数器以匹配图像上的计数器. + +[![Image resolved thread](img/fc692dde7a0c9ce30f0036b1a05b2768.png)](img/image_resolved_discussion.png) + +## Lock discussions[](#lock-discussions "Permalink") + +在 GitLab 10.1 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14531) . + +For large projects with many contributors, it may be useful to stop threads in issues or merge requests in these scenarios: + +* 项目维护者已经解决了该线程,对于继续反馈没有帮助. +* 项目维护者已经将新对话指向新问题或合并请求. +* 参与线程的人正在拖钓,辱骂或没有生产力. + +在这些情况下,项目中具有开发者权限或更高权限的用户可以使用边栏中的"锁定"部分来锁定(和解锁)问题或合并请求. 对于问题,具有记者权限的用户可以锁定(和解锁). + +| Unlock | Lock | +| --- | --- | +| [![Turn off discussion lock](img/e7d7b1c5ccf121da6fcfbbc1eb78bbcd.png)](img/turn_off_lock.png) | [![Turn on discussion lock](img/3ed7ccf7499687536cf254fc6f47d5e7.png)](img/turn_on_lock.png) | + +系统注释指示锁定和解锁. + +[![Discussion lock system notes](img/2629e4ef9252e4970d626ca424e88dd2.png)](img/discussion_lock_system_notes.png) + +在锁定的问题或合并请求中,只有团队成员才能添加新评论和编辑现有评论. 禁止非团队成员添加或编辑评论. + +| 队员 | 非团队成员 | +| --- | --- | +| [![Comment form member](img/5c0acf7979c7bc1e89dc413017b70870.png)](img/lock_form_member.png) | [![Comment form non-member](img/94675a32947787d4e216a44e3047d0b5.png)](img/lock_form_non_member.png) | + +此外,无法重新打开锁定的问题和合并请求. + +## Merge Request Reviews[](#merge-request-reviews "Permalink") + +版本历史 + +* 在[GitLab Premium](https://about.gitlab.com/pricing/) 11.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4213) . +* 在 13.1 版中[移至](https://gitlab.com/gitlab-org/gitlab/-/issues/28154) GitLab Core. + +查看"合并请求"差异时,您可以开始审阅. 这样,您便可以在"合并请求"中创建**仅**在发布之前才对**您可见的**注释,以便您可以将所有注释作为单个操作提交. + +### Starting a review[](#starting-a-review "Permalink") + +为了开始审阅,只需像往常一样在 MR 的" **更改"**选项卡下对差异添加注释,然后单击" **开始审阅"**按钮. + +[![Starting a review](img/40dbd9d2f1f965f42a1c417a258da575.png)](img/mr_review_start.png) + +Once a review is started, you will see any comments that are part of this review marked `Pending`. All comments that are part of a review show two buttons: + +* **完成审阅** :提交**审阅中的**所有评论,使其他用户可以看到它们. +* **立即添加评论** :提交特定评论作为常规评论,而不是审阅的一部分. + +[![A comment that is part of a review](img/9fa9d16dd2302ab20167b7ff1ca62575.png)](img/pending_review_comment.png) + +您可以在评论中使用[快速操作](../project/quick_actions.html) . 注释将显示发布后将执行的操作. + +[![A review comment with quick actions](img/2927b047cacec2945671ab2484aafe9d.png)](img/review_comment_quickactions.png) + +要向评论添加更多评论,请照常开始写评论,然后单击**添加到评论**按钮. + +[![Adding a second comment to a review](img/996ea860188e6458fe761cf86b2b72b1.png)](img/mr_review_second_comment.png) + +这会将评论添加到评论中. + +[![Second review comment](img/a102a1abbf4c760dba4b8b3daef8fe26.png)](img/mr_review_second_comment_added.png) + +### Resolving/Unresolving threads[](#resolvingunresolving-threads "Permalink") + +评论注释也可以解决/无法解决[可解决的线程](#resolvable-comments-and-threads) . 回复评论时,您将看到一个复选框,您可以单击该复选框以在发布后解决或取消解决线程. + +[![Resolve checkbox](img/865329b4b113d6de44cf382bd77178fa.png)](img/mr_review_resolve.png) + +如果特定的待处理注释将解决或取消解决该线程,它将显示在待处理注释本身上. + +[![Resolve status](img/83da8fe833233875ee4fe28fa21eb1dd.png)](img/mr_review_resolve2.png) + +[![Unresolve status](img/ce6315abe3d0bf8a315febe4ab497312.png)](img/mr_review_unresolve.png) + +### Submitting a review[](#submitting-a-review "Permalink") + +If you have any comments that have not been submitted, you will see a bar at the bottom of the screen with two buttons: + +* **舍弃** : **舍弃**所有尚未提交的评论. +* **完成审阅** :打开准备提交审阅的评论列表. 单击**提交评论**将发布所有评论. 此时将执行所有提交的快速操作. + +另外,要通过待审核的评论完成整个审核,请执行以下操作: + +* 单击**评论**上的" **完成审阅"**按钮. +* 在非评论注释的文本中使用`/submit_review` [快速操作](../project/quick_actions.html) . + +[![Review submission](img/c6daa1e81d653cfd0b476144f1f71874.png)](img/review_preview.png) + +提交审阅将向合并请求的每个应通知用户发送一封电子邮件,其中包含与之相关的所有注释. + +因此,回复此电子邮件将在关联的合并请求上创建一个新注释. + +## Filtering notes[](#filtering-notes "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/26723) . + +对于活动注释和用户注释等具有许多注释的问题,有时很难找到有用的信息. 有一种方法可以针对合并请求和问题从单个注释和线程中过滤注释. + +从合并请求的" **讨论"**选项卡,或史诗/问题概述中,找到页面右侧的过滤器下拉菜单,您可以从中选择以下选项之一: + +* **显示所有活动** :显示所有用户评论和系统注释(问题更新,对其他问题的提及,对描述的更改等). +* **仅显示评论** :仅在列表中显示用户评论. +* **仅显示历史记录** :仅显示活动记录. + +[![Notes filters dropdown options](img/5a26f77375b52645c2387aec1f77a777.png)](img/index_notes_filters.png) + +在给定问题或 MR 中选择过滤器之一后,GitLab 将保存您的首选项,这样当您从已登录的任何设备再次访问同一页面时,该首选项将保持不变. + +## Suggest Changes[](#suggest-changes "Permalink") + +在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/18008) . + +作为审阅者,您可以在 Merge Request Diff 线程中使用简单的 Markdown 语法建议代码更改. 然后,合并请求作者(或具有适当[权限的](../permissions.html)其他用户)能够通过单击来应用这些建议,这将在应用了这些建议的用户创作的合并请求中生成提交. + +1. 选择要更改的代码行,添加新注释,然后单击工具栏中的" **插入建议"**图标: + + [![Add a new comment](img/d7cb226977bb46d9aaa1c1d7e195025a.png)](img/suggestion_button_v12_7.png) + +2. 在注释中,将您的建议添加到预填充的代码块中: + + [![Add a suggestion into a code block tagged properly](img/44cad341f814ae94da18480c3dc1d2be.png)](img/make_suggestion_v12_7.png) + +3. 单击**开始审查**或**加入审查** ,以您的评论添加到[审查](#merge-request-reviews) ,或者**现在添加注释** ,注释立即加入到线程. + + 注释中的"建议"可由合并请求作者直接从合并请求中应用: + + [![Apply suggestions](img/0dd0fc53dcaa34b76a16be18538c1a35.png)](img/apply_suggestion_v12_7.png) + +一旦作者应用了一个建议,它将被标记为"已**应用"**标签,该线程将被自动解析,并且 GitLab 将创建一个新的提交,并将建议的更改直接推送到合并请求分支中的代码库中. 这样做需要[开发人员许可](../permissions.html) . + +### Multi-line Suggestions[](#multi-line-suggestions "Permalink") + +在 GitLab 11.10 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53310) . + +审阅者还可以通过调整范围偏移,在合并请求差异线程中使用单个"建议"来建议对多行进行更改. 偏移量相对于 diff 线程的位置,并指定应用建议时要被建议替换的范围. + +[![Multi-line suggestion syntax](img/317167b85f9604b741e71e57b1702b6c.png)](img/multi-line-suggestion-syntax.png) + +在上面的示例中,建议涵盖了注释行上方的三行和注释行下方的四行. 应用时,它将用建议的更改从注释行*上方的* 3 行替换为注释行*下方*的 4 行. + +[![Multi-line suggestion preview](img/590715bab1c8704d5a4c16437c011ed5.png)](img/multi-line-suggestion-preview.png) + +**注意:**涵盖多行的建议仅限于已注释差异行*上方的* 100 行和*下方*的差异行*下方*的 100 行,每个建议最多可更改 200 行. + +### Code block nested in Suggestions[](#code-block-nested-in-suggestions "Permalink") + +如果您需要提出涉及[受限制的代码块](../markdown.html#code-spans-and-blocks)的建议,请将您的建议换成四个反引号,而不是通常的三个. + +[![A comment editor with a suggestion with a fenced code block](img/a4e7c4f55411323814dd3b9cb30ab9f8.png)](img/suggestion_code_block_editor_v12_8.png) + +[![Output of a comment with a suggestion with a fenced code block](img/db0182b2e43670178e35b1a3485ca25e.png)](img/suggestion_code_block_output_v12_8.png) + +### Configure the commit message for applied Suggestions[](#configure-the-commit-message-for-applied-suggestions "Permalink") + +在 GitLab 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/13086) . + +GitLab 在应用建议时使用默认的提交消息: `Apply %{suggestions_count} suggestion(s) to %{files_count} file(s)` + +例如,假设用户将 3 条建议应用于 2 个不同的文件,则默认的提交消息将是: **将 3 条建议应用于 2 个文件** + +可以自定义这些提交消息,以遵循您可能拥有的任何准则. 为此, **请**在项目的" **常规"**设置中展开" **合并请求"**选项卡,然后更改" **合并建议"**文本: + +[![Custom commit message for applied Suggestions](img/182928c540d17ccf275438850fc7592d.png)](img/suggestions_custom_commit_messages_v13_1.jpg) + +除了静态文本,您还可以使用以下变量: + +| Variable | Description | 输出示例 | +| --- | --- | --- | +| `%{branch_name}` | 建议所应用到的分支的名称. | `my-feature-branch` | +| `%{files_count}` | 应用了建议的文件数. | **2** | +| `%{file_paths}` | 应用了建议文件的路径. 路径用逗号分隔. | `docs/index.md, docs/about.md` | +| `%{project_path}` | 项目路径. | `my-group/my-project` | +| `%{project_name}` | 项目的可读名称. | **我的项目** | +| `%{suggestions_count}` | 应用的建议数. | **3** | +| `%{username}` | 应用建议的用户的用户名. | `user_1` | +| `%{user_full_name}` | 应用建议的用户的全名. | **用户 1** | + +例如,要自定义提交消息以输出**Addresses user_1 的评论** ,请将自定义文本设置为`Addresses %{username}'s review` . + +**注意:** [#25381](https://gitlab.com/gitlab-org/gitlab/-/issues/25381)将为每个应用的建议(以及批量建议)引入自定义提交消息. + +### Batch Suggestions[](#batch-suggestions "Permalink") + +版本历史 + +* 在 GitLab 13.1 中作为[Alpha 功能](https://about.gitlab.com/handbook/product/#alpha) [引入](https://gitlab.com/gitlab-org/gitlab/-/issues/25486) . +* 它部署在功能标记后面,默认情况下处于禁用状态. +* 在 GitLab.com 上已禁用. +* 要在 GitLab 自管实例中使用它,请让 GitLab 管理员[启用它](#enable-or-disable-batch-suggestions) . + +您可以一次应用多个建议,以减少为满足审阅者的请求而添加到分支的提交数量. + +1. 要启动将在一次提交中应用的一批建议,请单击" **将建议添加到批处理"** : + + [![A code change suggestion displayed, with the button to add the suggestion to a batch highlighted.](img/f12701028e6548c505318ef2d4e378db.png "Add a suggestion to a batch")](img/add_first_suggestion_to_batch_v13_1.jpg) + +2. 根据需要向批处理中添加尽可能多的其他建议: + + [![A code change suggestion displayed, with the button to add an additional suggestion to a batch highlighted.](img/f60803ec89d6ae84310e181507eb2ad8.png "Add another suggestion to a batch")](img/add_another_suggestion_to_batch_v13_1.jpg) + +3. 要删除建议,请单击" **从批处理中删除"** : + + [![A code change suggestion displayed, with the button to remove that suggestion from its batch highlighted.](img/e28a69b4996ee400ca3df4431df0ab13.png "Remove a suggestion from a batch")](img/remove_suggestion_from_batch_v13_1.jpg) + +4. 将所有建议添加到您的喜好中后,准备好后,请点击**应用建议** : + + [![A code change suggestion displayed, with the button to apply the batch of suggestions highlighted.](img/ed8bdb5d349320bc1d470f096578dfe7.png "Apply a batch of suggestions")](img/apply_batch_of_suggestions_v13_1.jpg) + +#### Enable or disable Batch Suggestions[](#enable-or-disable-batch-suggestions "Permalink") + +批处理建议部署在**默认情况下禁用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../administration/feature_flags.html)可以为您的实例启用它. + +要启用它: + +``` +# Instance-wide +Feature.enable(:batch_suggestions) +``` + +禁用它: + +``` +# Instance-wide +Feature.disable(:batch_suggestions) +``` + +## Start a thread by replying to a standard comment[](#start-a-thread-by-replying-to-a-standard-comment "Permalink") + +在 GitLab 11.9 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/30299) + +要回复标准(非线程)评论,可以使用" **回复评论"**按钮. + +[![Reply to comment button](img/d198d958fcf8be60727c232ff69b9713.png)](img/reply_to_comment_button.png) + +仅当您有权回复现有主题或从标准评论启动主题时,才会显示" **回复评论"**按钮. + +单击" **回复评论"**按钮将使回复区域成为焦点,您可以键入回复. + +[![Reply to comment feature](img/9f29552692cfb04d323dc62cc4bc1d1e.png)](img/reply_to_comment.gif) + +提交回复后,回复非线程注释将把非线程注释转换为线程. 该转换被认为是对原始评论的修改,因此在其下方会出现一条有关上次编辑时间的注释. + +此功能仅适用于"问题","合并请求"和"事件". 尚不支持提交,摘要和合并请求差异线程. + +## Assign an issue to the commenting user[](#assign-an-issue-to-the-commenting-user "Permalink") + +在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/191455) . + +您可以将问题分配给发表评论的用户. + +在评论中,单击" **更多操作"**菜单,然后单击" **分配给评论用户"** . + +再次单击按钮以取消分配评论者. + +[![Assign to commenting user](img/9b6a8d0d96113fcaadd766cecfbecdbc.png)](img/quickly_assign_commenter_v13_1.png) \ No newline at end of file diff --git "a/docs/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" "b/docs/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..71ada7e352359f4873befbdc8f6276e125b8de5c --- /dev/null +++ "b/docs/\350\257\204\345\256\241\345\217\212\347\256\241\347\220\206.md" @@ -0,0 +1,261 @@ +# 评审及管理合并请求[](#评审及管理合并请求 "Permalink") + +合并请求是在 GitLab 项目中更改文件的主要方法. 通过[创建并提交合并请求](creating_merge_requests.html)来提出更改,然后将其审核并接受(或拒绝). + +## View project merge requests[](#view-project-merge-requests "Permalink") + +导航到" **项目">"合并请求",**以查看项目中的所有**合并请求** . + +当您访问项目的合并请求时,GitLab 会将它们显示在列表中,并且您可以使用可用的选项卡来快速按打开和关闭进行过滤. 您还可以[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) . + +[![Project merge requests list view](img/252e40c4dc029a21eb939cb40f715d34.png)](img/project_merge_requests_list_view.png) + +## View merge requests for all projects in a group[](#view-merge-requests-for-all-projects-in-a-group "Permalink") + +查看组中所有项目中的合并请求,包括组中所有后代子组的所有项目. 导航到**组>合并请求**以查看这些合并请求. 该视图还具有打开和关闭的合并请求选项卡. + +您可以从此处[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) . + +[![Group Issues list view](img/1c96e8d94988240b7dc68ae02dbea405.png)](img/group_merge_requests_list_view.png) + +## Semi-linear history merge requests[](#semi-linear-history-merge-requests "Permalink") + +将为每个合并创建一个合并提交,但是只有在可能进行快速合并的情况下才合并分支. 这样可以确保如果合并请求构建成功,则合并后目标分支构建也将成功. + +导航到项目的设置,在" **合并请求:合并"方法**下选择" **使用半线性历史** **合并合并"**选项,然后保存更改. + +## View changes between file versions[](#view-changes-between-file-versions "Permalink") + +**更改**选项卡位于主要合并请求详细信息下方,并且在讨论选项卡旁边,显示了分支或提交之间文件的更改. 这种对文件更改的视图也称为**diff** . 默认情况下,差异视图将合并请求分支中的文件与目标分支中的文件进行比较. + +The diff view includes the following: + +* 文件的名称和路径. +* 添加和删​​除的行数. +* 用于以下选项的按钮: + * 切换此文件的注释; 用于内联评论. + * 在合并请求的分支中编辑文件. + * 显示完整文件,以防您要查看上下文中文件其余部分的更改. + * 在当前提交时查看文件. + * 使用[Review Apps](../../../ci/review_apps/index.html)预览更改. +* 已更改的行,突出显示了特定的更改. + +[![Example screenshot of a source code diff](img/1a3f578f317c266ca4b5d61eb91d025b.png)](img/merge_request_diff_v12_2.png) + +### Merge request diff file navigation[](#merge-request-diff-file-navigation "Permalink") + +在" **更改"**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异. 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件. + +[![Merge request diff file navigation](img/65770b50cd2119e84c6a852b44cf403d.png)](img/merge_request_diff_file_navigation.png) + +### File-by-file diff navigation[](#file-by-file-diff-navigation "Permalink") + +版本历史 + +* 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/222790) . +* 它部署在默认情况下启用的功能标志后面. +* 建议用于生产. +* 在 GitLab.com 上启用了它. +* 对于 GitLab 自我管理的实例,GitLab 管理员可以选择[禁用它](#enable-or-disable-file-by-file-diff-navigation-core-only) . + +对于较大的合并请求,有时一次查看单个文件可能会很有用. 要启用,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"首选项"** . 向下滚动到" **行为"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用. + +从那里,在查看合并请求的" **更改"**选项卡时,一次只能看到一个文件. 然后,您可以单击按钮上**一个**和**下一个**以查看其他已更改的文件. + +[![File-by-file diff navigation](img/7887f58c141f9c2e749a75158e430ac6.png)](img/file_by_file_v13_2.png) + +#### Enable or disable file-by-file diff navigation[](#enable-or-disable-file-by-file-diff-navigation-core-only "Permalink") + +逐文件差异导航正在开发中,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/feature_flags.html)可以选择为您的实例禁用它. + +要启用它: + +``` +# Instance-wide +Feature.enable(:view_diffs_file_by_file) +``` + +禁用它: + +``` +# Instance-wide +Feature.disable(:view_diffs_file_by_file>) +``` + +### Merge requests commit navigation[](#merge-requests-commit-navigation "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18140) in GitLab 13.0. + +要在合并请求中的**提交**之间无缝导航,请从" **提交"**选项卡中,单击其中一个提交以打开单提交视图. 从那里,您可以通过单击页面右上角的**Prev**和**Next**按钮或使用`X`和`C`键盘快捷键在提交之间进行导航. + +### Incrementally expand merge request diffs[](#incrementally-expand-merge-request-diffs "Permalink") + +默认情况下,差异仅显示文件中已更改的部分. 要查看更改上方或下方的更多未更改行,请单击" **向上** **扩展"**或" **向下扩展"**图标. 您也可以单击**显示未更改的行**以展开整个文件. + +[![Incrementally expand merge request diffs](img/da60a36cf66e162640faa1f6cddaacdc.png)](img/incrementally_expand_merge_request_diffs_v12_2.png) + +在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/205401) ,当查看合并请求的**更改**选项卡时,如果仅重命名了某个文件,则可以通过单击**显示文件内容**展开它以查看全部**内容** . + +### Ignore whitespace changes in Merge Request diff view[](#ignore-whitespace-changes-in-merge-request-diff-view "Permalink") + +如果单击" **隐藏空白更改"**按钮,则可以看到没有空白更改的差异(如果有的话). 在特定的提交页面上,这也可以工作. + +[![MR diff](img/1a097c142decf7d516165322a0f7b880.png)](img/merge_request_diff.png) + +> **提示:**您可以在合并请求的差异页面上附加`?w=1` ,以忽略任何空格更改. + +## Perform inline code reviews[](#perform-inline-code-reviews "Permalink") + +在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/13950) . + +GitLab 提供了一种在合并请求中更改文件的任何部分中保留注释的方法. 为此,请在"合并请求"差异 UI 的装订线中单击**…**按钮以展开差异行并留下评论,就像更改行一样. + +[![Comment on any diff file line](img/9aa51957855aec8590e352694fe75d5d.png)](img/comment-on-any-diff-line.png) + +## Pipeline status in merge requests widgets[](#pipeline-status-in-merge-requests-widgets "Permalink") + +如果您在项目中设置了[GitLab CI / CD](../../../ci/README.html) ,您将能够看到: + +* 合并前和合并后管道以及环境信息(如果有). +* 正在进行哪些部署. + +如果存在[环境](../../../ci/environments/index.html)并且已将应用程序成功部署到该环境,则还将显示已部署的环境以及指向 Review App 的链接. + +### Post-merge pipeline status[](#post-merge-pipeline-status "Permalink") + +合并请求合并后,可以看到合并请求合并到的分支的合并后管道状态. 例如,当合并请求合并到 master 分支中,然后触发到暂存环境的部署时. + +将显示正在进行的部署,以及环境的部署/部署状态. 如果是第一次部署分支,则该链接将返回`404`错误,直到完成. 在部署期间,停止按钮将被禁用. 如果管道无法部署,则部署信息将被隐藏. + +[![Merge request pipeline](img/1c4eef7cdb82fd840a9facad4ee93d6b.png)](img/merge_request_pipeline.png) + +有关更多信息,请[阅读有关管道](../../../ci/pipelines/index.html) . + +### Merge when pipeline succeeds (MWPS)[](#merge-when-pipeline-succeeds-mwps "Permalink") + +设置一个看起来准备合并的合并请求,以[在 CI 管道成功时自动合并](merge_when_pipeline_succeeds.html) . + +### Live preview with Review Apps[](#live-preview-with-review-apps "Permalink") + +如果为项目配置了[Review Apps](https://about.gitlab.com/stages-devops-lifecycle/review-apps/) ,则可以逐分支预览通过合并请求提交给功能分支的更改. 无需检出分支机构,在本地安装和预览; 带有"评论应用"链接的任何人都可以预览所有更改. + +设置了 GitLab 的" [路线图"后](../../../ci/review_apps/index.html#route-maps) ,合并请求小部件会将您直接带到已更改的页面,从而使预览建议的修改变得更加轻松快捷. + +[Read more about Review Apps](../../../ci/review_apps/index.html). + +## Associated features[](#associated-features "Permalink") + +还有大量与合并请求关联的功能: + +| Feature | Description | +| --- | --- | +| [Bulk editing merge requests](../../project/bulk_editing.html) | 同时更新多个合并请求的属性. | +| [Cherry-pick changes](cherry_pick_changes.html) | 只需在合并的合并请求或提交中单击**Cherry-pick**按钮,即可在 UI 中 Cherry-pick 任何**选择** . | +| [Fast-forward merge requests](fast_forward_merge.html) | 有关线性 Git 历史记录以及接受合并请求而不创建合并提交的方法 | +| [Find the merge request that introduced a change](versions.html) | 当查看提交详细信息页面时,GitLab 将链接到包含该提交的合并请求. | +| [Merge requests versions](versions.html) | 选择并比较合并请求差异的不同版本 | +| [Resolve conflicts](resolve_conflicts.html) | GitLab 可以提供选项来解决 GitLab UI 中的某些合并请求冲突. | +| [Revert changes](revert_changes.html) | 从合并请求中的任何提交还原更改. | + +## Troubleshooting[](#troubleshooting "Permalink") + +有时,合并请求中的操作并没有按预期进行,这是一些故障排除步骤. + +### Merge request cannot retrieve the pipeline status[](#merge-request-cannot-retrieve-the-pipeline-status "Permalink") + +如果 Sidekiq 没有足够快地进行更改,则会发生这种情况. + +#### Sidekiq[](#sidekiq "Permalink") + +Sidekiq 没有足够快地处理 CI 状态更改. 请等待几秒钟,状态将自动更新. + +#### Bug[](#bug "Permalink") + +发生以下情况时,无法检索合并请求管道的状态: + +1. 创建合并请求 +2. 合并请求已关闭 +3. 在项目中进行了更改 +4. 合并请求被重新打开 + +要正确检索管道状态,请再次关闭并重新打开"合并请求". + +## Tips[](#tips "Permalink") + +以下是一些技巧,可帮助您在命令行中更有效地处理合并请求. + +> **注意:**此部分将来可能会在其自己的文档中移动. + +### Checkout merge requests locally[](#checkout-merge-requests-locally "Permalink") + +合并请求包含来自存储库的所有历史记录,以及添加到与合并请求关联的分支的其他提交. 这是一些在本地检出合并请求的技巧. + +请注意,即使源项目是目标项目的分支(甚至是私有分支),也可以在本地签出合并请求. + +#### Checkout locally by adding a Git alias[](#checkout-locally-by-adding-a-git-alias "Permalink") + +将以下别名添加到`~/.gitconfig` : + +``` +[alias] + mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' - +``` + +现在,您可以从任何存储库和任何远程签出特定的合并请求. 例如,要从`origin`远程服务器签出 ID 为 5 的合并请求(如 GitLab 所示),请执行以下操作: + +``` +git mr origin 5 +``` + +这会将合并请求提取到本地`mr-origin-5`分支中,并检出它. + +#### Checkout locally by modifying `.git/config` for a given repository[](#checkout-locally-by-modifying-gitconfig-for-a-given-repository "Permalink") + +在`.git/config`文件中找到适用于 GitLab 遥控器的部分. 看起来像这样: + +``` +[remote "origin"] + url = https://gitlab.com/gitlab-org/gitlab-foss.git + fetch = +refs/heads/*:refs/remotes/origin/* +``` + +您可以使用以下方式打开文件: + +``` +git config -e +``` + +现在,将以下行添加到上面的部分: + +``` +fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* +``` + +最后,它应如下所示: + +``` +[remote "origin"] + url = https://gitlab.com/gitlab-org/gitlab-foss.git + fetch = +refs/heads/*:refs/remotes/origin/* + fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* +``` + +现在,您可以获取所有合并请求: + +``` +git fetch origin + +... +From https://gitlab.com/gitlab-org/gitlab-foss.git + * [new ref] refs/merge-requests/1/head -> origin/merge-requests/1 + * [new ref] refs/merge-requests/2/head -> origin/merge-requests/2 +... +``` + +并检查特定的合并请求: + +``` +git checkout origin/merge-requests/1 +``` + +以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成. \ No newline at end of file diff --git "a/docs/\350\277\201\347\247\273\351\241\271\347\233\256.md" "b/docs/\350\277\201\347\247\273\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..bc4f17dc0901de62465addb26fbdc7d407458859 --- /dev/null +++ "b/docs/\350\277\201\347\247\273\351\241\271\347\233\256.md" @@ -0,0 +1,54 @@ +# 迁移项目[](#迁移项目 "Permalink") + +1. [From Bitbucket Cloud](bitbucket.html) +2. [From Bitbucket Server (also known as Stash)](bitbucket_server.html) +3. [From ClearCase](clearcase.html) +4. [From CVS](cvs.html) +5. [From FogBugz](fogbugz.html) +6. [From GitHub.com or GitHub Enterprise](github.html) +7. [From GitLab.com](gitlab_com.html) +8. [From Gitea](gitea.html) +9. [From Perforce](perforce.html) +10. [From SVN](svn.html) +11. [From TFVC](tfvc.html) +12. [From repo by URL](repo_by_url.html) +13. [By uploading a manifest file (AOSP)](manifest.html) +14. [From Gemnasium](gemnasium.html) +15. [From Phabricator](phabricator.html) +16. [From Jira (issues only)](jira.html) + +除了上述特定的迁移文档之外,您还可以从 New Project 页面通过 HTTP 导入任何 Git 存储库. 请注意,如果存储库太大,则导入可能会超时. + +还可以选择[连接您的外部存储库以获得 CI / CD 好处](../../../ci/ci_cd_for_external_repos/index.html) . + +## Migrating from self-managed GitLab to GitLab.com[](#migrating-from-self-managed-gitlab-to-gitlabcom "Permalink") + +如果只需要迁移 Git 仓库,则可以[通过 URL 导入每个项目](repo_by_url.html) . 问题和合并请求无法导入. + +如果要保留所有元数据(例如问题和合并请求),则可以使用[导入/导出功能](../settings/import_export.html)从自我管理的 GitLab 导出项目,并将这些项目导入 GitLab.com. + +所有的 GitLab 用户关联(例如评论作者)都将更改为导入项目的用户. 有关更多信息,请参阅[导入说明](../settings/import_export.html#important-notes) . + +如果您需要迁移所有数据,则可以利用我们的[API](../../../api/README.html)从自我管理迁移到 GitLab.com. 从自我管理实例迁移到 GitLab.com 的资产顺序如下: + +**注意:**迁移到 GitLab.com 时,除非要使用[SCIM,](../../../user/group/saml_sso/scim_setup.html)否则需要手动创建用户. 使用 API​​创建用户仅限于自我管理的实例,因为它需要管理员访问权限. + +1. [Groups](../../../api/groups.html) +2. [Projects](../../../api/projects.html) +3. [Project variables](../../../api/project_level_variables.html) + +请记住[导入/导出功能](../settings/import_export.html#exported-contents)的局限性. + +您仍然需要通过一系列 Docker 推和推来迁移 Container Registry,并重新运行任何 CI 管道以检索任何构建工件. + +## Migrating from GitLab.com to self-managed GitLab[](#migrating-from-gitlabcom-to-self-managed-gitlab "Permalink") + +该过程与[从自我管理的 GitLab 迁移到 GitLab.com](#migrating-from-self-managed-gitlab-to-gitlabcom)的过程基本相同. 主要区别在于,管理员可以通过 UI 或[用户 API](../../../api/users.html#user-creation)在自助 GitLab 实例上创建[用户](../../../api/users.html#user-creation) . + +## Migrating between two self-managed GitLab instances[](#migrating-between-two-self-managed-gitlab-instances "Permalink") + +The best method for migrating from one GitLab instance to another, perhaps from an old server to a new server for example, is to [back up the instance](../../../raketasks/backup_restore.html), then restore it on the new server. + +如果将两个 GitLab 实例合并在一起(例如,两个实例上都有现有数据,并且不能擦除),请参阅[从自我管理的 GitLab 迁移到 GitLab.com 中的说明](#migrating-from-self-managed-gitlab-to-gitlabcom) . + +此外,您可以将用户[API](../../../api/users.html)与管理员用户一起使用来迁移用户. \ No newline at end of file diff --git "a/docs/\350\277\230\345\216\237.md" "b/docs/\350\277\230\345\216\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..fc06bbf6faba1ddcb0bfb4728a595b3dbab18b0e --- /dev/null +++ "b/docs/\350\277\230\345\216\237.md" @@ -0,0 +1,33 @@ +# 还原[](#还原 "Permalink") + +您可以使用 Git 的强大功能,通过在合并请求和提交详细信息中单击" **还原"**按钮来[还原任何提交](https://git-scm.com/docs/git-revert "Git 恢复文档") . + +## Reverting a merge request[](#reverting-a-merge-request "Permalink") + +**注意:** " **还原"**按钮仅可用于自 GitLab 8.5 起创建的合并请求. 但是,您仍然可以通过从"提交"页面列表中还原合并提交来还原合并请求.**注意:**仅对使用合并方法"合并提交"的项目显示" **还原"**按钮,该方法可以在项目的**"设置">"常规">"合并请求"**下**设置** . 无法通过 MR 视图还原[快进提交](fast_forward_merge.html) . + +合并请求合并后,将有一个**还原**按钮可用于还原该合并请求引入的更改. + +[![Revert Merge Request](img/fe7d77556848be98a93c7b6516b0e6f8.png)](img/cherry_pick_changes_mr.png) + +单击该按钮后,将出现一个模式,您可以在其中选择将更改直接还原到所选分支中,也可以选择使用还原更改创建新的合并请求. + +合并请求恢复后," **恢复"**按钮将不再可用. + +## Reverting a commit[](#reverting-a-commit "Permalink") + +您可以从提交详细信息页面还原提交: + +[![Revert commit](img/b4e821b8b83e29e837f01f4620e557b7.png)](img/cherry_pick_changes_commit.png) + +与还原合并请求类似,您可以选择将更改直接还原到目标分支中,也可以选择创建新的合并请求以还原更改. + +恢复提交后," **恢复"**按钮将不再可用. + +请注意,还原合并提交时,主线将始终是第一父级. 如果要使用其他主线,则需要从命令行执行. + +这是一个使用第二个父级作为主线还原合并提交的快速示例: + +``` +git revert -m 2 7a39eb0 +``` \ No newline at end of file diff --git "a/docs/\351\207\214\347\250\213\347\242\221.md" "b/docs/\351\207\214\347\250\213\347\242\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..ea85f7189ad2279be88c16e21a1cd1042a83cb81 --- /dev/null +++ "b/docs/\351\207\214\347\250\213\347\242\221.md" @@ -0,0 +1,153 @@ +# 里程碑[](#里程碑 "Permalink") + +## Overview[](#overview "Permalink") + +GitLab 中的里程碑是一种跟踪问题并合并为在一定时期内实现更广泛目标而创建的请求的方法. + +里程碑使您可以组织问题并将请求合并到一个紧密联系的组中,并带有一个可选的开始日期和一个可选的截止日期. + +## Milestones as Agile sprints[](#milestones-as-agile-sprints "Permalink") + +里程碑可用作敏捷冲刺,因此您可以跟踪所有问题并合并与特定冲刺有关的请求. 为此: + +1. 设置里程碑的开始日期和截止日期,以代表敏捷冲刺的开始和结束. +2. 将里程碑标题设置为敏捷 sprint 的名称,例如`November 2018 sprint` . +3. 通过将问题的右侧边栏关联到所需的里程碑,将问题添加到敏捷冲刺中. + +## Milestones as releases[](#milestones-as-releases "Permalink") + +同样,里程碑可以用作发布. 为此: + +1. 设置里程碑到期日期以表示发布的发布日期,并将里程碑开始日期保留为空白. +2. 将里程碑标题设置为您的发行版,例如`Version 9.4` . +3. 通过关联问题右侧的期望里程碑,将问题添加到您的发行中. + +此外,您可以将里程碑与 GitLab 的[Releases 功能](../releases/index.html#associate-milestones-with-a-release)集成. + +## Project milestones and group milestones[](#project-milestones-and-group-milestones "Permalink") + +您可以将**项目里程碑**分配给问题或仅合并该项目中的请求. 要查看项目里程碑列表,请在项目中转到 **问题>里程碑** . + +您可以将**组里程碑**分配给该**组**中任何项目的任何发行或合并请求. 要查看组里程碑列表,请在组中转到 **问题>里程碑** . + +您还可以在仪表板里程碑列表中查看您有权访问的所有里程碑. 要查看您可以访问的项目里程碑和组里程碑,请单击顶部导航栏上的**更多>里程碑** . + +有关项目和组里程碑 API 的信息,请参阅: + +* [Project Milestones API](../../../api/milestones.html) +* [Group Milestones API](../../../api/group_milestones.html) + +**注意:**如果您在一个小组中,然后单击**问题>里程碑** ,您将看到小组里程碑和该小组中的项目里程碑. 如果您在项目中,然后单击" **问题">"里程碑"** ,则只会看到该项目的里程碑. + +## Creating milestones[](#creating-milestones "Permalink") + +**注意:**创建里程碑需要[开发者或更高](../../permissions.html)级别的权限. + +### New project milestone[](#new-project-milestone "Permalink") + +创建**项目里程碑** : + +1. 在一个项目中,转到 **问题>里程碑** . +2. Click **新的里程碑**. +3. 输入标题,可选描述,可选开始日期和可选截止日期. +4. Click **新的里程碑**. + +[![New project milestone](img/9807a6b10b783af2ed7c8703958f017a.png)](img/milestones_new_project_milestone.png) + +### New group milestone[](#new-group-milestone "Permalink") + +创建**组里程碑** : + +1. 在一个小组中,转到 **问题>里程碑** . +2. Click **新的里程碑**. +3. 输入标题,可选描述,可选开始日期和可选截止日期. +4. Click **新的里程碑**. + +[![New group milestone](img/4d2f841f1dee2bdbbdcd14bd5518c000.png)](img/milestones_new_group_milestone.png) + +## Editing milestones[](#editing-milestones "Permalink") + +**注意:**编辑里程碑需要[开发者或更高的](../../permissions.html)权限级别. + +要编辑里程碑: + +1. 在项目或小组中,转到 **问题>里程碑** . +2. 单击里程碑标题. +3. Click **Edit**. + +您可以通过单击" **删除"**按钮来删除里程碑. + +### Promoting project milestones to group milestones[](#promoting-project-milestones-to-group-milestones "Permalink") + +If you are expanding from a few projects to a larger number of projects within the same group, you may want to share the same milestone among multiple projects in the same group. If you previously created a project milestone and now want to make it available for other projects within the same group, you can promote it to a group milestone. + +从项目里程碑列表页面,您可以将项目里程碑升级为组里程碑. 这会将具有相同名称的该组中所有项目中的所有项目里程碑合并为一个组里程碑. 以前已分配给这些项目里程碑之一的所有问题和合并请求现在都将分配给新的组里程碑. 此操作不能撤消,更改是永久的. + +**警告:**从 GitLab 12.4 和更早版本开始,将项目里程碑提升为组里程碑时,某些信息会丢失. 组里程碑视图上并非项目里程碑视图上的所有功能都可用. 如果将项目里程碑升级为组里程碑,则将失去这些功能. 请参阅" [里程碑"视图,](#milestone-view)以查看组里程碑视图中缺少哪些功能. + +[![Promote milestone](img/e14dc9ee9528f343daf09a4dd5340b99.png)](img/milestones_promote_milestone.png) + +## Assigning milestones from the sidebar[](#assigning-milestones-from-the-sidebar "Permalink") + +可以为每个问题和合并请求分配一个里程碑. 里程碑在边栏中的每个问题和合并请求页面上可见. 它们在发行板上也可见. 您可以从边栏中为对象分配或取消分配里程碑. 您也可以在评论中[快速](../quick_actions.html)执行此[操作](../quick_actions.html) . [如前所述](#project-milestones-and-group-milestones) ,对于给定的发布或合并请求,可以选择项目里程碑和组里程碑并将其分配给对象. + +## Filtering issues and merge requests by milestone[](#filtering-issues-and-merge-requests-by-milestone "Permalink") + +### Filtering in list pages[](#filtering-in-list-pages "Permalink") + +在项目发布/合并请求列表页面和组发布/合并请求列表页面中,可以按组里程碑和项目里程碑进行[筛选](../../search/index.html#issues-and-merge-requests) . + +### Filtering in issue boards[](#filtering-in-issue-boards "Permalink") + +* 在[项目发布板上](../issue_board.html) ,您可以在[搜索和过滤器栏中](../../search/index.html#issue-boards)按组里程碑和项目里程碑进行[筛选](../../search/index.html#issue-boards) . +* 在[组发布板上](../issue_board.html#group-issue-boards-premium) ,您只能在[搜索和过滤器栏中](../../search/index.html#issue-boards)按组里程碑进行[过滤](../../search/index.html#issue-boards) . +* 在[项目发行板中](../issue_board.html) ,可以在[发行板配置中](../issue_board.html#configurable-issue-boards-starter)按组里程碑和项目里程碑进行筛选. +* 在[组发行板上,](../issue_board.html#group-issue-boards-premium)您只能按[发行板配置](../issue_board.html#configurable-issue-boards-starter)中的组里程碑进行筛选. + +### Special milestone filters[](#special-milestone-filters "Permalink") + +在按里程碑进行筛选时,除了选择特定的项目里程碑或组里程碑之外,还可以选择特殊的里程碑筛选器. + +* **无** :显示问题或没有分配里程碑的合并请求. +* **任何** :显示问题或合并具有指定里程碑的请求. +* **即将到来的** :显示已分配的公开里程碑的问题或合并请求,该里程碑具有下一个即将到来的到期日(即将来的最近到期日). +* **已开始** :显示具有打开的指定里程碑且开始日期在今天之前的问题或合并请求. + +## Milestone view[](#milestone-view "Permalink") + +里程碑视图显示标题和描述. + +这些标签下面还包含显示以下内容的标签: + +* **问题** :显示分配给里程碑的所有问题. 这些内容显示在名为: + * 未开始的问题(未解决和未分配) + * 进行中的问题(未解决和已分配) + * 已完成的问题(已关闭) +* **合并请求** :显示分配给里程碑的所有合并请求. 这些将显示在名为: + * 进行中的工作(开放且未分配) + * 等待合并(打开和未分配) + * 拒绝(关闭) + * 合并后 +* **参与者** :显示分配给该里程碑的所有问题的受让人. +* **Labels**: Shows all labels that are used in issues assigned to the milestone. + +### Project Burndown Charts[](#project-burndown-charts-starter "Permalink") + +对于[GitLab Starter 中的](https://about.gitlab.com/pricing/)项目里程碑,里程碑视图中有一个[燃尽图](burndown_charts.html) ,显示完成里程碑的进度. + +[![burndown chart](img/eb36e4acf26c49641689d1a05dd8fa8a.png)](img/burndown_chart.png) + +### Group Burndown Charts[](#group-burndown-charts-premium "Permalink") + +对于[GitLab Premium 中的](https://about.gitlab.com/pricing/)组里程碑,里程碑视图中有一个[燃尽图](burndown_charts.html) ,显示完成里程碑的进度. + +### Milestone sidebar[](#milestone-sidebar "Permalink") + +里程碑视图上的里程碑侧栏显示以下内容: + +* 完成百分比,计算方式为已完成的问题数除以问题总数. +* 开始日期和截止日期. +* 在分配给里程碑的所有问题和合并请求上花费的总时间. +* 分配给里程碑的所有问题的总问题权重. + +[![Project milestone page](img/11f64bd49fd604a4644dd54ed7e423e8.png)](img/milestones_project_milestone_page.png) \ No newline at end of file diff --git "a/docs/\351\225\234\345\203\217\344\273\223\345\272\223.md" "b/docs/\351\225\234\345\203\217\344\273\223\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..2125b7adbd1b0caf8a0d760edf862958b20ea928 --- /dev/null +++ "b/docs/\351\225\234\345\203\217\344\273\223\345\272\223.md" @@ -0,0 +1,401 @@ +# 镜像仓库[](#镜像仓库 "Permalink") + +存储库镜像允许将存储库镜像到外部源或从外部源镜像. 它可用于镜像存储库之间的分支,标签和提交. + +GitLab 上的存储库镜像将自动更新. 您也可以最多每 5 分钟手动触发一次更新. + +## Overview[](#overview "Permalink") + +当您想在 GitLab 之外使用存储库时,存储库镜像很有用. + +GitLab 支持两种存储库镜像: + +* 推送:用于将 GitLab 存储库镜像到另一个位置. +* Pull: for mirroring a repository from another location to GitLab. + +镜像存储库更新后,所有新的分支,标记和提交将在项目的活动提要中可见. + +至少具有[开发人员访问](../../permissions.html)项目[权限](../../permissions.html)的用户也可以强制立即更新,除非: + +* 镜像已被更新. +* 自上次更新以来,还没有过去 5 分钟. + +出于安全原因,在[GitLab 12.10 和更高版本中](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27166) ,原始存储库的 URL 仅显示给对镜像项目具有维护者或所有者权限的用户. + +## Use cases[](#use-cases "Permalink") + +以下是存储库镜像的一些可能的用例: + +* 您迁移到了 GitLab,但仍需要将项目保留在另一个源中. 在这种情况下,您只需将其设置为镜像到 GitLab(拉),所有提交,标签和分支的基本历史记录都将在您的 GitLab 实例中提供. +* 您在另一个源中有旧项目,这些旧项目不再使用,但又不想出于归档目的而删除它们. 在这种情况下,您可以创建一个推送镜像,以便您的活动 GitLab 存储库可以将其更改推送到旧位置. + +## Pushing to a remote repository[](#pushing-to-a-remote-repository-core "Permalink") + +版本历史 + +* 在 GitLab 企业版 8.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/249) . +* 在 10.8 版中[移至 GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18715) . + +对于现有项目,可以按如下所示设置推送镜像: + +1. 导航到项目的**"设置">"存储库",**然后展开" **镜像存储库"**部分. +2. 输入存储库 URL. +3. 从**镜像方向**下拉菜单中选择**推送** . +4. 如有必要,请从" **身份验证方法"**下拉列表中选择一种身份**验证方法** . +5. 如有必要,请选中**仅镜像保护的分支**框. +6. 如果需要, **请**选中" **保持差异引用"**框. +7. 单击**镜像存储库**按钮以保存配置. + +[![Repository mirroring push settings screen](img/d67d5681f30c4769c6d92232eada26e4.png)](img/repository_mirroring_push_settings.png) + +启用推送镜像后,只有推送会直接提交到镜像存储库,以防止镜像发散. 任何时候,所有更改都将最终存储在镜像存储库中: + +* 提交被推送到 GitLab. +* [强制更新](#forcing-an-update-core)已启动. + +推送到存储库中文件的更改至少会自动推送到远程镜像: + +* 收到后五分钟内. +* 如果启用了**仅受镜像保护的分支,**则在一分钟之内. + +如果分支分支不同,您将在" **镜像存储库"**部分看到指示的错误. + +### Configuring push mirrors through the API[](#configuring-push-mirrors-through-the-api "Permalink") + +您还可以通过[远程镜像 API](../../../api/remote_mirrors.html)创建和修改项目推送镜像. + +### Push only protected branches[](#push-only-protected-branches-core "Permalink") + +版本历史 + +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 10.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3350) . +* 在 10.8 版中[移至 GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18715) . + +您可以选择仅将受保护的分支从 GitLab 推送到远程存储库. + +要使用此选项,请在创建存储库镜像时选中" **仅镜像保护的分支"**框. + +### Keep divergent refs[](#keep-divergent-refs-core "Permalink") + +在 GitLab 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/208828) . + +默认情况下,如果远程镜像上的任何引用都与本地存储库不同,则*整个推送*将失败,并且不会更新任何内容. + +例如,如果存储库具有已镜像到远程的`master` , `develop`和`stable`分支,然后添加新提交以在镜像上进行`develop` ,则下一次推送尝试将失败,从而使`master`和`stable`不在可用范围内约会尽管没有分歧. 在解决分歧之前,无法反映任何分支上的更改. + +启用" **保持差异引用"**选项后,将跳过`develop`分支,从而可以更新`master`和`stable` . 镜像状态将反映`develop`已偏离并被跳过,并标记为更新失败. + +**注意:**创建镜像后,当前只能通过[API](../../../api/remote_mirrors.html)修改此选项. + +## Setting up a push mirror from GitLab to GitHub[](#setting-up-a-push-mirror-from-gitlab-to-github-core "Permalink") + +要设置从 GitLab 到 GitHub 的镜像,您需要执行以下步骤: + +1. 创建一个[GitHub 个人访问令牌](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) ,并选中`public_repo`框. +2. 使用以下格式填写**Git 存储库 URL**字段: `https://<your_github_username>@github.com/<your_github_group>/<your_github_project>.git` . +3. 使用您的 GitHub 个人访问令牌填写**密码**字段. +4. 单击**镜像存储库**按钮. + +镜像的存储库将被列出. 例如, `https://*****:*****@github.com/<your_github_group>/<your_github_project>.git` . + +该存储库将很快推送. 要强制按下,请单击适当的按钮. + +## Setting up a push mirror to another GitLab instance with 2FA activated[](#setting-up-a-push-mirror-to-another-gitlab-instance-with-2fa-activated "Permalink") + +1. 在目标 GitLab 实例上,创建一个具有`write_repository`范围的[个人访问令牌](../../profile/personal_access_tokens.html) . +2. 在源 GitLab 实例上: + 1. 使用以下格式填写**Git 存储库 URL**字段: `https://oauth2@<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git` . + 2. 在目标 GitLab 实例上创建的 GitLab 个人访问令牌中填写**密码**字段. + 3. 单击**镜像存储库**按钮. + +## Pulling from a remote repository[](#pulling-from-a-remote-repository-starter "Permalink") + +版本历史 + +* 在 GitLab 企业版 8.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/51) . +* 在[GitLab Starter](https://about.gitlab.com/pricing/) 11.11 中[添加了 Git LFS 支持](https://gitlab.com/gitlab-org/gitlab/-/issues/10871) . + +您可以将存储库设置为自动从上游存储库更新其分支,标记和提交. + +当您感兴趣的存储库位于其他服务器上并且您希望能够使用熟悉的 GitLab 界面浏览其内容和活动时,此功能很有用. + +要为现有项目配置镜像拉出: + +1. Navigate to your project’s **设置>存储库** and expand the **镜像存储库** section. +2. 输入存储库 URL. +3. 从**镜像方向**下拉菜单中选择**拉** . +4. 如有必要,请从" **身份验证方法"**下拉列表中选择一种身份**验证方法** . +5. 如有必要,请选中以下框: + * **覆盖分散的分支** . + * **触发管道以更新镜像** . + * **仅镜像保护的分支** . +6. 单击**镜像存储库**按钮以保存配置. + +[![Repository mirroring pull settings screen - upper part](img/5881da97228cb042e5934f836edfd06c.png)](img/repository_mirroring_pull_settings_upper.png) + +* * * + +[![Repository mirroring pull settings screen - lower part](img/d5df9e77d389b58908ef235600ccc61c.png)](img/repository_mirroring_pull_settings_lower.png) + +Because GitLab is now set to pull changes from the upstream repository, you should not push commits directly to the repository on GitLab. Instead, any commits should be pushed to the upstream repository. Changes pushed to the upstream repository will be pulled into the GitLab repository, either: + +* 在一定时间内自动. +* 启动[强制更新时](#forcing-an-update-core) . + +**警告:**如果您确实在 GitLab 存储库中更新了分支,则该分支将与上游分叉,并且 GitLab 将不再自动更新该分支以防止丢失任何更改. 另请注意,上游存储库中已删除的分支和标签将不会反映在 GitLab 存储库中. + +### How it works[](#how-it-works "Permalink") + +为存储库启用拉镜像功能后,会将存储库添加到队列中. + +每分钟一次,Sidekiq cron 作业基于以下内容计划存储库镜像的更新: + +* 可用容量. 这由 Sidekiq 设置确定. 对于 GitLab.com,请参阅[GitLab.com Sidekiq 设置](../../gitlab_com/index.html#sidekiq) . +* 队列中已经要更新的存储库镜像数. 到期时间取决于存储库镜像的最后更新时间以及重试次数. + +随着 Sidekiq 可以处理存储库镜像,它们也会更新. 如果更新存储库镜像的过程为: + +* 成功后,至少需要等待 30 分钟,更新才会重新加入队列. +* 失败(例如,分支从上游分支),稍后将再次尝试. 镜像最多可以发生 14 次故障,然后才不会再次进入队列进行更新. + +### SSH authentication[](#ssh-authentication "Permalink") + +> * 在[GitLab Starter](https://about.gitlab.com/pricing/) 9.5 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/2551)了拉镜像. +> * 在[GitLab Core](https://about.gitlab.com/pricing/) 11.6 中为推送镜像[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22982) + +SSH 身份验证是相互的: + +* 您必须向服务器证明您有权访问存储库. +* 服务器还必须向*您*证明它是谁. + +您提供凭据作为密码或公共密钥. 另一个存储库所在的服务器提供其凭据作为"主机密钥",其指纹需要手动验证. + +如果您通过 SSH 镜像(即使用`ssh://` URL),则可以使用以下方法进行身份验证: + +* 基于密码的身份验证,就像通过 HTTPS 一样. +* 公钥认证. 这通常比密码身份验证更安全,尤其是当其他存储库支持[Deploy Keys 时](../../../ssh/README.html#deploy-keys) . + +开始: + +1. 导航到项目的**"设置">"存储库",**然后展开" **镜像存储库"**部分. +2. 输入`ssh://` URL 进行镜像. + +**注意:**目前不支持 SCP 样式的 URL(即`git@example.com:group/project.git` ). + +输入 URL 在页面上添加两个按钮: + +* **检测主机密钥**. +* **手动输入主机密钥**. + +如果单击: + +* **检测主机密钥**按钮,GitLab 将从服务器获取主机密钥并显示指纹. +* **手动输入主机密钥**按钮,将显示一个字段,您可以在其中粘贴主机密钥. + +假设您使用了前者,那么现在需要验证指纹是否符合您的期望. GitLab.com 和其他代码托管站点公开公开其指纹,供您检查: + +* [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/regions.html#regions-fingerprints) +* [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/configure-ssh-and-two-step-verification/) +* [GitHub](https://help.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints) +* [GitLab.com](../../gitlab_com/index.html#ssh-host-keys-fingerprints) +* [Launchpad](https://help.launchpad.net/SSHFingerprints) +* [Savannah](http://savannah.gnu.org/maintenance/SshAccess/) +* [SourceForge](https://sourceforge.net/p/forge/documentation/SSH%20Key%20Fingerprints/) + +其他提供者将有所不同. 如果您正在运行自我管理的 GitLab,或者可以访问其他存储库的服务器,则可以安全地收集密钥指纹: + +``` +$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f - +256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA) +256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519) +2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA) +``` + +**注意:**对于某些旧版本的 SSH,可能需要排除`-E md5` . + +在镜像存储库时,GitLab 现在将在连接之前检查至少一个存储的主机密钥是否匹配. 这样可以防止将恶意代码注入到您的镜像中,或者防止您的密码被盗. + +### SSH public key authentication[](#ssh-public-key-authentication "Permalink") + +要使用 SSH 公钥身份验证,您还需要从**Authentication method**下拉菜单中选择该选项. 创建镜像后,GitLab 会生成一个 4096 位 RSA 密钥,可以通过单击" **复制 SSH"公共密钥**按钮进行复制. + +[![Repository mirroring copy SSH public key to clipboard button](img/c1e086b58ff99dd5c5684a4571e568e3.png)](img/repository_mirroring_copy_ssh_public_key_button.png) + +然后,您需要将公共 SSH 密钥添加到另一个存储库的配置中: + +* 如果其他存储库托管在 GitLab 上,则应将公共 SSH 密钥添加为[Deploy Key](../../../ssh/README.html#deploy-keys) . +* 如果其他存储库位于其他位置,则可能需要将密钥添加到用户的`authorized_keys`文件中. 将整个公共 SSH 密钥单独粘贴到文件中并保存. + +如果您需要随时更改密钥,则可以删除并重新添加镜像以生成新密钥. 您必须使用新密钥更新另一个存储库,以保持镜像运行. + +**注意:**生成的密钥存储在 GitLab 数据库中,而不存储在文件系统中. 因此,无法在预接收挂钩中使用针对镜像的 SSH 公钥身份验证. + +### Overwrite diverged branches[](#overwrite-diverged-branches-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4559) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.6. + +您可以选择始终使用远程版本更新本地分支,即使它们与远程分支不同. + +**警告:**对于镜像分支,启用此选项会导致丢失本地更改. + +要使用此选项,请在创建存储库镜像时选中" **覆盖分支分支"**框. + +### Only mirror protected branches[](#only-mirror-protected-branches-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3326) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.3. + +您可以选择仅将受保护的分支从远程存储库拉到 GitLab. 未受保护的分支不会被镜像,并且可能会分开. + +要使用此选项,请在创建存储库镜像时选中" **仅镜像保护的分支"**框. + +### Hard failure[](#hard-failure-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3117) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.2. + +如果镜像过程连续 14 次失败重试,它将被标记为硬盘失败. 这将在以下任一位置中可见: + +* 项目的主要仪表板. +* 拉镜设置页面. + +当一个项目很难失败时,它将不再需要进行镜像. 用户可以通过[强制更新来](#forcing-an-update-core)再次恢复项目镜像. + +### Trigger update using API[](#trigger-update-using-api-starter "Permalink") + +[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3453) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.3. + +拉镜像使用轮询来检测新添加的分支和提交,通常是在几分钟后. 如果您通过[API](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter)通知 GitLab,更新将立即被拉出. + +有关更多信息,请参阅[启动项目的拉镜像过程](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter) . + +## Forcing an update[](#forcing-an-update-core "Permalink") + +当计划将镜像自动更新时,您始终可以使用" **存储** **库设置"**页面的" **镜像存储库"**部分上的"更新"按钮强制进行更新. + +[![Repository mirroring force update user interface](img/a6e9b62f94c53cd2f37f7300362137a9.png)](img/repository_mirroring_force_update.png) + +## Bidirectional mirroring[](#bidirectional-mirroring-starter "Permalink") + +**注意:**双向镜像可能会导致冲突. + +如果您将 GitLab 存储库配置为从同一远程源中拉出和推送到同一远程源,则不能保证这两个存储库都将正确更新. 如果为双向镜像设置存储库,则应通过确定谁将解决它们以及如何解决它们来为可能的冲突做准备. + +重写任一远程上的任何镜像提交将导致冲突,并且镜像失败. 可以通过以下方法防止此情况: + +* [Pulling only protected branches](#only-mirror-protected-branches-starter). +* [Pushing only protected branches](#push-only-protected-branches-core). + +您应该[保护](../protected_branches.html)希望在两个远程控制器上镜像[的分支](../protected_branches.html) ,以防止由于重写历史记录而引起的冲突. + +双向镜像还会创建竞态条件,在这种竞态条件中,靠近同一分支的提交会引起冲突. 通过使用[Push 事件 Webhook](../integrations/webhooks.html#push-events)触发立即拉到 GitLab,可以通过减少镜像延迟来缓解竞争状况. 当仅推送镜像受保护的分支时,来自 GitLab 的推送镜像的速率限制为每分钟一次. + +### Configure a webhook to trigger an immediate pull to GitLab[](#configure-a-webhook-to-trigger-an-immediate-pull-to-gitlab "Permalink") + +假设您已经在上游 GitLab 实例中配置了[推](#setting-up-a-push-mirror-to-another-gitlab-instance-with-2fa-activated)和[拉](#pulling-from-a-remote-repository-starter)镜像,以触发如上所述的立即提拉,则需要在下游实例中配置一个[推事件 Web 挂钩](../integrations/webhooks.html#push-events) . + +去做这个: + +* 创建具有`API`范围的[个人访问令牌](../../profile/personal_access_tokens.html) . +* 导航到**设置> Webhooks** +* 添加 webhook URL,在这种情况下,它将在存储库更新后使用[Pull Mirror API](../../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter)请求触发即时提取. + + ``` + https://gitlab.example.com/api/v4/projects/:id/mirror/pull?private_token=<your_access_token> + ``` + +* 确保已选中" **推送事件"**复选框. +* 单击**添加 Webhook**按钮以保存**Webhook** . +* 要测试集成,请单击" **测试"**按钮,并确认 GitLab 不返回任何错误. + +### Preventing conflicts using a `pre-receive` hook[](#preventing-conflicts-using-a-pre-receive-hook "Permalink") + +**警告:**提议的解决方案将对 Git 推送操作的性能产生负面影响,因为它们将被代理到上游 Git 存储库. + +服务器端`pre-receive`挂钩可通过仅在将提交首先推送到上游 Git 存储库之后才接受推送来防止上述竞争情况. 在此配置中,一个 Git 存储库充当权威的上游,另一个充当下游. `pre-receive`挂钩将安装在下游存储库中. + +阅读有关在 GitLab 服务器上[配置服务器挂钩](../../../administration/server_hooks.html)的信息. + +下面提供了一个样品`pre-receive`挂钩. + +``` +#!/usr/bin/env bash + +# --- Assume only one push mirror target +# Push mirroring remotes are named `remote_mirror_<id>`, this finds the first remote and uses that. +TARGET_REPO=$(git remote | grep -m 1 remote_mirror) + +proxy_push() +{ + # --- Arguments + OLDREV=$(git rev-parse $1) + NEWREV=$(git rev-parse $2) + REFNAME="$3" + + # --- Pattern of branches to proxy pushes + allowlist=$(expr "$branch" : "\(master\)") + + case "$refname" in refs/heads/*) + branch=$(expr "$refname" : "refs/heads/\(.*\)") + + if [ "$allowlist" = "$branch" ]; then unset GIT_QUARANTINE_PATH # handle https://git-scm.com/docs/git-receive-pack#_quarantine_environment + error="$(git push --quiet $TARGET_REPO $NEWREV:$REFNAME 2>&1)" + fail=$? + + if [ "$fail" != "0" ]; then echo >&2 "" + echo >&2 " Error: updates were rejected by upstream server" + echo >&2 " This is usually caused by another repository pushing changes" + echo >&2 " to the same ref. You may want to first integrate remote changes" + echo >&2 "" + return + fi + fi + ;; + esac +} + +# Allow dual mode: run from the command line just like the update hook, or +# if no arguments are given then run as a hook script +if [ -n "$1" -a -n "$2" -a -n "$3" ]; then + # Output to the terminal in command line mode - if someone wanted to + # resend an email; they could redirect the output to sendmail + # themselves + PAGER= proxy_push $2 $3 $1 +else + # Push is proxied upstream one ref at a time. Because of this it is possible + # for some refs to succeed, and others to fail. This will result in a failed + # push. + while read oldrev newrev refname + do proxy_push $oldrev $newrev $refname + done +fi +``` + +请注意,此示例有一些限制: + +* 此示例可能无法完全满足您的用例,并且可能需要进行修改. + * 它不考虑镜像的不同类型的身份验证机制. + * 它不适用于强制更新(重写历史记录). + * 仅匹配`allowlist`模式的分支将被代理推送. +* 该脚本规避了 Git 钩子隔离环境,因为`$TARGET_REPO`的更新被视为参考更新,Git 会对此进行抱怨. + +### Mirroring with Perforce Helix via Git Fusion[](#mirroring-with-perforce-helix-via-git-fusion-starter "Permalink") + +**警告:**双向镜像不应用作永久配置. 有关替代的迁移方法,请参阅[从 Perforce Helix](../import/perforce.html)迁移. + +[Git Fusion](https://www.perforce.com/manuals/git-fusion/#Git-Fusion/section_avy_hyc_gl.html)为[Perforce Helix](https://www.perforce.com/products)提供了一个 Git 接口,GitLab 可以使用它来双向镜像 GitLab 项目. 从 Perforce Helix 迁移到 GitLab 的某些情况下,这可能是有用的,因为重叠的 Perforce Helix 工作区无法同时迁移到 GitLab. + +如果将镜像与 Perforce Helix 一起使用,则应仅镜像受保护的分支. Perforce Helix 将拒绝任何重写历史记录的推送. 由于 Git Fusion 的性能限制,只应镜像最少数量的分支. + +通过 Git Fusion 使用 Perforce Helix 配置镜像时,建议使用以下 Git Fusion 设置: + +* `change-pusher`应禁用. 否则,每个提交都将被重写为由镜像帐户提交,而不是映射到现有的 Perforce Helix 用户或`unknown_git`用户. +* 如果 Perforce Helix 中不存在 GitLab 用户,则`unknown_git`用户将用作提交作者. + +[在 Perforce.com 上](https://www.perforce.com/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l)了解有关[Git Fusion 设置的信息](https://www.perforce.com/manuals/git-fusion/Content/Git-Fusion/section_vss_bdw_w3.html#section_zdp_zz1_3l) . + +## Troubleshooting[](#troubleshooting "Permalink") + +如果在推送过程中发生错误,则 GitLab 将在该存储库中显示"错误"突出显示. 然后,将鼠标悬停在突出显示的文本上,即可查看有关错误的详细信息. + +### 13:Received RST_STREAM with error code 2 with GitHub[](#13received-rst_stream-with-error-code-2-with-github "Permalink") + +如果在镜像到 GitHub 存储库时收到"错误代码为 2 的 13:Received RST_STREAM",则您的 GitHub 设置可能被设置为阻止推送,以暴露用于提交的电子邮件地址. 可以将您在 GitHub 上的电子邮件地址设置为公开,或者禁用[公开我的电子邮件](https://github.com/settings/emails)设置的" [阻止"命令行推送](https://github.com/settings/emails) . \ No newline at end of file diff --git "a/docs/\351\241\271\347\233\256.md" "b/docs/\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..5afd08d49db8120788b901ab70eb45525340e637 --- /dev/null +++ "b/docs/\351\241\271\347\233\256.md" @@ -0,0 +1,188 @@ +# 项目[](#项目 "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) + +** CI / CD:** + +* [CI / CD](../../ci/README.html) :内置的持续集成,交付和部署工具 + * [容器注册表](../packages/container_registry/index.html) :开箱即用地构建和推送 Docker 映像 + * [自动部署](../../topics/autodevops/stages.html#auto-deploy) :配置 CI / CD 以自动设置应用程序的部署 + * [启用和禁用 CI / CD](../../ci/enable_or_disable_ci.html) + * [Pipelines](../../ci/pipelines/index.html) :从 UI 配置和可视化 GitLab CI / CD 管道 + * [计划的Pipeline](../../ci/pipelines/schedules.html) :计划管道以在选定的时间开始 + * [Pipeline图](../../ci/pipelines/index.html#visualize-pipelines) :通过WEB查看整个管道 + * [作业工件](../../ci/pipelines/job_artifacts.html) :定义,浏览和下载作业工件 + * [Pipeline设置](../../ci/pipelines/settings.html) :设置 Git 策略(选择从作业中的 GitLab 提取存储库的默认方式),超时(定义可以运行作业的最长时间(以分钟为`.gitlab-ci.yml` )) `.gitlab-ci.yml`自定义路径,测试覆盖率分析,管道的可见性等 + * [Kubernetes 集群集成](clusters/index.html) :将您的 项目与 Kubernetes 集群连接 + * [功能标志](../../operations/feature_flags.html) :功能标志允许您通过动态切换某些功能来以不同的方式发布项目 +* [Pages](pages/index.html) :使用[Pages](pages/index.html)构建,测试和部署您的静态网站 + +**其他特性:** + +* [Wiki](wiki/index.html) :在集成的 Wiki 中记录您的项目 +* [代码片](../snippets.html) :存储,共享和协作代码片段 +* [价值流分析](cycle_analytics.html) :查看您的开发生命周期 +* [分析](insights/index.html) :配置对您的项目至关重要的见解 +* [语法高亮](highlighting.html) :一种自定义代码块的替代方法,可替代默认语言选择 +* [Release](releases/index.html) :一种跟踪项目中可交付成果的方式,可作为源,构建输出,其他元数据和与代码的发行版本相关的其他工件的快照 +* [代码所有者](code_owners.html) :为某些文件指定代码所有者 +* [License](../compliance/license_compliance/index.html) :批准和拒绝项目的许可证. +* [依赖项列表](../application_security/dependency_list/index.html) :查看项目依赖项. +* [要求](requirements/index.html) :要求使您可以创建标准来检查产品. +* [静态站点编辑器](static_site_editor/index.html) :无需事先了解代码库或 Git 命令,即可在静态网站上快速编辑内容. + +### 项目集成[](#项目集成 "Permalink") + +[将您的项目](integrations/index.html)与 Jira,Mattermost,Kubernetes,Slack 等进行[集成](integrations/index.html) 。 + +## 新建项目[](#新建项目 "Permalink") + +了解如何在 CODEChina 中[创建一个新项目](../../basics/create-project.html) . + +### Fork 项目[](#fork项目 "Permalink") + +您可以[Fork 一个项目](repository/forking_workflow.html) ,以便: + +* 通过 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") + +项目设置允许您设置项目的可见性级别、访问级别,并执行诸如归档、重命名或转移项目的操作。 + +了解更多有关[项目设置](settings/index.html)的文档。 + +## 导入/导出项目[](#i导入导出项目 "Permalink") + +* [导入项目](import/index.html) from: + * [从Github导入](import/github.html) + * [从Bitbucket导入](import/bitbucket.html) +* [导出项目](settings/import_export.html#exporting-a-project-and-its-data) + + +## 删除项目[](#删除项目 "Permalink") + +可以通过以下操作删除一个项目: + +1. 打开**项目设置>常规设置** +2. 展开**高级**部分 +3. 向下滚动到**删除项目**部分 +4. 点击 **删除项目** +5. 通过输入所需的文本来确认删除操作 + +### 延迟删除[](#延迟删除 "Permalink") + +默认情况下,删除项目后会延迟 7 天才真的会删除项目。在此期间项目为待删除状态, 管理员可以在这段时间内恢复项目。 + + +## 项目成员[](#项目成员 "Permalink") + +了解如何[将成员添加到您的项目中](members/index.html) + +## 退出项目[](#退出项目 "Permalink") + +当项目属于组织时(即项目在[组织的命名空间下](../group/index.html#命名空间) ), **退出项目**将仅显示在项目的页面上. 如果您选择退出项目,那么您将不再是项目成员,并且将无法继续参与项目。 + +## 项目首页[](#项目首页 "Permalink") + +项目首页会根据项目的可见性设置和用户权限来显示不同的内容: + +对于公共项目以及私有项目中[有权查看该项目代码](../permissions.html#project-members-permissions)的项目成员: + +* 显示[`README`文件或索引文件的](repository/#repository-readme-and-index-files)内容(如果有),然后显示项目存储库中的目录列表 +* 如果项目不包含这些文件中的任何一个,则访问者将看到存储库的文件和目录列表 + +对于没有权限查看项目代码的用户: + +* 显示项目 Wiki(如果有) +* 显示项目的 Issue 列表 + +## 路径重定向[](#路径重定向 "Permalink") + +当项目仓库路径变更时,从旧路径平稳过渡到新路径至关重要,我们提供两种重定向方式:Web 以及 Git 推/拉重定向。 + +这两种方式根据项目的情况,可能会有所不同。 + +当重命名一个用户、一个组织或者一个仓库时: + +* 命名空间及其下的任何内容(例如项目)的现有 Web URL 将重定向到新 URL +* 命名空间下项目的现有 Git 远程 URL 将重定向到新的远程 URL,每次将其推/拉到修改过路径的代码仓库时,都会显示一条警告消息:提示您更新远程仓库地址。 这也就意味着在重命名后,任何自动化脚本或 Git 客户端将继续工作 +* 只要原来的路径还没有被其他用户、组织或者项目占用,路径重定向功能将一直能够正常使用 + +## 项目 API[](#项目api "Permalink") + +您的项目可以使用许多[API](../../api/README.html) : + +* [话题](../../api/discussions.html) +* [基本信息](../../api/projects.html) +* [导入/导出项目](../../api/project_import_export.html) +* [看板](../../api/boards.html) +* [标签](../../api/labels.html) +* [Markdown](../../api/markdown.html) +* [合并请求](../../api/merge_requests.html) +* [里程碑](../../api/milestones.html) \ No newline at end of file diff --git "a/docs/\351\241\271\347\233\256\346\210\220\345\221\230.md" "b/docs/\351\241\271\347\233\256\346\210\220\345\221\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..15ee7de113fffe74200c4e509c59371b292f51c2 --- /dev/null +++ "b/docs/\351\241\271\347\233\256\346\210\220\345\221\230.md" @@ -0,0 +1,119 @@ +# 项目成员[](#项目成员 "Permalink") + +您可以在所有项目中管理组和用户及其访问级别. 您还可以个性化为每个项目赋予每个用户的访问级别. + +您应该具有维护者或所有者[权限,](../../permissions.html)才能将新用户添加或导入到项目中. + +要查看,编辑,添加和删除项目的成员,请转到项目的**成员** . + +## Inherited membership[](#inherited-membership "Permalink") + +当您的项目属于该组时,组成员将从该组继承该项目的成员资格和权限级别. + +[![Project members page](img/3f64ac42c5324a759f292fa0f7e4d991.png)](img/project_members.png) + +从上图可以得出以下几点: + +* 有 3 个成员可以访问该项目. +* User0 是记者,并且已从包含当前项目的组`demo`继承了他们的权限. +* 对于 User1,没有组的指示,因此它们直接属于我们正在检查的项目. +* 管理员是**所有**组的所有者和所有者,因此,有迹象表明祖先组和继承的所有者权限. + +[在 GitLab 12.6 中](https://gitlab.com/gitlab-org/gitlab/-/issues/21727) ,您可以使用右侧的下拉列表过滤此列表: + +[![Project members filter](img/4d5fab6dd3f65351ba798d87517db0bd.png)](img/project_members_filter_v12_6.png) + +* **仅显示直接成员**仅显示 User1. +* **仅显示继承的成员将**显示 User0 和 Administrator. + +## Add a user[](#add-a-user "Permalink") + +旁边的**人** ,开始输入要添加的用户的姓名或用户名. + +[![Search for people](img/5d98850d2ad30c43029645c8c0486059.png)](img/add_user_search_people.png) + +选择用户以及您要赋予该用户的[权限级别](../../permissions.html) . 请注意,您可以选择多个用户. + +[![Give user permissions](img/c736ba09ab7186102250ad9e624d79c1.png)](img/add_user_give_permissions.png) + +完成后,点击**将用户添加到项目中** ,这些**用户**将立即使用您在上面授予他们的权限添加到您的项目中. + +[![List members](img/a94b1f6b20cc665168a8d8359d195f78.png)](img/add_user_list_members.png) + +从那里开始,您可以删除现有用户或更改其对项目的访问级别. + +## Import users from another project[](#import-users-from-another-project "Permalink") + +您可以通过单击" **成员"**菜单右上角的" **导入成员"**按钮,将另一个项目的用户导入您自己的项目中. + +在下拉菜单中,您只能看到维护者所在的项目. + +[![Import members from another project](img/4c34240e5c09caa62a018e3d109c1ba3.png)](img/add_user_import_members_from_another_project.png) + +选择所需的一个,然后单击" **导入项目成员"** . 将会出现一条简短的消息,通知您导入已成功,并且新成员现在位于项目的成员列表中. 请注意,保留了他们对您从中导入的项目的权限. + +[![Members list of new members](img/f9a1ce8fe1042543bc2355950f642a05.png)](img/add_user_imported_members.png) + +## Invite people using their e-mail address[](#invite-people-using-their-e-mail-address "Permalink") + +如果要授予访问权限的用户在您的 GitLab 实例上没有帐户,则可以通过在用户搜索字段中键入其电子邮件地址来邀请他们. + +[![Invite user by mail](img/27d6bf9eb64fd8e4298e7a2a8ae64983.png)](img/add_user_email_search.png) + +可以想象,您可以混合邀请多个人并将现有的 GitLab 用户添加到项目中. + +[![Invite user by mail ready to submit](img/1fa927abbc0d78f64822dcc6c7295cd4.png)](img/add_user_email_ready.png) + +完成后,点击" **将用户添加到项目中",**然后观察到有一个新成员具有我们上面使用的电子邮件地址. 在此之后,您可以重新发送邀请,更改其访问级别,甚至删除它们. + +[![Invite user members list](img/878c3488cf7403499b80fcd402198e32.png)](img/add_user_email_accept.png) + +用户接受邀请后,将提示他们使用邀请发送到的相同电子邮件地址创建一个新的 GitLab 帐户. + +## Project membership and requesting access[](#project-membership-and-requesting-access "Permalink") + +项目所有者可以: + +* 允许非成员请求访问该项目. +* 防止非会员请求访问. + +要进行配置,请转到项目设置,然后单击**允许用户请求访问权限** . + +GitLab 用户可以请求成为项目成员. 转到您要加入的项目,然后单击屏幕右侧的" **请求访问**权"按钮. + +[![Request access button](img/1ff79a3af1496b3e864efbcf5f93307f.png)](img/request_access_button.png) + +请求访问后: + +* 通过电子邮件将最多十个项目维护者通知该请求. 电子邮件被发送给最近活跃的项目维护者. +* 任何项目维护者都可以在成员页面上批准或拒绝该请求. + +**注意:**如果项目没有任何维护者,则将通知发送给该项目组的最近活动的所有者. + +[![Manage access requests](img/083580c1827d40263d500a21f072249f.png)](img/access_requests_management.png) + +如果您在批准请求之前改变主意,只需单击" **撤回访问请求"**按钮. + +[![Withdraw access request button](img/dbb89cfb3c7539310a17d809c65c34a5.png)](img/withdraw_access_request_button.png) + +## Share project with group[](#share-project-with-group "Permalink") + +或者,您可以[与整个组共享一个项目,](share_project_with_groups.html)而不是一个一个地添加用户. + +## Remove a member from the project[](#remove-a-member-from-the-project "Permalink") + +只有[拥有所有者](../../permissions.html#group-members-permissions)权限的[用户](../../permissions.html#group-members-permissions)才能管理项目成员. + +如果给定成员在项目中具有直接成员资格,则可以从项目中删除用户. 如果成员资格是从父组继承的,则该成员只能从父组本身中删除. + +删除成员时,您可以决定是从所有问题中取消分配用户,还是合并当前已分配的请求,还是保留分配. + +* 当用户离开私有项目并且您希望撤消他们对所有问题和已分配的合并请求的访问时,从所有问题和合并请求中**取消分配已删除的成员**可能会有所帮助. +* **保留问题和合并请求的分配**可能对于接受公共贡献的项目很有帮助,在这些项目中,用户不必成为成员就可以为问题和合并请求做出贡献. + +To remove a member from a project: + +1. 在一个项目中,转到 **成员们** . +2. 点击**删除** 要删除的项目成员旁边的按钮. 出现" **删除成员"**模态. +3. (可选)选中" **也从相关问题中取消分配此用户并合并请求"**复选框. +4. Click **删除会员**. \ No newline at end of file diff --git "a/docs/\351\241\271\347\233\256\350\256\276\347\275\256.md" "b/docs/\351\241\271\347\233\256\350\256\276\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..cc2c001b59f38f385a08d6f694255475a2f37c25 --- /dev/null +++ "b/docs/\351\241\271\347\233\256\350\256\276\347\275\256.md" @@ -0,0 +1,219 @@ +# 项目设置[](#项目设置 "Permalink") + +**注意:**只有项目维护者和管理员用户[有权](../../permissions.html#project-members-permissions)访问项目设置. + +您可以通过导航到项目的主页并点击**设置**来调整[项目](../index.html)设置. + +## General settings[](#general-settings "Permalink") + +在项目的常规设置下,您可以找到与项目功能有关的所有内容. + +### General project settings[](#general-project-settings "Permalink") + +调整项目的名称,描述,头像, [默认分支](../repository/branches/index.html#default-branch)和主题: + +[![general project settings](img/743ce9a40d40e900e957589a9024f116.png)](img/general_settings.png) + +项目描述还部分支持[标准 Markdown](../../markdown.html#standard-markdown-and-extensions-in-gitlab) . 您可以使用[强调](../../markdown.html#emphasis) , [链接](../../markdown.html#links)和[换行符](../../markdown.html#line-breaks)为项目描述添加更多上下文. + +#### Compliance framework[](#compliance-framework-premium "Permalink") + +您可以选择一个框架标签来标识您的项目具有某些合规性要求或需要其他监督. 可用的标签包括: + +* GDPR-通用数据保护法规 +* HIPAA-健康保险可移植性和责任法案 +* PCI-DSS-支付卡行业数据安全标准 +* SOC 2-服务组织控制 2 +* SOX-萨班斯-奥克斯利 + +### Sharing and permissions[](#sharing-and-permissions "Permalink") + +对于您的存储库,您可以设置功能,例如公共访问,存储库功能,文档,访问权限等等. 要从您的项目中执行此操作,请转到**"设置"** >" **常规"** ,然后展开" **可见性","项目功能","权限"**部分. + +现在,您可以更改[项目可见性](../../../public_access/public_access.html) . 如果将" **项目可见性"**设置为公开,则可以将某些功能的访问权限限制为" **仅项目成员"** . 此外,您可以选择[允许用户请求访问权限](../members/index.html#project-membership-and-requesting-access)的选项. + +**警告:**如果[降低项目的可见性级别](../../../public_access/public_access.html#reducing-visibility) ,则该操作将取消该项目的所有分支的链接. + +使用开关启用或禁用以下功能: + +| Option | 更多访问限制选项 | Description | +| --- | --- | --- | +| **Issues** | ✓ | 激活 GitLab 问题跟踪器 | +| **Repository** | ✓ | Enables [repository](../repository/) functionality | +| **合并请求** | ✓ | 启用[合并请求](../merge_requests/)功能; 另请参阅[合并请求设置](#merge-request-settings) | +| **Forks** | ✓ | Enables [forking](../index.html#fork-a-project) functionality | +| **Pipelines** | ✓ | Enables [CI/CD](../../../ci/README.html) functionality | +| **集装箱登记处** |   | 为您的 Docker 映像激活[注册表](../../packages/container_registry/) | +| **Git 大文件存储** |   | 允许使用[大文件](../../../topics/git/lfs/index.html#git-large-file-storage-lfs) | +| **Packages** |   | Supports configuration of a [package registry](../../../administration/packages/index.html#gitlab-package-registry-administration-premium-only) functionality | +| **Wiki** | ✓ | 启用单独的[文档](../wiki/)系统 | +| **Snippets** | ✓ | Enables [sharing of code and text](../../snippets.html) | +| **Pages** | ✓ | 允许您[发布静态网站](../pages/) | +| **指标仪表板** | ✓ | 控制对[指标仪表板的](../integrations/prometheus.html)访问 | + +一些功能取决于其他功能: + +* 如果禁用" **问题"**选项,则 GitLab 还将删除以下功能: + * **发行板** + * [**服务台**](#service-desk-starter)**注意:**禁用" **问题"**选项后,您仍然可以从合并请求访问**里程碑** . +* 此外,如果您同时禁用**Issues**和**Merge Requests** ,则将无法再访问: + * **标签** + * **大事记** +* 如果禁用**存储库**功能,GitLab 还将为您的项目禁用以下功能: + * **合并请求** + * **流水线** + * **集装箱登记处** + * **Git 大文件存储** + * **配套** +* 指标仪表板访问要求同时阅读项目环境和部署. 有权访问指标仪表板的用户还可以访问环境和部署. + +#### Disabling email notifications[](#disabling-email-notifications "Permalink") + +项目所有者可以通过选中" **禁用电子邮件通知"**复选框来**禁用**与项目相关的所有[电子邮件通知](../../profile/notifications.html#gitlab-notification-emails) . + +### Merge request settings[](#merge-request-settings "Permalink") + +设置项目的合并请求设置: + +* 设置合并请求方法(合并提交, [快速合并](../merge_requests/fast_forward_merge.html) ). +* 添加合并请求[描述模板](../description_templates.html#description-templates) . +* Enable [merge request approvals](../merge_requests/merge_request_approvals.html). +* Enable [merge only if pipeline succeeds](../merge_requests/merge_when_pipeline_succeeds.html). +* Enable [merge only when all threads are resolved](../../discussions/index.html#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved). +* Enable [`delete source branch after merge` option by default](../merge_requests/getting_started.html#deleting-the-source-branch) +* Configure [suggested changes commit messages](../../discussions/index.html#configure-the-commit-message-for-applied-suggestions) + +[![project's merge request settings](img/813cda0881e353d15eed9ca9417104f1.png)](img/merge_requests_settings.png) + +### Service Desk[](#service-desk-starter "Permalink") + +为您的项目启用[Service Desk](../service_desk.html)以提供客户支持. + +### Export project[](#export-project "Permalink") + +了解如何在 GitLab 中[导出项目](import_export.html#importing-the-project) . + +### Advanced settings[](#advanced-settings "Permalink") + +在这里,您可以运行内部管理,存档,重命名,传输, [删除派生关系](#removing-a-fork-relationship)或删除项目. + +#### Archiving a project[](#archiving-a-project "Permalink") + +归档项目后,所有用户都将其设为只读,并表明该项目已不再处于主动维护状态. 也可以取消归档已归档的项目. 只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)归档项目. + +归档项目后,存储库,问题,合并请求和所有其他功能均为只读. 归档的项目也隐藏在项目列表中. + +归档项目: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在" **存档项目"**部分中,单击" **存档项目"**按钮. +4. 根据要求确认操作. + +#### Unarchiving a project[](#unarchiving-a-project "Permalink") + +取消归档项目会删除对项目的只读限制,并使其在项目列表中可用. 只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)取消归档项目. + +要查找已归档的项目: + +1. 以具有项目所有者或管理员权限的用户身份登录到 GitLab. +2. 如果你: + * 拥有项目的 URL,在浏览器中打开项目的页面. + * 没有项目的 URL:1.单击**项目>浏览项目** . 1.在" **排序项目"**下拉框中,选择" **显示存档的项目"** . 1.在**按名称过滤**字段中,提供项目的名称. 1.单击指向项目的链接以打开其" **详细信息"**页面. + +接下来,要取消归档项目: + +1. 导航到您项目的 **设置>常规** . +2. Under **Advanced**, click **Expand**. +3. 在" **取消存档项目"**部分中,单击" **取消存档项目"**按钮. +4. 根据要求确认操作. + +#### Renaming a repository[](#renaming-a-repository "Permalink") + +**注意:**只有项目维护者和管理员用户才[有权](../../permissions.html#project-members-permissions)重命名存储库. 不要与项目名称混淆,也可以从[常规项目设置中](#general-project-settings)进行更改. + +项目的存储库名称定义其 URL(您用于通过浏览器访问该项目的 URL)及其在安装 GitLab 的文件磁盘上的位置. + +要重命名存储库: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在"重命名存储库"下,根据您的喜好更改"路径". +4. Hit **重命名项目**. + +请记住,这可能会带来意想不到的副作用,因为使用旧网址的每个人都无法推送或拉动. 阅读有关[重命名存储库时重定向](../index.html#redirects-when-changing-repository-paths)发生的更多[信息](../index.html#redirects-when-changing-repository-paths) . + +#### Transferring an existing project into another namespace[](#transferring-an-existing-project-into-another-namespace "Permalink") + +**注意:**只有项目所有者和管理员用户才[有权](../../permissions.html#project-members-permissions)传输项目. + +在以下情况下,您可以将现有项目转移到[组中](../../group/index.html) : + +* 您至少对该组具有**维护者** [权限](../../permissions.html#project-members-permissions) . +* 您至少是要转让的项目的**所有者** . +* 将项目转移到的组必须允许创建新项目. + +转移项目: + +1. 导航到您项目的 **设置>常规** . +2. 在" **高级"下** ,单击" **展开"** . +3. 在"传输项目"下,选择要将项目传输到的名称空间. +4. 按照说明键入项目路径,以确认传输. + +完成后,您将被带到新项目的名称空间. 此时,请阅读[从旧项目到新项目](../index.html#redirects-when-changing-repository-paths)的[重定向](../index.html#redirects-when-changing-repository-paths)发生了什么. + +**注意:**如果需要,GitLab 管理员可以使用管理界面将任何项目移动到任何名称空间. + +#### Remove a project[](#remove-a-project "Permalink") + +**注意:**只有项目所有者和管理员才[有权](../../permissions.html#project-members-permissions)删除项目. + +删除项目: + +1. 导航到您的项目,然后选择 **设置>常规>高级** . +2. 在"删除项目"部分中,单击" **删除项目"**按钮. +3. 根据要求确认操作. + +这个动作: + +* 删除包含所有相关资源(问题,合并请求等)的项目. +* 从[Premium 或 Silver](https://about.gitlab.com/pricing/)或更高级别的[GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) ,组管理员可以[将](../../group/index.html#enabling-delayed-project-removal-premium)组内的项目[配置](../../group/index.html#enabling-delayed-project-removal-premium)为在延迟一段时间后删除. 启用后,实际删除将在[实例设置中](../../admin_area/settings/visibility_and_access_controls.html#default-deletion-adjourned-period-premium-only)指定的天数后发生. + +**Warning:** The default behavior of [Delayed Project deletion](https://gitlab.com/gitlab-org/gitlab/-/issues/32935) in GitLab 12.6 was changed to [Immediate deletion](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) in GitLab 13.2. + +#### Restore a project[](#restore-a-project-premium "Permalink") + +在 GitLab 12.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/32935) . + +要还原标记为删除的项目: + +1. 导航到您的项目,然后选择 **设置>常规>高级** . +2. 在"还原项目"部分中,单击" **还原项目"**按钮. + +#### Removing a fork relationship[](#removing-a-fork-relationship "Permalink") + +分叉是为您不是会员[的项目](../repository/forking_workflow.html)做[贡献](../repository/forking_workflow.html)的好方法. 如果您想自己使用 fork,而无需将[合并请求](../merge_requests.html)发送到上游项目,则可以安全地删除 fork 关系. + +**注意:**删除后,将无法恢复派生关系. 您将不再能够将合并请求发送到源,并且如果有人分叉了您的项目,他们的分支也将失去关系. + +为此: + +1. 导航到项目的**设置>常规>高级** . +2. 在" **删除分叉关系"下** ,单击同样标记的按钮. +3. 按照说明键入项目的路径,以确认操作. + +**注意:**只有项目所有者[有权](../../permissions.html#project-members-permissions)删除派生关系. + +## Operations settings[](#operations-settings "Permalink") + +### Error Tracking[](#error-tracking "Permalink") + +配置错误跟踪以[在 GitLab 中](../operations/error_tracking.html)发现和查看[Sentry 错误](../operations/error_tracking.html) . + +### Jaeger tracing[](#jaeger-tracing-ultimate "Permalink") + +添加 Jaeger 服务器的 URL,以使您的用户可以[从 GitLab 轻松访问 Jaeger UI](../../../operations/tracing.html) . + +### Status Page[](#status-page "Permalink") + +[添加存储凭据](../status_page/#syncing-incidents-to-the-status-page)以启用将公共问题同步到已[部署状态页面的功能](../status_page/#status-page-project) . \ No newline at end of file diff --git "a/docs/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" "b/docs/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" new file mode 100644 index 0000000000000000000000000000000000000000..0430ed015ff22d9860362dc188dbd0c5f948e28c --- /dev/null +++ "b/docs/\351\242\204\347\225\231\345\221\275\345\220\215\347\251\272\351\227\264.md" @@ -0,0 +1,85 @@ +# 预留命名空间[](#预留命名空间 "Permalink") + +并非所有项目和组名都被允许,因为它们会与 GitLab 使用的现有路由冲突. + +有关不允许用作组名或项目名的单词的列表,请参阅`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[](#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[](#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 diff --git "a/docs/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" "b/docs/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..82f1d5d62a08f32b403ebd001a1944821c66a5c1 --- /dev/null +++ "b/docs/\351\253\230\347\272\247\345\205\250\345\261\200\346\220\234\347\264\242.md" @@ -0,0 +1,49 @@ +# 高级全局搜索[](#高级全局搜索 "Permalink") + +版本历史 + +* 在 GitLab [Starter](https://about.gitlab.com/pricing/) 8.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/109) . + +**GitLab.com 的可用性:**高级全局搜索(由 Elasticsearch 支持)在 GitLab.com 上尚不可用. 它将在 2020 年第三季度为所有付费群体逐步启用.请[遵循此史诗](https://gitlab.com/groups/gitlab-com/-/epics/649) ,以获取时间表上的最新更新. + +利用 Elasticsearch 在整个 GitLab 实例上进行更快,更高级的代码搜索. + +这是用户文档. 要安装和配置 Elasticsearch,请访问[管理员文档](../../integration/elasticsearch.html) . + +## Overview[](#overview "Permalink") + +GitLab 中的 Advanced Global Search 是一项功能强大的搜索服务,可以节省您的时间. 现在,您可以在其他团队中搜索可以为您自己的项目提供帮助的代码,而不必创建重复的代码和浪费时间. + +manbetx 客户端打不开利用[Elasticsearch](https://www.elastic.co/elasticsearch/)的搜索功能,并在搜索时启用它: + +* Projects +* Repositories +* Commits +* Issues +* 合并要求 +* Milestones +* 注释(评论) +* Snippets +* Wiki + +## Use cases[](#use-cases "Permalink") + +高级全局搜索在各种情况下都非常有用. + +### Faster searches[](#faster-searches "Permalink") + +如果您要处理大量数据,并希望保持 GitLab 的快速搜索,高级全局搜索将帮助您实现这一目标. + +### Promote innersourcing[](#promote-innersourcing "Permalink") + +您的公司可能由许多不同的开发人员团队组成,每个开发人员团队都有各自的团队来托管各种项目. 您的某些应用程序可能会相互连接,因此您的开发人员需要立即在整个 GitLab 实例中进行搜索并找到他们搜索的代码. + +## Searching globally[](#searching-globally "Permalink") + +像以前一样使用搜索,GitLab 会向您显示您有权访问的每个项目中的匹配代码. + +[![Advanced Global Search](img/a3626522e1409168b7c977ecebbaee6e.png)](img/advanced_global_search.png) + +您还可以使用提供一些有用查询的[高级语法搜索](advanced_search_syntax.html) . + +**注意:** Elasticsearch 仅具有默认分支的数据. 这意味着,如果您转到存储库树并将分支从默认分支切换到其他分支,那么即使启用了 Elasticsearch,常规搜索也会提供搜索结果页面中的"代码"选项卡. \ No newline at end of file diff --git "a/docs/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" "b/docs/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..664ada10499551223100b8601870cbb3c0a9cf8c --- /dev/null +++ "b/docs/\351\253\230\347\272\247\350\257\255\346\263\225\346\220\234\347\264\242.md" @@ -0,0 +1,57 @@ +# 高级语法搜索[](#高级语法搜索 "Permalink") + +版本历史 + +* 在[GitLab Enterprise Starter](https://about.gitlab.com/pricing/) 9.2 中引入 + +**GitLab.com 可用性:**自 2020-07-10 起,在 GitLab.com 上启用了 Bronze 及更高版本的 Advanced Global Search(由 Elasticsearch 支持). + +使用高级查询获得更具针对性的搜索结果. + +这是用户文档. 要安装和配置 Elasticsearch,请访问[管理员文档](../../integration/elasticsearch.html) . + +## Overview[](#overview "Permalink") + +"高级语法搜索"是" [高级全局搜索"](advanced_global_search.html)的子集,如果您想要更具体的搜索结果,可以使用它. + +Advanced Global Search 仅支持搜索[默认分支](../project/repository/branches/index.html#default-branch) . + +## Use cases[](#use-cases "Permalink") + +例如,假设您开发的产品依赖于另一个组中托管的另一种产品的代码. + +由于在您的 GitLab 实例下托管了数百个不同的项目,因此您需要搜索结果尽可能地高效. 您对要查找的内容有感觉(例如,函数名),但是同时您也不太确定. + +在这种情况下,在查询中使用高级搜索语法将产生更好的结果. + +## Using the Advanced Syntax Search[](#using-the-advanced-syntax-search "Permalink") + +高级语法搜索支持带有前缀,布尔运算符等的模糊或精确搜索查询. + +可以在[Elasticsearch 文档中](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/query-dsl-simple-query-string-query.html#_simple_query_string_syntax)找到完整的详细信息,但是这里有一个快速指南: + +* 搜索以任何顺序搜索查询中的所有单词,例如:搜索`display bug`问题将以任何顺序返回匹配这两个单词的所有问题. +* 要查找确切的词组(仍然适用词干),请使用双引号: `"display bug"` +* 要查找未提及显示的错误,请使用`-` : `bug -display` +* 要查找显示或声音中的错误,请使用`|` : `bug display | sound` `bug display | sound` +* 要组术语一起,使用括号: `bug | (display +sound)` `bug | (display +sound)` +* 要匹配部分单词,请使用`*` : `bug find_by_*` +* 要查找包含这些符号之一的术语,请使用`\` : `argument \-last` + +### Syntax search filters[](#syntax-search-filters "Permalink") + +高级语法搜索还支持使用过滤器. 可用的过滤器是: + +* filename:按文件名过滤. 您可以使用 glob( `*` )运算符进行模糊匹配. +* path:按路径过滤. 您可以使用 glob( `*` )运算符进行模糊匹配. +* 扩展名:按扩展名过滤文件名. 请写扩展名,不要带引号. 仅完全匹配. + +要使用它们,只需将它们添加到您的查询格式`<filter_name>:<value>`没有冒号之间的空格( `:` )和值. + +Examples: + +* 查找包含任何名为`hello_world.rb`内容的文件: `* filename:hello_world.rb` +* 查找一个名为`hello_world`的文件,其中包含文本`whatever` : `whatever filename:hello_world` +* 在扩展名为`.rb`文件中查找文本" def create": `def create extension:rb` +* 在名为`encryption`的文件夹中的文件内查找文本`sha` : `sha path:encryption` +* 查找任何以`hello`开头的文件,其中包含`world`并带有`.js`扩展名: `world filename:hello* extension:js` \ No newline at end of file