最近在使用 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 就現身了。
文章列表