git实用教程(七)自定义Git
2015-11-23 14:54:18

127
在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项。
比如,让Git显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true
这样,Git会适当地显示不同的颜色,比如git status命令:
文件名就会标上颜色。
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定不爽。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览: https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
举个例子:
假设你在Windows下进行node开发,npm install会安装node_modules文件夹 node_modules 还有webstorm的工程配置文件夹.idea 这此就可以把
node_modules .idea
加入到.gitignore文件中
配置示例
node_modules/ .[oa] 任何以o和a结尾的文件 ~ vim临时文件 vim~ .js 以js结尾的文件 !test.js 除了test.js都可以忽略 !test.js 文件名为!test.js mo/ 以mo/结尾指文件夹 */mk任何目录 下的res目录 匹配0或多个目录 .idea
最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean。
使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。
小结
忽略某些文件时,需要编写.gitignore; .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
有没有经常敲错命令?比如git status?status这个单词真心不好记。
如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。
我们只需要敲一行命令,告诉Git,以后st就表示status:
$ git config --global alias.st status
好了,现在敲git st看看效果。
当然还有别的命令可以简写,很多人都用co表示checkout,ci表示commit,br表示branch:
$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
以后提交就可以简写成:
$ git ci -m "xxxxx..."
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
在撤销修改一节中,我们知道,命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:
$ git config --global alias.unstage 'reset HEAD'
当你敲入命令:
$ git unstage test
实际上Git执行的是:
$ git reset HEAD test
配置一个git last,让其显示最后一次提交信息:
$ git config --global alias.last 'log -1'
这样,用git last就能显示最近一次的提交:
$ git last commit 849949c6f538078caf90b03a3b61a42eb2d584c5 Merge: 24aa86e 2d131a7 Author: zhangrenyang-t510 <zhang_renyang@> Date: Tue Oct 13 01:22:17 2015 +0800 merge
甚至还有人丧心病狂地把lg配置成了:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
来看看git lg的效果:
git-lg
为什么不早点告诉我?别激动,咱不是为了多记几个英文单词嘛!
配置文件
git配置有三个范围 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
项目配置
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
$ cat .git/config [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = git@github.com:zhufengnodejs/gitclone.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
用户配置
global 针对用户设置,global全局范围,不同用户名要有不同的配置 而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:
$ cat ~/.gitconfig [user] name = zhangrenyang-t510 email = zhang_renyang@ [filter "media"] clean = git media clean %f smudge = git media smudge %f required = true [alias] lol = log --oneline --decorate --graph --all co = = lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%C reset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit last = log -1 [core] autocrlf = true [url "https://github.com"] insteadOf = git://github.com [color] ui = true
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。 别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
全局配置
system 系统范围,针对所有用户生效,优先级最低 git的全局配置,存储于$HOME/.gitconfig 里,这里的配置影响当前用户的所有git repo。
小结
给Git配置好别名,就可以输入命令时偷个懒。我们鼓励偷懒。
最佳实践
- 管理纯文本文件
- 使用.gitignore文件
- 使用分支 多建分支,轻量级分支
- 合理使用标签 命名要规范
- 规范commit message写法 要把msg比较清晰明了的表明此次提交
- 规范项目编码(推荐utf-8)
- 尽量不要去改写历史
- 尽量保持仓库较新 减少冲突的可能性
-
按照代码完成度提交
不推荐做的
- 提交代码的目标产物,比编译结果,程序日志文件等
- 提交配置文件 每个人都不一样
- 提交大型二进制文件 数据图片
- 使用GIT做文件备份工具(网盘)
- 使用git push --force
- 使用git reset --hard {commitId} 都会导致丢失历史
- 遇到冲突时强制选择一方合并