GIT 分布式版本控制系统的简单使用介绍
1.GIT的概念
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 与 SVN 区别:
1. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等
2. GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统最核心的区别
3. GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里
4. GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录
5. GIT没有一个全局的版本号,而SVN有
6. GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
2. GIT的安装配置
在linux平台上安装GIT
安装依赖工具
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel -y
安装git软件包
yum -y install git-core
查看git版本
# git --version
git version 1.8.3.1
windows mac平台安装GIT配置略。
3. GIT配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量
/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件
当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。
3.1 用户信息配置
配置个人用户名和电子邮箱
# git config --global user.name "CloudGIT001"
# git config --global user.email 15800220134@134.com
注:用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息
3.2 文本编辑器
Git默认使用的文本编辑器, 一般是 Vi 或者 Vim
配置默认文本编辑器为vim
# git config --global core.editor vim
3.3 差异分析工具
改用 差异分析工具为 vimdiff
# git config --global merge.tool vimff
3.4 查看配置信息
# git config --list
user.name=CloudGIT001
user.email=15800220134@134.com
core.editor=vim
merge.tool=vimff
这些配置我们也可以在 ~/.gitconfig 看到
4. GIT 工作流程
git的工作流程如下:
1). 克隆 Git 资源作为工作目录
2). 在克隆的资源上添加或修改文件
3). 如果其他人修改了,你可以更新资源
4). 在提交前查看修改
5). 提交修改
6). 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
如图:
5. Git 工作区、暂存区和版本库
工作区:就是你在电脑里能看到的目录
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
如图:
6. GIT的基本操作
创建仓库
(1). git init
Git 使用 git init 命令来初始化一个 Git 仓库
# mkdir gitdepot
# cd gitdepot/
# git init
Initialized empty Git repository in /root/gitdepot/.git/
指定目录作为Git仓库
# git init gitdepot
(2). git clone
使用 git clone 从现有 Git 仓库中拷贝项目
格式:
git clone <repo>
克隆到指定的目录格式:
git clone <repo> <directory>
(3). git add
git add 命令可将该文件添加到缓存
git status 命令用于查看项目的当前状态
简单例子:
# touch gitfile
# touch hello.py
# git status -s
?? gitfile
?? hello.py
# git add gitfile hello.py # 执行 git add 命令来添加文件
# git status -s
A gitfile
A hello.py
"AM" 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。改动后我们在执行 git add . 命令将其添加到缓存中
# git status -s
AM gitfile
# git add .
# git status -s
A gitfile
(4). git diff
执行 git diff 来查看执行 git status 的结果的详细信息
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别
1). 尚未缓存的改动:git diff
2). 查看已缓存的改动: git diff --cached
3). 查看已缓存的与未缓存的所有改动:git diff HEAD
4). 显示摘要而非整个 diff:git diff --stat
(5). git commit
git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中
注:Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址
注:如果没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息,类似默认vim打开
(6). git reset HEAD
git reset HEAD 命令用于取消已缓存的内容
(7). git rm
git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。 "取消缓存"的意思就是将缓存区恢复为我们做出修改之前的样子。
默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除
如果你要在工作目录中留着该文件,可以使用 git rm --cached
(8). git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盘上的文件,然后再执行 git add 把新文件添加到缓存区
7. Git 分支管理
创建分支命令格式:
git branch (branchname)
切换分支命令格式:
git checkout (branchname)
合并分支命令:
git merge
1). 列出分支基本命令:
git branch
注:没有参数时,git branch 会列出你在本地的分支
如果创建分支出现:fatal: Not a git repository (or any of the parent directories): .git 时。
解决方法:先git add .添加所有项目文件到本地仓库缓存,再git commit -m "init commit"提交到本地仓库
2). 删除分支
删除分支命令格式:
git branch -d (branchname)
3). 分支合并
git merge
4). 合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改
8. Git 查看提交历史
git log
使用 git log 命令列出历史提交记录
# git log
commit 0f3a4331fb6f96a10eb11216fca16657d5416c2e
Author: CloudGIT001 <15800220134@134.com>
Date: Mon May 22 22:36:22 2017 +0800 init commit
用 --oneline 选项来查看历史记录的简洁的版本
# git log --oneline
用 --graph 选项,查看历史中什么时候出现了分支、合并
# git log --oneline --graph
使用命令:git log --author 查找指定用户的提交日志
# git log --author=CloudGIT001 --oneline
如果你要指定日期,可以执行几个选项:--since 和 --before,也可以用 --until 和 --after
9. Git 标签
使用 git tag 给git打上标签
注:-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解
例子:
当执行 git tag -a 命令时,Git 会打开编辑器,让你写一句标签注解
# git tag -a v1.0
2017-05-222017-05-22
#
# Write a tag message
# Lines starting with '#' will be ignored.
当执行 git log --decorate 时,我们可以看到我们的标签了
# git log --oneline --decorate --graph
* 0f3a433 (HEAD, tag: v1.0, master, gitbranch, change_site) init commit
参考学习链接:http://www.runoob.com/git/git-tutorial.html