Git详解之七:自定义Git
自定义 Git
到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它。 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求。通过这些工具,它会和你和公司或团队配合得天衣无缝。(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读)
7.1? 配置 Git
如第一章所言,用git config
配置 Git,要做的第一件事就是设置名字和邮箱地址:
$ git config --global user.name "John Doe"$ git config --global user.email johndoe@ example.com
?从现在开始,你会了解到一些类似以上但更为有趣的设置选项来自定义 Git。 先过一遍第一章中提到的 Git 配置细节。Git 使用一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig
文件,该文件含有 对系统上所有用户及他们所拥有的仓库都生效的配置值(译注:gitconfig是全局配置文件), 如果传递--system
选项给git config
命令, Git 会读写这个文件。 接下来 Git 会查找每个用户的~/.gitconfig
文件,你能传递--global
选项让 Git读写该文件。 最后 Git 会查找由用户定义的各个库中 Git 目录下的配置文件(.git/config
),该文件中的值只对属主库有效。 以上阐述的三层配置从一般到特殊层层推进,如果定义的值有冲突,以后面层中定义的为准,例如:在.git/config
和/etc/gitconfig
的较量中,.git/config
取得了胜利。虽然你也可以直接手动编辑这些配置文件,但是运行git config
命令将会来得简单些。
?
客户端基本配置
Git 能够识别的配置项被分为了两大类:客户端和服务器端,其中大部分基于你个人工作偏好,属于客户端配置。尽管有数不尽的选项,但我只阐述 其中经常使用或者会对你的工作流产生巨大影响的选项,如果你想观察你当前的 Git 能识别的选项列表,请运行
确认这两个脚本是可执行的:
当你设法合并两个分支,结果却有冲突时,运行git mergetool
,Git 会调用P4Merge让你通过图形界面来解决冲突。 设置包装脚本的好处是你能简单地改变diff和merge工具,例如把extDiff
和extMerge
改成KDiff3,要做的仅仅是编辑extMerge
脚本文件:
这里举一个简单的例子:在暂存前,用indent
(缩进)程序过滤所有C源代码。在.gitattributes
文件中设置”indent”过滤器过滤*.c
文件:
git rev-list ^
#{sha}^@ refs/remotes/#{remote_ref}
SHA^@
?语法解析该次提交的所有祖先。这里我们从检查远程最后一次提交能够衍变获得但从所有我们尝试推送的提交的 SHA 值祖先无法衍变获得的提交内容——也就是 fast-forward 的内容。 这个解决方案的硬伤在于它有可能很慢而且常常没有必要——只要不用?-f
?来强制推送,服务器会自动给出警告并且拒绝推送内容。然而,这是个不错的练习而且理论上能帮助用户避免一次将来不得不折回来修改的衍合操作。
?
7.5? 总结
你已经见识过绝大多数通过自定义 Git 客户端和服务端来来适应自己工作流程和项目内容的方式了。无论你创造出了什么样的工作流程,Git 都能用的顺手。
转自:http://blog.jobbole.com/26131/