git(7)自定义 Git

本文详细介绍了如何自定义Git的过滤器,包括使用`indent`和`dater`过滤器对源代码进行格式化和时间戳扩展。此外,还探讨了Git的合并策略,如何通过`merge=ours`策略防止特定文件冲突。接着,展示了如何设置客户端和服务器端的挂钩,以实现提交检查、邮件工作流、权限控制等。最后,通过实例展示了如何通过Git挂钩实现强制策略,包括检查提交信息格式、限制用户修改权限及只允许Fast-Forward推送。
摘要由CSDN通过智能技术生成

在这里插入图片描述

在这里插入图片描述

这里举一个简单的例子:在暂存前,用indent(缩进)程序过滤所有C源代码。在.gitattributes文件中设置"indent"过滤器过滤*.c文件:

*.c filter=indent

然后,通过以下配置,让 Git 知道"indent"过滤器在遇到"smudge"和"clean"时分别该做什么:

$ git config --global filter.indent.clean indent

$ git config --global filter.indent.smudge cat

于是,当你暂存*.c文件时,indent程序会被触发,在把它们签出之前,cat程序会被触发。但cat程序在这里没什么实际作用。这样的组合,使C源代码在暂存前被indent程序过滤,非常有效。

另一个例子是类似RCS的$Date$关键字扩展。为了演示,需要一个小脚本,接受文件名参数,得到项目的最新提交日期,最后把日期写入该文件。下面用Ruby脚本来实现:

#! /usr/bin/env ruby

data = STDIN.read

last_date = git log --pretty=format:"%ad" -1

puts data.gsub(’ D a t e Date Date’, ‘ D a t e : ′ + l a s t d a t e . t o s + ′ Date: ' + last_date.to_s + ' Date:+lastdate.tos+’)

该脚本从git log命令中得到最新提交日期,找到文件中的所有$Date$字符串,最后把该日期填充到$Date$字符串中 — 此脚本很简单,你可以选择你喜欢的编程语言来实现。把该脚本命名为expand_date,放到正确的路径中,之后需要在 Git 中设置一个过滤器(dater),让它在签出文件时调用expand_d **《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源** ate,在暂存文件时用Perl清除之:

$ git config filter.dater.smudge expand_date

$ git config filter.dater.clean ‘perl -pe “s/\$Date[^\$]*\$/\$Date\$/”’

这个Perl小程序会删除$Date$字符串里多余的字符,恢复$Date$原貌。到目前为止,你的过滤器已经设置完毕,可以开始测试了。打开一个文件,在文件中输入$Date$关键字,然后设置 Git 属性:

$ echo '# D a t e Date Date’ > date_test.txt

$ echo ‘date*.txt filter=dater’ >> .gitattributes

如果暂存该文件,之后再签出,你会发现关键字被替换了:

$ git add date_test.txt .gitattributes

$ git commit -m “Testing date expan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值