GitLab:解决Merge Request中Commits不更新的问题

最近在使用 GitLab 的 Merge Requests 功能进行 Code Review 。操作流程是这样的:

1)开发人员A要给一个项目增加一个新功能,先在这个项目上创建一个 Git 分支。

2)开发完成后,git push 到这个分支。

3)然后在 Merge Requests 中创建一个 Merge Request ,然后指定开发人员B进行 Code Review。

4)开发人员B在 Code Review 中发出现了问题,需要开发人员A修改代码。

5)开发人员A修改好代码并 push 到这个分支。

6)开发人员B继续进行 Code Review,如果没发现问题,就“Accept Merge Request”将这个分支合并到主干上。

我们在 Code Review 的过程中,在第 5-6 步遇到了一个奇怪问题:开发人员A在 push 到分支之后,开发人员B在 Code Review 时在 Merge Request 中看不到最新的 Commit。

如上图,在 Merge Request 中只看到 6 个 Commits ,实际却有 7 个,而在 GitLab 的 Commits 页面也能看到 7 个。

当时束手无策。后来,关闭这个 Merge Request ,重新创建新的 Merge Request,才看到最新的 Commit 。但是再次 git commit 并 push 之后,依然看不到最新的 commit 。

这个问题影响了 Code Review 的正常进行,很是郁闷。今天着手解决这个问题,先尝试将 GitLab 升级至最新版(服务器操作系统是 CentOS)。

升级步骤如下:

1)在 https://packages.gitlab.com/gitlab/gitlab-ce 找到最新 GitLab 的 rpm 包下载地址,并用 wget 下载下来。

2)停止 GitLab 相关服务:

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop nginx

如果想备份数据库,可以使用下面的命令:

sudo gitlab-rake gitlab:backup:create

3)安装新版 GitLab

sudo rpm -Uvh gitlab-x.x.x_xxx.rpm

4)刷新配置并重启 GitLab

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

升级之后,问题依旧。。。

之后,试了试 2 个检查 GitLab 状态的命令:

sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true

第1个命令执行后,显示状态都正常。

第2个命令执行后,出现下面的错误:

2/9 ... rake aborted!
Errno::ENOENT: No such file or directory @ realpath_rec - /gitlab/repos/repositories/CNBlogsMsg.git/hooks

一看到 hooks ,眼前一亮。hooks 文件夹不存在,这样每次 git push 操作,GitLab 根本不知道(GitLab 是通过 hooks 文件夹中的脚本获知每次 push 操作的)。所以,Merge Request 中自然就看不到最新的 Commits 。

那为什么 hooks 文件夹不存在呢?突然想到,这个项目的代码库是迁移到 GitLab 中的(详见在服务器端将现有Git项目导入GitLab),不是在 GitLab 中创建的,自然就没有 GitLab 所需的 hooks 文件夹。然后看了一下其他在 GitLab 中创建的项目,果然有 hooks 文件夹。

知道了原因,解决起来就很简单了——从其他项目中将 hooks 文件夹复制到这个项目。

重新 git push 之后,最新的 Commit 就现身了。

时间: 2024-10-27 04:59:31

GitLab:解决Merge Request中Commits不更新的问题的相关文章

Gitlab Merge Request Builder Plugin 配置小记

以前在给一些开源项目贡献代码的时候,在github上一提交pull request或者提交的分支代码更新了的时候,jenkins就会自动把代码进行merge并且运行单元测试,当时看了心里就2个字: NB! 那个时候心里就想,啥时候我也得弄这么一个高大上的玩意儿.随着 gitlab 在工作中的逐渐使用,这个想法越来越强烈.上周末搜来搜去,发现jenkins还真有一款针对gitlab的merge request的插件:Gitlab Merge Request Builder Plugin 当时就心痒

解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的问题

在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止XSS攻击,asp.net的请求验证是默认启动的.这个给出各个版本.net的解决方法.asp.net 2.0 通常解决办法方案一:将.aspx文件中的page项添加ValidateRequest="false" ,如下:<%@ Page ValidateRequest="fa

基于Oracle数据库锁机制,解决集群中的并发访问问题

1.需求 应用场景是这样的: 使用Oracle数据保存待办任务,使用状态字段区分任务是否已经被执行.多个Worker线程同时执行任务,执行成功或失败后,修改状态字段的值. 假设数据库表结构如下所示. create table Task( id varchar2(32), name varchar2(32), flag varchar2(1), worker varchar2(32) ); flag 可取的值包括:0-待办,1-已办,-1-失败待重试. 需要避免的问题: 多个Worker同时工作时

Request中的各种方法

前言 Request中方法众多,对于Java Web程序员来说,种种方法都会在工作中常常用到.Request由于不是JDK的一部分,这些方法的用法也没有专门的API可以查,所以在工作中遇到Request中方法的时候,所以常常感到困惑,因为觉得网上写的不清楚,自己又懒得写一个Web测试程序.这篇文章,一次性把Request中的各个方法的返回写在这里并做一个详细的总结,以备以后工作中用到可以随时查看. 示例 为了让后台可以取到queryString(这个专门在get和post的区别的文章中会讲解的)

解决vs解决方案中的类文件没有正常层级显示的问题

VS2013在使用svn进行文件的下载时,因为某些原因,更新完后,功能节点类文件在解决方案列表中并没有正常的按层级显示,而是显示在了同一层次上.造成这样的原因,无可追溯,但是解决这个问题的办法则简单可循. 在VS2013中建立项目时,VS会自动产生 .csproj 文件,这是C#的工程文件,其中记录了与工程有关的相关信息,例如包含的文件,程序的版本,所生成的文件的类型和位置的信息等. 打开工程文件,发现没有正常显示的类文件信息有缺失,于是按照正常显示的类的文件信息,比照补充后,保存.重新加载项目

某墙尼妹,用个Response.Filter来解决StackExchange.Exceptional中google cdn的问题

某墙墙了古古路,一些开源的东东里用了古古路CDN,比如Exceptional,Opserver ,导致服务要么慢要么用不了 必须要替换之 Exceptional就只要用Response.Filter替换个页面了,因为自己维护个版本还要定期合并什么的,操心 internal class ResponseStream : MemoryStream { #region ctor private Stream Output { get; set; } public HttpContextBase Con

WinForm应用程序中实现自动更新功能

WinForm应用程序中实现自动更新功能 编写人:左丘文 2015-4-20 近来在给一客户实施ECM系统,但他们使用功能并不是我们ECM制造版提供的标准功能,他们要求对系统作一些定制功能,为了避免因程序的bug而带来频繁让用户更新程序的不良影响,就想给ECM增加一个winform自动更新功能,今天在这里,我想与大家一起分享代码,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧.   1. 首先我们在这里先分析一下其它程序猿的一些基本情况: 相信有许多程序猿都喜欢用Wi

用 OpenSessionInViewInterceptor 的思路解决 Spring框架中的Hib

众所周知, 为了解决 Hibernate Lazy 问题, Spring 中引入了 OpenSessionInViewInterceptor, 这样虽然解决了页面上的 Lazy Load 问题,却增加了各层之间的偶合性, 如果一个 Lazy 的 Collection 在页面上可以被正确的 load, 但是如果请求不是来自于 HttpServletRequest (比如在 TestCase 或 Service 中希望获取 lazy 的属性), 一般会导致两种错误: 代码 [java] view p

SQL中使用UPDATE更新数据时一定要记得WHERE子句

我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 mysql 中,我们可以设置sql_safe_updates 这个自带的参数来解决,,当该参数开启的情况下,我们必须在 UPDATE 语句后携带 WHERE 条件,否则就会报错.set sql_safe_updates=1; 表示开启该参数.下面是开启sql_safe_updates参数后不带  WHE