|
|
# 评审及管理合并请求[](#评审及管理合并请求 "Permalink")
|
|
|
|
|
|
合并请求是在 GitLab 项目中更改文件的主要方法. 通过[创建并提交合并请求](creating_merge_requests.html)来提出更改,然后将其审核并接受(或拒绝).
|
|
|
合并请求是在项目中更改文件的主要方法,通过[创建并提交合并请求](creating_merge_requests.html)来提出更改,然后将其审核并接受(或拒绝)。
|
|
|
|
|
|
## View project merge requests[](#view-project-merge-requests "Permalink")
|
|
|
## 评审合并请求[](#view-project-merge-requests "Permalink")
|
|
|
|
|
|
导航到" **项目">"合并请求",**以查看项目中的所有**合并请求** .
|
|
|
打开 **项目>合并请求**列表,可以查看项目中的所有**合并请求**,并且您可以快速按打开和关闭可用的选项卡来进行过滤,您还可以[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists)。
|
|
|
|
|
|
当您访问项目的合并请求时,GitLab 会将它们显示在列表中,并且您可以使用可用的选项卡来快速按打开和关闭进行过滤. 您还可以[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) .
|
|
|
[![Project merge requests list view](img/project_merge_requests_list_view.png)](img/project_merge_requests_list_view.png)
|
|
|
|
|
|
[![Project merge requests list view](img/252e40c4dc029a21eb939cb40f715d34.png)](img/project_merge_requests_list_view.png)
|
|
|
## 半线性历史合并请求[](#semi-linear-history-merge-requests "Permalink")
|
|
|
|
|
|
## 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) .
|
|
|
## 查看不同版本文件变更[](#view-changes-between-file-versions "Permalink")
|
|
|
|
|
|
[![Group Issues list view](img/1c96e8d94988240b7dc68ae02dbea405.png)](img/group_merge_requests_list_view.png)
|
|
|
**更改**选项卡位于主要合并请求详细信息下方,并且在讨论选项卡旁边,显示了分支或提交之间文件的更改。这种对文件更改的视图也称为**diff** ,默认情况下,差异视图将合并请求分支中的文件与目标分支中的文件进行比较。
|
|
|
|
|
|
## Semi-linear history merge requests[](#semi-linear-history-merge-requests "Permalink")
|
|
|
Diff 视图包含以下内容:
|
|
|
|
|
|
将为每个合并创建一个合并提交,但是只有在可能进行快速合并的情况下才合并分支. 这样可以确保如果合并请求构建成功,则合并后目标分支构建也将成功.
|
|
|
|
|
|
导航到项目的设置,在" **合并请求:合并"方法**下选择" **使用半线性历史** **合并合并"**选项,然后保存更改.
|
|
|
|
|
|
## 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")
|
|
|
* 文件讨论显示/隐藏开关,在查看用于内联评论时非常有用
|
|
|
* 在合并请求的分支中编辑文件
|
|
|
* 显示完整文件,方便您要查看上下文中文件其余部分的更改
|
|
|
* 查看当前提交时的文件
|
|
|
* 对于有更改的行,将突出显示详细的更改内容
|
|
|
|
|
|
在" **更改"**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异. 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件.
|
|
|
[![Example screenshot of a source code diff](/docs/img/merge_request_diff_v13_2.png)](/docs/img/merge_request_diff_v13_2.png)
|
|
|
|
|
|
[![Merge request diff file navigation](img/65770b50cd2119e84c6a852b44cf403d.png)](img/merge_request_diff_file_navigation.png)
|
|
|
### 合并请求 diff 导航[](#merge-request-diff-file-navigation "Permalink")
|
|
|
|
|
|
### File-by-file diff navigation[](#file-by-file-diff-navigation "Permalink")
|
|
|
在 **更改**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异。 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件。
|
|
|
|
|
|
版本历史
|
|
|
[![Merge request diff file navigation](/docs/img/merge_request_diff_file_navigation.png)](docs/img/merge_request_diff_file_navigation.png)
|
|
|
|
|
|
* 在 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) .
|
|
|
### 逐个文件查看 diff[](#file-by-file-diff-navigation "Permalink")
|
|
|
|
|
|
对于较大的合并请求,有时一次查看单个文件可能会很有用. 要启用,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"首选项"** . 向下滚动到" **行为"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用.
|
|
|
对于较大的合并请求,有时一次查看单个文件可能会很有用。要启用单个文件 diff 导航时,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"偏好设置"** , 向下滚动到" **个性化"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用.
|
|
|
|
|
|
从那里,在查看合并请求的" **更改"**选项卡时,一次只能看到一个文件. 然后,您可以单击按钮上**一个**和**下一个**以查看其他已更改的文件.
|
|
|
|
|
|
[![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` ,以忽略任何空格更改.
|
|
|
[![File-by-file diff navigation](/docs/img/file_by_file_v13_2.png)](docs/img/file_by_file_v13_2.png)
|
|
|
|
|
|
## Perform inline code reviews[](#perform-inline-code-reviews "Permalink")
|
|
|
### 合并请求提交导航[](#merge-requests-commit-navigation "Permalink")
|
|
|
|
|
|
在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/13950) .
|
|
|
要在合并请求中的**提交**之间无缝导航,请从 **提交**选项卡中,单击其中一个提交以打开单提交视图,之后您可以通过单击页面右上角的**Prev**和**Next**按钮或使用`X`和`C`键盘快捷键在提交之间进行切换。
|
|
|
|
|
|
GitLab 提供了一种在合并请求中更改文件的任何部分中保留注释的方法. 为此,请在"合并请求"差异 UI 的装订线中单击**…**按钮以展开差异行并留下评论,就像更改行一样.
|
|
|
### 合并请求 diff 时展开[](#incrementally-expand-merge-request-diffs "Permalink")
|
|
|
|
|
|
[![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) ,您将能够看到:
|
|
|
### 隐藏空白更改[](#ignore-whitespace-changes-in-merge-request-diff-view "Permalink")
|
|
|
|
|
|
* 合并前和合并后管道以及环境信息(如果有).
|
|
|
* 正在进行哪些部署.
|
|
|
如果单击**隐藏空白更改**按钮,则可以看到没有空白更改的差异(如果有的话),在查看某个提交的页面上也支持这个功能。
|
|
|
|
|
|
如果存在[环境](../../../ci/environments/index.html)并且已将应用程序成功部署到该环境,则还将显示已部署的环境以及指向 Review App 的链接.
|
|
|
> **提示:**您可以在合并请求的差异页面上附加`?w=1` ,以忽略任何空格更改。
|
|
|
|
|
|
### Post-merge pipeline status[](#post-merge-pipeline-status "Permalink")
|
|
|
## 行内代码评审[](#perform-inline-code-reviews "Permalink")
|
|
|
|
|
|
合并请求合并后,可以看到合并请求合并到的分支的合并后管道状态. 例如,当合并请求合并到 master 分支中,然后触发到暂存环境的部署时.
|
|
|
我们提供了一种在合并请求中更改文件的任何部分中进行注释讨论的方法,可以在"合并请求"差异页面左侧单击**评论**按钮以展开差异行并留下评论,就像更改行一样。
|
|
|
|
|
|
将显示正在进行的部署,以及环境的部署/部署状态. 如果是第一次部署分支,则该链接将返回`404`错误,直到完成. 在部署期间,停止按钮将被禁用. 如果管道无法部署,则部署信息将被隐藏.
|
|
|
[![Comment on any diff file line](/docs/img/comment-on-any-diff-line.png)](/docs/img/comment-on-any-diff-line.png)
|
|
|
|
|
|
[![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")
|
|
|
## 关联功能[](#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. 合并请求被重新打开
|
|
|
|
|
|
要正确检索管道状态,请再次关闭并重新打开"合并请求".
|
|
|
| [批量编辑合并请求](../project/bulk_edit.md) | 同时更新多个合并请求的属性 |
|
|
|
| [Cherry-pick 变更](cherry_pick.md) | 只需在合并的合并请求或提交中单击**Cherry-pick**按钮,即可在页面中 Cherry-pick 任何**选择** |
|
|
|
| [快进合并](fast_forward.md) | 有关线性 Git 历史记录以及接受合并请求而不创建合并提交的方法 |
|
|
|
| [合并请求版本](versions.md) | 选择并比较合并请求差异的不同版本 |
|
|
|
| [解决冲突](resolve_conflicts.md) |可以在界面中来解决某些合并请求冲突 |
|
|
|
| [Revert 更改](revert.md) | 从合并请求中的任何提交还原更改 |
|
|
|
|
|
|
## Tips[](#tips "Permalink")
|
|
|
|
|
|
以下是一些技巧,可帮助您在命令行中更有效地处理合并请求.
|
|
|
以下是一些可帮助您在命令行中更有效地处理合并请求的 Tips:
|
|
|
|
|
|
> **注意:**此部分将来可能会在其自己的文档中移动.
|
|
|
### 本地合并合并请求[](#checkout-merge-requests-locally "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")
|
|
|
#### 通过别名设置签出合并请求[](#checkout-locally-by-adding-a-git-alias "Permalink")
|
|
|
|
|
|
将以下别名添加到`~/.gitconfig` :
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
[alias]
|
|
|
mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -
|
|
|
```
|
|
|
|
|
|
现在,您可以从任何存储库和任何远程签出特定的合并请求. 例如,要从`origin`远程服务器签出 ID 为 5 的合并请求(如 GitLab 所示),请执行以下操作:
|
|
|
现在,您可以从任何代码仓库和任何远程签出特定的合并请求,例如,执行以下操作可以从`origin`远程服务器签出 ID 为 5 的合并请求请:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
git mr origin 5
|
|
|
```
|
|
|
|
|
|
这会将合并请求提取到本地`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")
|
|
|
#### 通过在 config 文件中添加代码仓库签出[](#checkout-locally-by-modifying-gitconfig-for-a-given-repository "Permalink")
|
|
|
|
|
|
在`.git/config`文件中找到适用于 GitLab 遥控器的部分. 看起来像这样:
|
|
|
在`.git/config`文件中找到适用于 remote 的部分,找到类似下面的这段配置:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
[remote "origin"]
|
|
|
url = https://gitlab.com/gitlab-org/gitlab-foss.git
|
|
|
url = https://codechina.csdn.net/codechina/awsome-project.git
|
|
|
fetch = +refs/heads/*:refs/remotes/origin/*
|
|
|
```
|
|
|
|
|
|
您可以使用以下方式打开文件:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
git config -e
|
|
|
```
|
|
|
|
|
|
现在,将以下行添加到上面的部分:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
|
|
|
```
|
|
|
|
|
|
最后,它应如下所示:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
[remote "origin"]
|
|
|
url = https://gitlab.com/gitlab-org/gitlab-foss.git
|
|
|
url = https://codechina.csdn.net/codechina/awsome-project.git
|
|
|
fetch = +refs/heads/*:refs/remotes/origin/*
|
|
|
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
|
|
|
```
|
|
|
|
|
|
现在,您可以获取所有合并请求:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
git fetch origin
|
|
|
|
|
|
...
|
|
|
From https://gitlab.com/gitlab-org/gitlab-foss.git
|
|
|
From https://codechina.csdn.net/codechina/awsome-project.git
|
|
|
* [new ref] refs/merge-requests/1/head -> origin/merge-requests/1
|
|
|
* [new ref] refs/merge-requests/2/head -> origin/merge-requests/2
|
|
|
...
|
... | ... | @@ -254,8 +152,8 @@ From https://gitlab.com/gitlab-org/gitlab-foss.git |
|
|
|
|
|
并检查特定的合并请求:
|
|
|
|
|
|
```
|
|
|
```markdown
|
|
|
git checkout origin/merge-requests/1
|
|
|
```
|
|
|
|
|
|
以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成. |
|
|
\ No newline at end of file |
|
|
以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成。 |
|
|
\ No newline at end of file |