自定义git

自定义git

1. git配置

使用git config –help查看帮助文档。


1.1 客户端配置

core.editor Git默认文本编辑器
commit.template 默认提交模板
core.pager 默认分页器
user.signingkey GPG签署密钥
core.excludesfile 项目库之外的定义那些需被忽略的文件的文件路径。.gitignore是项目库内。
help.autocorrect 命令自动修正
color.ui 打开默认终端着色
merge.tool 合并工具配置
diff.externa diff工具
core.autocrlf CRLF转换LF工具
core.whitespace 空格探测


1.2 服务端端配置

receive.fsckObjects 是否推送期间检查所有对象的一致性
receive.denyNonFastForwards 禁用强制更新
receive.denyDeletes 禁止删除分支和标签


2. git属性

Git 以对一个特定的子目录或子文件集运用那些设置项。这些设置项被称为 Git 属性,可以在你目录中的.gitattributes文件内进行设置(通常是你项目的根目录)


2.1 二进制文件处理

可以让 Git 把所有pbxproj文件当成二进制文件,在.gitattributes文件中设置如下:
*.pbxproj binary

你不能直接比较两个不同版本的Word文件,除非进行手动扫描,Git 属性能很好地解决此问题,把下面的行加到.gitattributes文件:
*.doc diff=word
还可以同样的方法对比图像文件。


2.2 过滤器

你能写自己的过滤器,在提交文件到暂存区或签出文件时替换关键字。有2种过滤器,“clean”和“smudge”。在 .gitattributes文件中,你能对特定的路径设置一个过滤器,然后设置处理文件的脚本,这些脚本会在文件签出前(“smudge”)和提交到暂存区前(“clean”)被调用。
smudge
clean

在.gitattributes文件中设置“indent”过滤器过滤*.c文件:
*.c filter=indent
然后设置过滤器脚本:
git config –global filter.indent.clean indent
git config –global filter.indent.smudge cat


2.3 导出仓库

Git属性在导出项目归档时也能发挥作用。
当产生一个归档时,可以设置 Git 不导出某些文件和目录。如果你不想在归档中包含一个子目录或文件,但想他们纳入项目的版本管理中,你能对应地设置export-ignore属性。例如:
test/ export-ignore

还能对归档做一些简单的关键字替换。
echo ‘Last commit date: Format: F o r m a t : ’ > LAST_COMMIT
echo “LAST_COMMIT export-subst” >> .gitattributes


2.4 合并策略

通过 Git 属性,还能对项目中的特定文件使用不同的合并策略。
可以设置属性如下:
database.xml merge=ours


3. 挂钩

当某些重要事件发生时,Git 以调用自定义脚本。有两组挂钩:客户端和服务器端。
挂钩都被存储在 Git 目录下的hooks子目录中,即大部分项目中的.git/hooks。


3.1 客户端挂钩

主要分为提交工作流挂钩、电子邮件工作流挂钩及其他客户端挂钩。


3.1.1 提交工作流挂钩

提交工作流挂钩主要是以下四个:
pre-commit挂钩在键入提交信息前运行,被用来检查即将提交的快照。
prepare-commit-msg挂钩在提交信息编辑器显示之前,默认信息被创建之后运行。
commit-msg挂钩接收一个参数,此参数是包含最近提交信息的临时文件的路径。如果该挂钩脚本以非零退出,Git 放弃提交,因此,可以用来在提交通过前验证项目状态或提交信息。
post-commit挂钩在整个提交过程完成后运行,该挂钩是作为通知之类使用的。


3.1.2 email工作流挂钩

有3个可用的客户端挂钩用于e-mail工作流。当运行git am命令时,会调用他们。
首先运行applypatch-msg挂钩,他接收一个参数:包含被建议提交信息的临时文件名。如果该脚本非零退出,Git 放弃此补丁。可以使用这个脚本确认提交信息是否被正确格式化,或让脚本编辑信息以达到标准化。

其次,git am运行期间调用是pre-applypatch挂钩。该挂钩不接收参数,在补丁被运用之后运行,因此,可以被用来在提交前检查快照。你能用此脚本运行测试,检查工作树。如果有些什么遗漏,或测试没通过,脚本会以非零退出,放弃此次git am的运行,补丁不会被提交。

最后,在git am运行期间调用的是post-applypatch挂钩。你可以用他来通知一个小组或获取的补丁的作者,但无法阻止打补丁的过程。


3.1.3 其他客户端挂钩

pre- rebase挂钩在衍合前运行,脚本以非零退出可以中止衍合的过程。你可以使用这个挂钩来禁止衍合已经推送的提交对象。
在git checkout成功运行后,post-checkout挂钩会被调用。
在merge命令成功执行后,post-merge挂钩会被调用


3.2 服务端挂钩

pre-receive在提交对象推送到服务器前被调用。
post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。
update 脚本和 pre-receive 脚本十分类似。假如推送者同时向多个分支推送内容,pre-receive 只运行一次,相比之下update 则会为每一个更新的分支运行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值