许多人写了单元测试而且运行持续集成服务器来检查 pull requests,咱们还能够利用像 Danger 这样强大的工具。html
若是想要在最先期阻止一些常见的错误,咱们可使用 pre-commit hook。ios
注:原做者的朋友 Sami Samhuri 改善了他的脚本,本文也随着更新了。另外译文调整了一下结构,增长了对 pre-commit 的简要说明。最新的脚本在这里。git
有时候一些测试代码或者测试工具不该该提交到远程仓库,因此提交代码前的审查就颇有必要。Git 支持不少 hooks,hooks 是一些在 $GIT-DIR/hooks
目录中的脚本,由特定的事件触发执行。pre-commit hook 就是在提交以前触发,能够用来检查待提交代码是否有错误。这里能够查看到有关 git hooks 更详细的说明。github
你有提交过一些位置不对的视图,打算之后修复吗?shell
有时候 Xcode 过于热切,而且有多个显示器(视网膜vs非视网膜问题...),就很容易忽然把东西放错位置。bootstrap
我就作过。swift
用一个简单的 grep 扫描 interface builder 文件内容能够发现这些错位的视图:bash
模式:misplaced="YES"服务器
文件:Specs.swift .storyboard微信
像 Kiwi 或者 Quick 这样的代码库可让咱们作集中测试,这能够加快开发速度,颇有用。
可是它们绝对不该该被提交,不然可能无心中改变一些东西,形成其余全部测试都被禁用,还会隐藏一些严重的问题。
咱们须要在测试文件中找出 fdescribe / fit / fcontext 和其余相似的东西:
模式: (fdescribe|fit|fcontext|xdescribe|xit|xcontext)
文件: *Specs.swift
咱们只须要确认已暂存(staged)的改变中是否包含上面的东西就行了,不要检查全部文件,由于这在开发的时候会很烦人。
幸运的是,咱们能够把 git diff-index -p -M --cached HEAD
和 grep '^+'
一块儿使用。
最终的 pre-commit.sh 文件:
#!/usr/bin/env bash set -eu failed=0 test_pattern='\b(fdescribe|fit|fcontext|xdescribe|xit|xcontext)\b' if git diff-index -p -M --cached HEAD -- '*Tests.swift' '*Specs.swift' | grep '^+' | egrep "$test_pattern" >/dev/null 2>&1 then echo "COMMIT REJECTED for fdescribe/fit/fcontext/xdescribe/xit/xcontext." >&2 echo "Remove focused and disabled tests before committing." >&2 echo '----' >&2 git grep -E "$test_pattern" '*Tests.swift' '*Specs.swift' >&2 echo '----' >&2 failed=1 fi misplaced_pattern='misplaced="YES"' if git diff-index -p -M --cached HEAD -- '*.xib' '*.storyboard' | grep '^+' | egrep "$misplaced_pattern" >/dev/null 2>&1 then echo "COMMIT REJECTED for misplaced views. Correct them before committing." >&2 echo '----' >&2 git grep -E "$misplaced_pattern" '*.xib' '*.storyboard' >&2 echo '----' >&2 failed=1 fi exit $failed
你也能够在这里获取最新的脚本。这个脚本在命令行和 macOS git 客户端均可以使用。
大多数的应用都是由团队制做的,咱们就想到要在每一个 git 仓库中安装钩子 (git hook)。但这并非使用 git 的工做方式,那咱们该怎么作呢?答案:使用符号连接(symlinks)。
我负责过的大多数项目都有相似于 bootstrap script 的东西,用来加载 Carthage 或者作其余一些准备工做。
下面这个简单的启动脚本 (bootstrap script) 可让你在你的仓库里安装钩子 (git hook),使得整个团队保持同步变得简单。
#!/usr/bin/env bash # Usage: scripts/bootstrap set -eu ln -s ../../scripts/pre-commit.sh .git/hooks/pre-commit
若是有错误,它将退出shell,若是未设置任何变量,则将错误消息写入标准错误。
建立 git 内部预提交钩子文件(internal git pre-commit hook file)与咱们的仓库中脚本之间的符号连接。
这个脚本假设 pre-commit.sh 和 bootstrap 文件都在你的仓库的 Scripts 文件夹下面。
预提交钩子给咱们提供了很简单的方式去阻止一些常见的错误,
一行代码就能够为团队中全部人配置
在整个团队中同步
git 跟踪变化,PR 中可见
用脚本实现,若是你愿意,你能够把它做为 build phase 执行(尽管我没有)
相关阅读
在 React Web 和 原生 App 中共享代码
React Native 一周年回顾
快速部署Test-Driven Development/Debug环境
做者往期佳做
iOS – 更轻量级的 AppDelegate – 面向服务设计
使用 FlowControllers 改进iOS应用架构
Objective-C Runtime 之动态方法解析实践
做者信息
原文做者:Krzysztof Zabłocki
原文连接:http://merowing.info/2016/08/...翻译系力谱宿云 LeapCloud 团队_UX研发成员:Alex Sun译者简介:iOS开发微信公众号:MaxLeap_yidongyanfa