Git 怎么 review 一个硕大的 Pull Request 或者 Merge Request

hiveer · 2016年06月22日 · 最后由 pynix 回复于 2016年06月24日 · 11643 次阅读

最近在日常工作中遇到了这样一个问题 同事提交了一个硕大的 MR,超出了 Gitlab 的处理极限……然后他就给我忽略了 23 个 commits。可是,尼玛,我要 review 啊!怎么搞呢?

  1. 我可以到这个相应的 branch 下面去根据 commit 时间以及 commit 的 message 找到起始的 commit,然后一个一个 review
  2. 我可以通过命令 git log 找出跟 master 不一样的 commits,然后用 git show {commit}, 一个一个 review
  3. 或者我也可以通过 git diff 一下找出所有的不同,然后慢慢看

我可以想到上面三种方式,但是可惜,都不是我想要的。 第一种方式简直就是人肉搜索啊,虽然不至于花很多时间,但是就是不爽 第二种方式看起来简单,但是我要先保存 git log 的 output,然后再手动一个一个的 copy 给 git show,这也太累了 第三种方式我觉得一次性给了我太东西了,一看就头昏啊

所以我就在寻思怎么搞?……? 对比上述三种方式,第二种最有改进前途。所以我就寻思怎么样把 git log 的输出一个一个传给 git show 通过无所不能的 Google Search,我得到了这样一个命令

git log --reverse --pretty=format:"%H" master...aclprod-456/richard | head -$c | tail -1

这里的c是一个 bash 的变量,我准备让它自增。上面的命令会按照时间顺序依次输出下一个 commit 的 Hash 值。 现在我就可以把这个值传给 git show 了

git show $(git log --reverse --pretty=format:"%H" master...aclprod-456/richard | head -$c | tail -1)

但是,我又想在浏览器看,怎么办?

((c+=1)) && open -a /Applications/Safari.app https://your/gitlab/repo/commit/$(git log --reverse --pretty=format:"%H" master...aclprod-456/richard | head -$c | tail -1)

OK,这样我就可以只需要轻敲两个键盘就能在浏览器慢慢 review 这个硕大的 MR 了。

==================================

不知道你们的日常是怎么处理类似问题的,欢迎吐槽!

单个文件太大了吧?23 个 Commits 不多呀

@huacnlee 这个 MR 有 123 个 commits,在 MR 里面只 load 了 100 个,23 个被 Gitlab 给 omitted 了。

哦,看错了,不过话说可以适当控制一下,工具解决不了的时候应该调整使用习惯

是的哦,我也觉得太大了,看也不好看,改多了也容易错。

@hooooopo 这个梗是什么?代码少就会认真 review,多了就不想看了,然后说 looks fine 么😂

#6 楼 @hiveer 难道不是么... 所以不要一次搞个大新闻!

@hooooopo 哈哈,虽然确实不想看,但是我正在努力的一个一个地看😂

变成 100+ 个 diff 然后再看?

#9 楼 @fcicq 你应该没读懂吧,我最后是一个一个的看 commit 的 change。

这不是你的错吧。

拖出他来吊打,打完再 review。

pr 的机制不就是控制质量么,会发生这种情况很明显对方习惯不好,据掉让他本地合并成一个 commit

#10 楼 @hiveer 是没完全明白。所以还是应该退回传统的邮件列表形式更好

#6 楼 @hiveer 经验教训,哈哈,太多看不过来了

gitlab 也和 github 一样支持 git checkout 切换到待 review 的分支的

Updated: 发现楼主没有做 review 和 CI 的集成

r 如果你在一个视 code review 如无物的团队,直接点 merge 就行了。国内很多团队的做法不就是这样么?

这就叫大了?来感受下 这个 PR

git diff hash1 hash2 有什么问题? 觉得不好看就用 cdiff

首先你并没有告诉我们,这 123 个 commits 是不是就应该是 123 个 commits,而不是,比如说 18 个 commits。

#16 楼 @u1440247613 跟风也要跟好的呀,对不

#19 楼 @msg7086 不是我在 coding 啊,我怎么知道呢,等我 review 完了,可能我就知道了

#15 楼 @nouse

gitlab 也和 github 一样支持 git checkout 切换到待 review 的分支的

这个什么意思呢,没用过

#22 楼 @hiveer 没用过就去查啊,Git Review 最可靠的还是用 Git 工具而不是浏览器,你都把代码下载到本地了,本地想怎么测试就怎么测试。

looks fine, 这个场面似曾相识哈哈

#17 楼 @jasl 这么大的 changes,看起来真是累死人啊

我们会要求工程师每天必须 merge 到 staging 一次以保证 CI build 是绿的并自动部署,避免过大的 MR。这样有几个好处:

  • Review MR 的人不会一脸懵逼。
  • staging 环境始终保持在一个有最新代码并且可测试的状态。
  • 工程师会在写之前更认真地思考架构,比如一个大的 feature 如何拆分成一个一个小的可以持续 deliver 的功能。

土成会玩。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号