版本控制之Git小结
一、版本控制
1.1 什么是版本控制
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。可以对任何类型的文件进行版本控制。
1.2 为什么需要版本控制
有了版本控制就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。并且可以很清晰对比出修改点,从而找出问题出现的原因。
1.3 版本控制分类
分类 | 优点 | 缺点 |
---|---|---|
集中式版本控制系统 | * 管理方便,逻辑明确,操作简单,上手快。 * 易于管理,集中式服务器更能保证安全性。 * 代码一致性非常高。 * 有良好的目录级权限控制系统。 |
* 必须联网。如果不能连接到服务器上,基本上不可以工作,如果服务器不能连接上,就不能提交,还原,对比等等。 * 分支的管控方式不灵活 * 对服务器性能要求高,数据库容量经常暴增,体量大。 |
分布式版本控制系统 | * 适合分布式开发,每一个个体都可以作为服务器。 * 公共服务器压力和数据量都不会太大。 * 速度快、灵活,分支之间可以任意切换。 * 离线工作,不影响本地代码编写, |
* 学习周期相对而言比较长 * 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。 |
二、认识 Git
2.1 Git 简史
Linux 内核项目组当时使用分布式版本控制系统 BitKeeper 来管理和维护代码。但是,后来开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统,并且对新的版本控制系统做了很多改进。
2.2 Git 与其他版本管理系统的主要区别
Git 与其他版本管理系统最主要的区别就是对待数据的方式。
大部分版本控制系统(CVS、Subversion、Perforce、Bazaar 等等)都是以文件变更列表的方式存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异, 而 Git 采用的是直接记录快照的方式 。
2.3 Git 的三种状态
Git
有三种状态:
- 已提交(committed):数据已经安全的保存在本地数据库中。
- 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
- 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由此引入 Git
项目的三个工作区域的概念:
- Git 仓库(.git directoty)
- 工作目录(Working Directory)
- 暂存区域(Staging Area)
2.4 Git 基本工作流程
1. 在工作目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
三、Git 安装
3.1 在 Linux 系统安装
yum install -y git
3.2 在 mac 系统安装
- 安装 homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安装 git
brew install git
3.3 在 Windows 系统安装
- 先前往官网 下载安装包
- 一路安装即可
3.4 初次运行 Git 的配置
- 打开命令行工具
- 配置用户信息
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
注:--global
选项表示全局应用。
- 检查配置信息,确认配置成功
git config --list
四、Git 快速入门
4.1 获取 Git 仓库
方式一:在现有目录中初始化仓库
1) 命令行工具进入现有目录
2) 执行 git init 命令
方式二:从服务器克隆一个现有 Git 仓库:
执行 git clon [url] 自定义本地仓库名称
4.2 记录更改到仓库
1) 检查当前目录状态:git status
2) 设置忽略文件: 在 .gitignore 文件中编辑规则
3) 提出更改(将更改内容提交到暂存区)
* 针对指定文件: git add filename
* 针对所有文件: git add *
* 支持通配符形式: git add *.txt
4) 提交更新:
git commit -m "本次提交内容"
5) 跳过暂存区更新(该命令下不需要执行 git add 步骤):
git commit -a -m "本次提交内容"
6) 移除文件(从暂存区移除):
git rm filename
7) 对文件重命名:
git mv filename newFilename
4.3 推送更改到远程仓库
如果本地仓库和远程服务器没有连接,需要先建立连接:
git remote add origin serverUrl
将改动推送至远端仓库:
git push origin master
注:分支的概念我们之后会详细介绍,这么只需要知道
master
表示主分支,可以换成其他你想要的分支。
4.4 远程仓库重命名和移除
重命名
git remote rename 原名称 新名称
移除
git remote rm 仓库名称
4.5 查看提交记录
查看所有的提交记录
git log
查看指定人的提交记录
git log --author=username
查看最近 n 条记录
git log -n
4.6 撤消操作
覆盖上次提交(将暂存区的文件提交)
git commit --amend
取消暂存的文件
git reset filename
撤消对文件的修改:
git checkout -- filename
丢弃本地所有更改,以远程仓库为主
git fetch origin
git reset --hard origin/master
4.7 其他远程仓库操作
抓取
git fetch [remote-name]
查看
git remote show [remote-name]
4.8 别名
有些命令过长导致我们操作体验感很差,Git 提供了别名操作可以让我们将长命令转为短小的命令
git config --global alias.短命令 原来命令
例如:
git config --global alias.ci commit
之后我们只需要使用 git ci
就可以执行提交操作了。
4.9 帮助
有些命令记不住,可以通过 git help
命令获取帮助。例如,要想获得 config 命令的手册:
git help config
五、Git 分支
5.1 相关概念
分支:
每一次提交创建的点连接成的线叫做分支。
master 分支:
在 Git 仓库创建的时候就会默认生成的一个 master 分支也叫主分支,其他所有的分支都围绕这个分支做扩展。
子分支:
在 master 分支的基础上创建的分支叫做子分支,它是独立存在的和主分支互不干扰。
指针:
每一根分支中都会有一个指向这个分支的指针,这个指针指向了当前版本库中使用的提交版本,也就是指向分支线上指定的点。master 分支就有一个master指针,其他分支的指针也有对应名称的指针。
HEAD 指针:
指向当前版本库使用的分支指针。
5.2 分支的好处
- 多人协同工作,互不影响
- 可以并行开发多个新功能
5.3 分支相关命令
新建分支
git branch 新分支名称
切换分支
git checkout 新分支名称
新建、切换合并命令
git checkout -b 新分支名
切换到主分支
git checkout master
合并分支(可能存在冲突)
git merge 新分支名
查看所有分支
git branch
删除新分支
git branch -d 新分支名称
将分支推送远程仓库
git push origin
六、服务器上的 Git
在多人协作的时候有一台可靠的公用仓库是一个非常实用的方案。
6.1 协议
Git 支持以下几种协议:
- 本地协议(Local)
- HTTP 协议
- SSH(Secure Shell)协议
- Git 协议
关于这几种协议的优缺点你们可以参考 服务器上的 Git - 协议
6.2 在服务器上架设 Git 仓库
相比于只是单单在服务器搭建一个 Git 仓库来说,选择更现代,功能更全的 Git 服务器是一个更好的选择。推荐的几个好用的 Git 服务器:
- GitLab
- Gogs
以上几个 Git 服务器都提供了开源版本,可以在我们自己的服务器上搭建。
6.3 第三方托管
如果不想自己搭建的话,也可以直接采用现成的第三方托管。
版本控制之Git小结的更多相关文章
- 版本控制工具——Git常用操作(上)
本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...
- Git版本控制:Git查阅、撤销文件修改和撤销文件追踪
http://blog.csdn.net/pipisorry/article/details/47867097 查看文件的修改历史 git log --pretty=oneline 文件名 # 显示修 ...
- 版本控制工具 - Git
版本控制工具 - Git 安装完成后,打开Git Bash,这是一个命令行工具,用于操作仓库和仓库的文件.你可以通过命令将已经存在的项目变成仓库,也可以重新创建一个新项目再通过命令将其变成仓库,还可以 ...
- 痞子衡嵌入式:备受开源社区推崇的分布式版本控制工具(Git)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是分布式版本控制工具Git. 1.为什么需要版本控制系统? 单人软件项目开发过程,往往很多功能都是逐步增加的,在代码开发过程中,有的时候功 ...
- 版本控制工具Git工具快速入门-Linux篇
版本控制工具Git工具快速入门-Linux篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.版本管理系统的介绍 1>.版本管理系统的特点 1.1>.自动生成备份: ...
- 版本控制工具Git工具快速入门-Windows篇
版本控制工具Git工具快速入门-Windows篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近在学习Golang语言,之前的开发环境在linux上开发的,后来由于办公用的是w ...
- 开源分布式版本控制工具 —— Git 之旅
Git 主张的分布式代码库与文件快照的设计思想,相对于传统 CVS.SVN 等集中式.文件差异式版本控制工具是一种挑战与颠覆.Git 带来了离线提交.轻量级分支等诸多便利.不过,也有人质疑 Git 的 ...
- 版本控制— SVN & git
版本控制—— SVN & GIT 提问 什么是版本控制? 是能够一直监视代码文件的变更,并存储这些文件以便将来引用的一种机制(软件) 为什么要使用版本控制? (1)记录哪个开发人员做了变更 ( ...
- 【IntelliJ IDEA学习之九】版本控制之Git和Github
版本:IntelliJIDEA2018.1.4 [IntelliJ IDEA学习之九]版本控制之Git版本:IntelliJIDEA2018.1.4 一.git知识准备git是目前流行的分布式版本管理 ...
随机推荐
- Cookie与Seesion的作用
1.什么是Cookie与Session? cookie:首次访问服务器,服务器返回cookie置浏览器,存到用户电脑.之后去访问同一服务器,浏览器会携带相应cookie判断是否是同一浏览器的访问,告知 ...
- Python作业本——第4章 列表
课后习题: 1.[]是一个空列表 2. spam.insert(3, 'hello') 错,应为:spam[2] = 'hello' 3.['d'] 'd' 4.['d'] 'd' 5.[ ...
- Java开学测试
这次开学测试要求做一个信息系统,该系统完成学生成绩录入,修改,计算学分积点和查询学生成绩的简单功能. 下面是我写的代码 //信1805-3班 20183641 赵树琪 package test; im ...
- java解决回文数
递归解决palindrome问题 如果String仅仅只是一个或者0个字符,则它就是palindrome 否则比较字符串第一个和最后一个字符 如果第一个和最后一个字符不同,那么就不是palindrom ...
- [整理] jQuery插件开发
1.类级别的插件开发 类级别的插件开发,可似为给jQuery类添加方法,调用方式:$.你的方法(),如:$.ajax() 函数. 1.1.给jQuery类添加方法 $.alertMsg = funct ...
- .net core 自定义404 500页面
常用处理方式 自己定制网站的404.500页面的方式有很多,比如修改nginx配置文件,指定请求返回码对应的页面, .netframework项目中修改webconfig文件,指定customerro ...
- Json的动态解析
最近在项目中需要动态解析json,但解析json的方式有很多,如何合理的解析就是我们需要考虑的问题?比如Newtonsoft.Json.Linq下提供的JToken.JObject等,Newtonso ...
- ASP.NET Core 2.2 : 二十一. 内容协商与自定义IActionResult和格式化类
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”.除了这个,本章将通过 ...
- Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)
命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F ...
- python函数练习
1:下载一首英文的歌词或文章 love story-taylor swiftwe were both young when i first saw youi close my eyes and the ...