版本控制之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是目前流行的分布式版本管理 ...
随机推荐
- pyppeteer的使用
pyppeteer的使用 安装 属于第三方模块进行安装. pip install pyppeteer 在Linux中,如果权限不够则加上. sudo pip install pyppeteer 使用 ...
- 漫谈JavaScript中的作用域(scope)
什么是作用域 程序的执行,离不开作用域,也必须在作用域中才能将代码正确的执行. 所以作用域到底是什么,通俗的说,可以这样理解:作用域就是定义变量的位置,是变量和函数的可访问范围,控制着变量和函数的可见 ...
- Linux入门基础之一
Linux 入门基础 一.Linux 系统安装 安装方法网上很多,请自行百度 二.Linux 基本操作 2.1.GNOME图形界面基本操作 操作类似于Windows系统操作 打开每一个文件夹都会打开一 ...
- mariadb数据库galera下添加新的服务器节点
昨天经过各种努力,终于完成了两台服务器集成的搭建,今天再新开一台服务器,在想如何加入呢?网上度娘了很久结果没搜到相关文章:哎,索性直接照着前两台服务配置,在第三台(新服务器)上配置完成后重启maria ...
- Vue兄弟组件通信
Vue兄弟组件通信之借助中央事件总线 下载链接:https://www.yinxiangit.com 其实要实现兄弟组件通信,就算是通过父子组件通信的方式也是可以达到的,如 子 ——>父——&g ...
- Slickflow.NET 开源工作流引擎快速入门之三: 简单或分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从请假流程,或分支模式来快速了解引擎代码的编写. 1. 创建或分支流程图形 或分支流程是常见的 ...
- STL中nth_element的用法
nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素. 函数用法为:nth_element(first,kth,end). first,last 第一个和 ...
- VUE从入门到放弃(项目全流程)————VUE
VUE从入门到放弃(第一天)--整体流程 先想想一个项目,vue项目是从什么到什么,然后再什么的?那是什么呢? 搭建 ( vue-cli) 代码内容 运行 封装 成品 一.搭建(脚手架vue-cli) ...
- 002:CSS基础
注意:蓝色 重要:红色 目录: 1. 学会使用CSS选择器: 9大选择器.交集选择器.并集选择器.后代选择器.子代选择器.伪类选择器. 2.font.color.横向竖向居中.文本修饰.首行缩进. f ...
- 豆瓣电影TOP250和书籍TOP250爬虫
豆瓣电影 TOP250 和书籍 TOP250 爬虫 最近开始玩 Python , 学习爬虫相关知识的时候,心血来潮,爬取了豆瓣电影TOP250 和书籍TOP250, 这里记录一下自己玩的过程. 电影 ...