网站大量收购闲置独家精品文档,联系QQ:2885784924

8.4 使用强制策略的一个例子.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

tangtianbao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档