GIT 分布式版本控制系统的简单使用介绍
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
GIT 分布式版本控制系统的简单使用介绍的更多相关文章
- GIT分布式版本控制系统
Git诞生历史 我想大家还记得Linus torvalds在1991年时发布了Linux操作系统吧,从那以后Linux系统变不断发展壮大,因为Linux系统开源的特性,所以一直接受着来自全球Linux ...
- 手把手教你玩转Git分布式版本控制系统! (转载)
目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 Git诞生历史 ...
- 手把手教你玩转Git分布式版本控制系统!
目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 1 Git诞生历 ...
- 开发效率优化之Git分布式版本控制系统(一)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从Git分布式版本控制系统来阐述开发效率优化 一,企业 ...
- Git分布式版本控制系统(上)
Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
- g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- 《Linux就该这么学》自学笔记_ch21_使用Git分布式版本控制系统
<Linux就该这么学>自学笔记_ch21_使用Git分布式版本控制系统 文章主要内容: 分布式版本控制系统 使用Git服务程序 提交数据 移除数据 移动数据 历史记录 还原数据 管理标签 ...
- Git ——分布式版本控制系统
Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...
- Git分布式版本控制系统(下)
Git分布式版本控制系统(下) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
随机推荐
- Python字符串切片
1.字符串切片:从字符串中取出相应的元素,重新组成一个新的字符串 语法: 字符串[ 开始元素下标 : 结束元素下标 : 步长 ] # 字符串的每个元素都有正负两种下标 步长: ...
- 使用python实现日志功能
Python脚本日志系统 Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化 ...
- 下拉菜单被表单、图片、FLASH挡住的解决办法
设置Flash的参数: <param name="wmode" value="opaque"> <object classid="c ...
- React篇-滚动条下移的触发在react的生命周期分析
项目的要求是一个chartUI方式的聊天显示页面,根据聊天信息的不断增加,页面需要滑动一定距离,这样能看到最新的聊天结果,这样就需要在聊天结果返回之后触发滚动条向下滚动到一定的距离,代码如下: com ...
- one-hot句子向量 对比度增强
one-hot映射时,如何选取TOPN作为每一个词承载的word2vec的信息? 我们已经知道,对于这种例子: 怎么绑定手机号? 怎么关联手机号? 他们的相似度取决于绑定和关联这两个词如何相似. #取 ...
- 【LeetCode每天一题】Permutations(排列组合)
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...
- case insensitive in php
date: 2017-07-27 PHP的命名空间是否区分大小写? 结论:不区分大小写,与类名一样(不区分大小写). 不区分大小写的包括 函数名 方法名 类名 控制语句(if, else, for, ...
- 《2017年Q2中国城市研究报告
根据百度慧眼团队发布的<2017年Q2中国城市研究报告>,2017年第二季度人口吸引力排名前五的城市与第一季度相同,深圳继续保持第一的领先位置.
- node.js之爬虫
nodejs爬取数据出现编码错误的问题 可以使用 superagent-charset 和 superagent 模块进行处理 var charset = require('superagent-ch ...
- G 面经 && Leetcode: Longest Repeating Character Replacement
Given a string that consists of only uppercase English letters, you can replace any letter in the st ...