如何确保 README 不被手工修改?

我打算把 README 写到 Commentary,然后用一个 elisp 函数从 Commentary 导出 README.md

为了防止我偷懒、直接修改 REAME.md 文件,想到了 git hook。但是在 github 端肯定没有 elisp 函数可用,所以 webhook 先不考虑。

现在我本地设置一个 hook,push 之前再导一遍 README 内容,看看是否跟 README.md 文件一致。这个校验过程放在测试文件里,如果有人(万一呢)提交 pr,这个测试也会被 Traivis 执行到。

这样做有两个问题:

  1. hook 是不受 git 管理的,所以必须以普通文件的形式纳入管理:

    • .githooks/pre-push
    • .githooks/init-hooks.sh

    克隆之后还需执行一次 init-hooks.sh 才能使 hook 生效,感觉有点多余。

  2. 如果生成(或修改)了 README.md 但没有 commit 进仓库,pre-push 能过(应该强制 README 修改之后必须 commit?),但推送到 github 之后导致 travis 通不过(因为我是拿测试用来检验 README 的,这也许不是个好主意)。

有更好的建议吗?

写个测试,每次 push、pr 都用 CI 检查,Commentary 和 README 一不匹配就报错。

不知道我对你的情况理解正确没有。

如果 README 是由别的文件生成,那么可能它并不需要版本管理…只需把真正的源文件管理起来即可。如果它既必须要间接生成,却又可以手动编辑。这种不一致性带来的麻烦,不正是我们需要竭力避免的吗?

githook 刚才看了下,可以试试用软链接形式纳入版本管理。

之前遇到过类似的问题,采用这样的方式,供参考:

  1. chmod -w readme
  2. 使用 pre-commit 管理 hook,执行相应脚本。

目前就是这样。只是说存在漏洞,不能 100% 阻绝在 push 之前。

不管理就没有 REAME 了,github 不会帮忙自动生成。

改权限是个不错的主意,有一定的阻止作用。hook 我认为还是在 push 的时候执行比较好。

禁止直推master,然后CI检测PR是否会错误修改readme。