拒绝任何包含某些文件之外的更改的原始推送

时间:2013-11-26 16:09:48

标签: ruby git github githooks github-api

我正在管理学生作业的回购。学生可以访问彼此的工作,但只应在回购中的自己的文件夹中进行更改。我希望写一个githook,最好是在ruby中,它会拒绝任何推送到包含自己文件之外的更改的远程源repo。

有人能指出我正确的方向吗?我发现当涉及到这个主题时,文档相对稀少。

谢谢!

1 个答案:

答案 0 :(得分:1)

根据您关于避免手动处理拉取请求的评论,我认为这可能是您可以使用的方法:

  1. 您可以设置存储库,其中每个学生都有一个可以使用的文件夹。
  2. create a web hookpull_request events触发的GitHub API。请参阅下文,了解钩子的作用。
  3. 学生只能访问存储库,因此每个学生都必须分叉存储库。
  4. 学生对其叉子中的某些文件进行更改。
  5. 学生向你的叉子提交拉动请求。
  6. 您的挂钩由拉取请求事件触发。使用another API call,钩子列出了拉取请求中的所有文件,并验证提出拉取请求的用户是否可以修改这些文件。
  7. 如果用户仅修改了允许的文件,则挂钩通过a different API call合并拉取请求。但是,如果用户修改了他们不应该拥有的文件,则拉取请求将通过automatically create a comment关闭。您还可以在拉取请求中{{3}}来解释它被关闭的原因。
  8. 钩子可以用任何语言实现,只要它能够通过pull_request事件接收POST请求。例如,您可以将其部署到Heroku。