珠峰培训

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} 都会导致丢失历史
  • 遇到冲突时强制选择一方合并