- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.4 使用强制策略的一个例子.pdf
8.4 使⽤强制策略的⼀个例⼦
使⽤强制策略的⼀个例⼦
在本节中,你将应⽤前⾯学到的知识建⽴这样⼀个 Git ⼯作流程:检查提交 息的格
式,并且指定只能由特定⽤户修改项⽬中特定的⼦⽬录。 你将编写⼀个客户端脚本来
提⽰开发⼈员他们的推送是否会被拒绝,以及⼀个服务器端脚本来实际执⾏这些策
略。
我们待会展⽰的脚本是⽤ Ruby 写的,部分是由于我习惯⽤它写脚本,另外也因为
Ruby 简单易懂,即便你没写过它也能看明⽩。 不过任何其他语⾔也⼀样适⽤。所有
Git ⾃带的⽰例钩⼦脚本都是⽤ Perl 或 Bash 写的,所以你能从它们中找到相当多的这
两种语⾔的钩⼦⽰例。
服务器端钩⼦
所有服务器端的⼯作都将在你的 hooks ⽬录下的 update 脚本中完成。 update 脚
本会为每⼀个提交的分⽀各运⾏⼀次,它接受三个参数:
被推送的引⽤的名字
推送前分⽀的修订版本 (revision )
⽤户准备推送的修订版本 (revision )
如果推送是通过 SSH 进⾏的,还可以获知进⾏此次推送的⽤户的 息。 如果你允许
所有操作都通过公匙授权的单⼀帐号 (⽐如“git” )进⾏,就有必要通过⼀个 shell 包装
脚本依据公匙来判断⽤户的⾝份,并且相应地设定环境变量来表⽰该⽤户的⾝份。 下
⾯就假设 $USER 环境变量⾥存储了当前连接的⽤户的⾝份,你的 update 脚本⾸先搜
集⼀切需要的 息:
# !/usr/bin/env ruby
$refname = ARGV 0]
$oldrev = ARGV 1]
$newrev = ARGV 2]
$user = ENV USER]
puts Enforcing Policies...
puts (#{$refname}) (#{$oldrev 0,6]}) (#{$newrev 0,6]})
是的,我们这⾥⽤的都是全局变量。 请勿在此吐槽——这样做只是为了⽅便展⽰⽽
已。
指定特殊的提交信息格式
你的第⼀项任务是要求每⼀条提交 息都必须遵循某种特殊的格式。 作为⽬标,假定
每⼀条 息必须包含⼀条形似“ref: 12 4”的字符串,因为你想把每⼀次提交对应到问
题追踪系统 (ticketing system )中的某个事项。 你要逐⼀检查每⼀条推送上来的提交
内容,看看提交 息是否包含这么⼀个字符串,然后,如果某个提交⾥不包含这个字
符串,以⾮零返回值退出从⽽拒绝此次推送。
把 $newrev 和 $oldrev 变量的值传给⼀个叫做 git rev-list 的 Git 底层命令,
你可以获取所有提交的 SHA-1 值列表。 git rev-list 基本类似 git log 命令,
但它默认只输出 SHA-1 值⽽已,没有其他 息。 所以要获取由⼀次提交到另⼀次提
交之间的所有 SHA-1 值,可以像这样运⾏:
$ git rev-list 538c33..d14fc7
d14fc7c847ab946ec39590d87783c69b031bdfb7
9f585da4401b0a399915245c13f0be
234071a1be950e2a8d078e6141f5cd20c1e61ad3
dfa04c9ef3d5197182f13fb5b9b1fb7717d2222a
17716ec0f1ff5c77eff40b7fe912f9f6cfd0e475
你可以截取这些输出内容,循环遍历其中每⼀个 SHA-1 值,找出与之对应的提交
息,然后⽤正则表达式来测试该 息包含的内容。
下⼀步要实现从每个提交中提取出提交 息。 使⽤另⼀个叫做 git cat-file 的底
层命令来获得原始的提交数据。 我们将在 Git 内部原理 了解到这些底层命令的细节;
现在暂时先看⼀下这条命令的输出:
$ git cat-file commit ca82a6
tree cfda3bf379e4f8dba8717dee55aab78aef7f4daf
parent 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
author Scott Chacon schacon@ 1205815931 -0700
committer Scott Chacon schacon@ 1240030591 -0700
changed the version number
通过 SHA-1 值获得提交中的提交 息的⼀个简单办法是找到提交的第⼀
文档评论(0)