git 使用
git 是现在比较流行的版本控制工具。跟传统的 CVS、Subversion 一类的集中式版本控制工具不同,它不需要服务器段软件,就可以做版本控制,换句话说就是处处皆仓库,你可以断开网络独立对对应分支做操作。同时git拥有合并追踪(merge tracing)能力。
git 配置
一般在新系统中,我们需要先配置自己的工作环境,整体来说就是用户名和电子邮件地址:
git config --global user.name "Zhen Lei"
git config --global user.email leizhen8080@gmail.com
主要使用过程
git 日常使用的精髓: “一提交,二拉取,三推送”commit pull and push
接下来主要结合命令和GUI(窗口)工具介绍
检出仓库
执行如下命令可以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远程的服务器仓库,你的命令就是ssh地址或者https地址:
git clone username@host:/path/to/repository
SourceTree 界面操作 clone
设置sshkey.png
工作流
操作上面的 clone 之后,就有了本地仓库,本地仓库由 git 维护的三棵“树”组成。
第一个是你的工作目录,它持有实际文件;第二个是暂存区(Index),它像是一个缓存区域,临时保存你的改动;最后是本地仓库。
每个项目都有一个 Git 目录,一般工作目录都存在当前Git项目的 .git 目录中,它是用来保存元数据和对象数据库的地方。
从项目中选择某个版本进行工作时,用来进行后续的工作叫工作目录,这些文件实际上都是Gi目录中的压缩数据对象库中提取出来的。
日常的文件和内容都是在工作目录中进行。
基本的 Git 工作流如下:
- 在工作目录中修改某些文件。
- 对修改后的文件进行快找,然后保存到暂存区域。
- 提交更新,将保存在暂存区域的文件快照存储到Git目录中。
添加和提交
你可以提出更改(把他们添加到暂存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;
使用如下命令以提交实际改动:
git commit -m "代码提交信息"
现在,你的改动已经提交到了 HEAD,但是还没有到你的远程仓库。
SourceTree 界面展示:
SourceTree界面分布.png
拉取远程分支
从远程仓库获取信息并同步至本地仓库,并且自动执行合并操作
git pull origin master
推送改动
执行如下命令,将当前所有改动提交到远程仓库:
习惯上将本地仓库同步至远程仓库:一般推送(push)之前要先拉去(pull)一次,确保没有冲突,保持一致。
git push origin master
活用查看状态
要确定当前的状态,使用git status命令
git status
上面的三个流程都是正常情况下进行的操作,实际上,日常工作中,经常会碰到处理冲突和合并分支的情况。
分支
通过下面命令创建分支:
git checkout -b feature_x
然后可以通过下面命令切换到主分支:
git checkout master
注意:在切换分支前,必须要验证本地修改
git status
合并分支
一般先通过更新远程分支,如果远程分支由改动,就需要合并到自己本地中
git pull 更新本地仓库至最新改动
geit merge <branch> 合并 branch 分支到当前分支
处理冲突
如果本地修改某个文件 a.txt,同时远程也对该文件进行修改,那么在进行上面的合并分支操作是就会发生confilcts。
这个时候就需要处理 冲突confilct,修改好冲突后继续使用“一提交,二拉取,三推送”操作
查看日志
如果想了解日志内容:
git log
git log --author=bob
git log --author=bob -- pretty=oneline
git log --name-status
gitignore 的使用方法
.gitignore 文件的创建
在git仓库下创建一个.gitignore文件,但是win环境中,无法命名.开头的文件,所以需要通过git环境,按照Linux的方式来创建
- 打开gitbash
- 输入 touch .gitignore,就生成了".gitignore"文件
- 输入 vim .gitignore启动编辑器
gitignore使用
有些时候,我们必须把某些工作放到 Git 工作目录中,但又不能commit上,比如.idea/下的文件,每次提交都会有修改。
为解决这个问题,就是通过.gitignore文件让Git自动忽略这些文件。Git已经十分强大,甚至不需要我们自己编写该文件,GitHub中有各种模板,然后根据自己需求,更改一下模板就好了,对应的地址为 https://github.com/github/gitignore .
忽略文件的原则是:
- 忽略操作系统自动生成的文件(这个暂时没有接触到);
- 忽略编译生成的中间文件、可执行文件(如java产生的.class文件);
- 忽略带特殊信息的文件(如数据库的配置)。
忽略文件的写法:
- 若test文件下所有内容:
test/ - 若test下有test1、test2且不track test3
test/test1
test/test2
!test/test3
Git 中文件忽略形式
-
共享式忽略
新建 .gitignore 文件,房子啊工程目录任意位置均可。.gitignore 文件可以忽略自己,同时忽略的内容只针对未跟踪文件有效,对已经加入版本库的文件无效。 -
独享式忽略
针对具体版本库:.git/info/exclude 针对本地全局 git config --global core.exclude ~/.gitignore
忽略的语法规则(类似于正则)
(#) 表示注释
(*) 表示任意多个字符
(?) 表示一个字符
([abc]) 代表可选字符范围
Git忽略规则不生效怎么办
如果在项目开发的过程中,突然想忽略某个文件,但修改.gitignore后发现并没有成功
原因在于:这些文件已经被纳入了版本管理中,所以修改.gitignore后是无效的
解决方法:把本地的缓存删除(改为track状态),然后再commit
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git 设置别名
git 中有很多命令使用频率较高,而且经常会输错,这个时候启用别名 Alias就可以起到很好的效果
以 git status 为例
git config --global alias.st status
然后就可以查看效果了
git st
On branch dev
nothing to commit, working tree clean
同时checkout,commit,等命令都可以通过简写来完成
git config --global alias.co commit
配置文件
配置 Git 的时候,加上 --global配置的是全局参数,对当前计算机所有的Git仓库都适用。
如果不加就只针对当前的仓库起作用,每个仓库Git配置文件都放在./git/config文件中。
如果配置不想在用了,就通过
git config --unset alias.co