Git的强大就不多说了,反正我已经重度依赖git了。
使用git遇到的一个问题是,工作和自己的项目需要使用不同的git配置,如提交者的姓名和邮箱,而git config
本身只提供了项目级、用户级、系统级的配置,并不能满足我的需求。
如果可以在项目级和用户级之间再加入一个目录级的配置,就可以很好地解决我的问题,即在工作目录下的所有项目使用工作账号配置,个人目录下的所有项目使用个人账号配置。
- work # use work config
+ project1
+ project2
- my # use my config
+ project3
+ project4
那么如何实现一个目录级的配置呢?
方案一
修改用户级配置可以有以下几种方法:
- 直接执行命令:
git config --global user.name=Gerald
永久修改了配置文件,如果没机会执行退出脚本,配置将不会复原。 - 指定不同的文件:
mv ~/.gitconfig_awesome ~/.gitconfig
永久修改了配置文件,如果没机会执行退出脚本,配置将不会复原。 - 通过环境变量
GIT_CONFIG
指定config文件
这样会导致系统级配置失效,副作用比较大。
这几个方法虽然可行,但都有不妥之处。
方案二
export GIT_AUTHOR_NAME=Gerald
export
export GIT_COMMITTER_NAME=Gerald
export
再执行命令时就会优先使用环境变量中的配置。
这样的好处的不会污染全局的配置,但是也存在一些问题。首先,git config
看到的仍是原来的配置,这会引起一些混乱。而且原来的配置和环境变量并不是一一对应的关系,比如这里原本只需要配置user.name
和user.email
,用环境变量则需要配置4个值,而且效果也不完全一样。
方案三
alias git='git -c user.name=Gerald -c
即可像原来一样使用git,只是每次输入git命令时,都会通过alias加入上面的配置,达到了修改全局配置的效果,但是并不直接修改全局的配置文件。
再创建.out
文件如下:
unalias git
即可在退出目录时恢复配置。
这样就完美解决了基于目录进行配置的问题。