简介
Git是一个快速的、开源的、分布式的版本控制系统。 相较于SVN等集中式版本控制系统,Git是分布式,分布式的最大的好处是去中心化,每台客户机都有本地仓库,即使你在没有网络的情况下或者中心服务器发生宕机的情况下,也能够提交文件,创建分支等,而SVN等集中式版本控制系统在上述情况下就不能使用了。
基本功能
-
备份文件
-
版本管理
-
协同工作
-
冲突解决(由于存在协同工作,那么就可能存在冲突,即同一个时刻,可能存在多个人对同一份资源进行操作,那么就可能存在冲突)
-
分支管理(类似于文件拷贝)
-
里程碑管理(tag)
…等等
Git安装
-
Windows系统
可以通过cmder中的choco install git
,也可以通过普通安装完成 -
Mac系统
brew install git
-
Linux系统
yum install git
-
检查安装是否成功
git --version
Git用户配置
Git有三个级别的配置文件,分别是:
-
版本库级别的配置文件:工程目录下,使用git config -e打开编辑
-
全局配置文件:用户主目录下,使用git config -e –global打开编辑
-
系统级别配置文件:/etc目录下,使用git config -e –system打开编辑
下面介绍配置的一些命令
可以使用命令git config user.name获取用户名,通过命令git config user.email获取邮箱
使用命令 git config [–global] user.name kwy 设置用户名
使用命令git config [–global] user.email kewy126@126.com 设置邮箱
git基本操作
- git初始化
-
mkdir -pv project
-
cd project
-
git init
执行完git init
生成一个隐藏目录.git
,每一个本地库有且只有一个关于版本库相关信息的目录(.git,是一个隐藏目录),这也是Git和SVN等集中式版本控制目录的区别,git目录如下:
-
$ ls -al
-
total 24
-
drwxr-xr-x 10 keweiyang staff320 1 18 21:34 .
-
drwxr-xr-x 3 keweiyang staff 96 1 18 21:34 ..
-
-rw-r--r-- 1 keweiyang staff 23 1 18 21:34 HEAD //表示git项目当前处于哪个分支
-
drwxr-xr-x 2 keweiyang staff 64 1 18 21:34 branches
-
-rw-r--r-- 1 keweiyang staff137 1 18 21:34 config //表示项目的配置信息
-
-rw-r--r-- 1 keweiyang staff 73 1 18 21:34 description //表示项目的描述信息
-
drwxr-xr-x 11 keweiyang staff352 1 18 21:34 hooks //表示系统默认钩子脚本目录
-
drwxr-xr-x 3 keweiyang staff 96 1 18 21:34 info
-
drwxr-xr-x 4 keweiyang staff128 1 18 21:34 objects //表示Git本地仓库的所有对象
-
drwxr-xr-x 4 keweiyang staff128 1 18 21:34 refs //标识项目里的每个分支指向哪个提交(commit)
需要注意的是,当我们从github上clone一个项目时,如果这个项目包含很多不同版本的代码时,我们可以设置--depth=1
拉取最新代码,避免由于代码过多导致拉取时间过长的问题。
git clone -b master --depth=1//-b:表示branch,--depth=1:表示拉取最新的代码
- 提交命令
-
vim readme.txt
-
git add . //将文件保存到暂存区
-
git commit -m "新增readme文件" // 将文件保存到本地版本库
-
git push origin //将文件保存到远程仓库
- 分支命令
Git分支地址由主机名/分支名确定,可以通过git remote命令查看,比如:origin master,其中,origin就是远程主机名称。
-
git remote
-
git remote -v
- 切换分支
Git因为有了本地仓库,因此我们才可以创建、合并、删除分支。
-
git branch //查看当前属于哪个分支
-
git branch hotfix //创建一个叫做hotfix的分支
-
git checkout hotfix //切换到hotfix分支
-
git status
notes
-
当在主分支中创建readme.txt,然后切换到hotfix分支中,这是没错误的,因此此时hotfix库为空的(库中并没有readme.txt),所以并不会和工作区中的readme.txt发生冲突
-
接着hotfix分支对readme.txt内容进行修改,并commit,然后checkout 到master分支,此时也不会出错
-
然后在master分支对readme.txt内容进行修改,但是没有进行commit(即使执行add命令),接着checkout到hotfix分支,此时会报错,因为,不同版本分支对应同一个工作区和暂存区,如果上一个版本都一个两个版本都有的内容进行修改,但是没有进行commit,然后,进行checkout操作,如果这个操作不报错的话,会导致上一个分支对内容修改的丢失
针对这个问题,有以下几种方法来解决:
-
把本地变更(commit),再切换分支
-
把本地变更储藏(stash)起来,再切换分支,切换前的状态可以在checkout回来之后执行stash apply恢复
-
丢失本地变更,使用-f参数强制checkout(不建议这么做)
- 合并分支
合并有两种方式:
-
merge:把两个分支的最新快照和以及两者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交,如果没有冲突的话)
-
rebase :提取目标分支引入的补丁和修改,然后在当前分支的基础上依次在应用一次
-
远程分支
如果你要本地所有分支(不包括tags分支)变更都推送到远程仓库,那么可以使用–all参数
git push <remote> --all
如果要推送tags分支
git push <remote> --tags
如果推送某一分支
git push <remote> <branch>
-
打上标签
git tag -a v1.0.0
网友评论