认识Git

版本控制

版本控制是一种记录文件内容变化,方便以后查阅特定版本修改情况的系统

版本控制的发展史

1:本地版本控制系统

主要是采用简单的数据库来记录文件历次更新的差异



在硬盘上保存文件修订前后的变化

那么,上面这种控制系统,只能在本地使用,怎么能让不同的开发者协同工作呢?

2:集中化的版本控制系统



上面图示,有一个单一的集中管理的服务器,保存了所有文件的修订版本;而需要协同工作的人员通过客户端连接到服务器,可以取出最新的文件或者提交更新等



上面的控制系统有什么优点和缺点呢?

优点

1:可以清楚的看到项目中其他人员在做什么

2:可以掌控每一个开发者的权限

3:管理一个CVCS比在客户端上面维护本地的数据库要容易

缺点

1:中央服务器的单点故障,一旦服务器出现问题,那么客户端就不能再进行更新提交操作了

2:数据存储在磁盘上,磁盘发生损坏,就可能丢失所有数据

3:分布式版本控制系统



客户端的每次克隆操作,都是对代码仓库的完整备份,不只是提取最新版本的文件快照,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像的本地仓库恢复

优点:

1:可以指定和若干个不同的远端代码仓库进行交互

2:可以在同一个项目中,分别和不同小组的人进行协作

3:可以根据需要设置不同的协作流程

Git的设计目标:

1:速度

2:简单的设计

3:对非线性开发模式的支持:需要上万个并行开发分支

4:完全的分布式

5:能够高效管理超大规模的项目

安装Git

Git的安装比较简单,可以到官网进行下载安装包,官网地址:Git下载,或者到我这里面的地址进行下载:链接:https://share.weiyun.com/MUODHd1a 密码:kqr43s





Git的使用方式有下面两种,具体的使用方式可自行百度查阅

Git的核心概念

Git的使用原理

1:直接记录快照,而不是文件的差异比较

CVS、SVN等大部分系统是用文件变更列表的方式来存储信息,将保存的信息看做是一组基本文件和每个文件随时间变化而累积的差异



上图是一个简单的例子:存储的是每个文件与初始的版本差异;比如File 1,有两个更新后的版本,在数据库中记录的是与Version 1的差异

Git把数据看做是对小型文件系统的一组快照:

1:当文件发生变化的时候,会对全部文件制作一个快照并且保存这个快照的索引

2:当文件没有变化时,会保留一个链接指向之前存储的文件



2:几乎所有操作都是本地执行

由于是做了快照,所以大部分操作都只需要访问本地文件和资源

在本地的磁盘上就有项目的完成历史,操作比较快,而且浏览项目的历史更新记录,不需要连接到服务器去获取历史

在没有网络的情况下,也可以进行提交,有网络再进行上传

3:保证完整性

Git中所有数据在存储前都会计算检验和(校验和百度百科),然后以校验和来引用,不可能在Git不知道的情况下更改任何文件内容和目录内容,Git使用的是SHA-1散列方式计算校验和

Git 数据库中保存的信息都是以文件内容的哈希值来索引

4:一般只添加数据

Git操作几乎只向Git数据库中增加数据,很难执行不可逆操作

没有提交的数据有可能丢失或者弄乱修改的内容,比如常见的文件冲突

但是一旦提交快照到Git中,就很难再丢失了,如果还把数据推送到其他仓库中,那数据就更加安全了

5:Git的三种状态

一:已提交(committed):数据已经安全的保存在本地数据库中了

二:已修改(modified):修改了文件,但是还没有保存到数据库

三:已暂存(staged):对一个已经修改的文件的当前版本做了标记,使它会包含在下次提交的快照中

Git的工作流程

1:Git项目的三个工作区域

Git仓库:保存项目的元数据和对象数据库的地方,远程克隆仓库就是指这里的数据

工作目录:对项目的某一个版本从仓库中独立提取出来的内容,放在磁盘中供我们使用和修改

暂存区域:暂存区域是一个文件,保存了下一次将要提交的文件列表信息,一般是在Git的仓库中

Git的基本流程

1:在工作目录中修改文件

2:暂存文件,将文件的快照放入暂存区域

3:提交更新,找到暂存区域中的文件,将快照永久的存储到Git的仓库目录

Git与SVN的区别

功能 Git SVN
分布式 ×
数据存储方式 按照元数据方式存储 按照文件
分支 一个指针标记 另外的一个目录
全局版本号 代码快照,SHA-1来唯一的标识 任何一个相应时间的源代码快照
内容完整性 使用SHA-1校验和,确保代码内容的完整性 ---
网络依赖 无需联网,本地就可以操作 需要联网才可以提交查看整个版本的控制信息

Git的基本使用

Git的客户端有下面这些:命令行客户端、GUI客户端、TortoiseGit、IDE插件

下面以命令行客户端为例,简单了解下Git的基本使用

初始化Git

通过git config工具,可以定制自己的Git环境,每一台计算机都只需要配置一次即可,配置有三个维度:用户、全局、系统

1:用户信息

git config --global user.name "mike"

git config --global user.email mike@email.com

git config --global --unset user.name

2:文本编辑器

git config --global core.editor emacs

3:检查配置信息

git config --list

创建一个Git仓库

1:通过命令git init创建全新的Git仓库



2:克隆现有的仓库

Git克隆的是Git仓库服务器上的几乎所有的数据,而不仅仅是复制完成我们工作所需要的文件

Git的功能

1:提交更新

工作目录下的每个文件有两种状态:已跟踪和未跟踪

现在在刚刚创建的仓库下建一个txt文件:

可以想到,新建的一个文件是未跟踪状态:



通过git status可以查看工作目录的状态



使用git add命令操作已跟踪,把文件放入暂存区:



可以看到,文件发生了变化,有了一个图标





git commit建立快照把文件放入存储区:



现在文件是已经提交上去了,然后修改文件,把文件变成已修改状态:



下面图示整个过程:



2:查询提交历史

git log查看所有的commit记录

git show查看提交的详情



3:撤销更新

git checkout -- filename来撤销修改



4:打标签

git tag tagName可以新建标签

git tag命令可以列出所有的标签



这里只列出了一些简单的操作和使用,还有其他的一些使用,可以到Git官网或者百度查询了解,官网地址:Git官网

认识Git并了解Git的基本知识的更多相关文章

  1. git知识总结-1.git基础之git reference

    1.前言 Git版本管理的内容,是一系列由40bytes SHA-1字符串所代表patch,而Git References,则是对这些字符串的引用(也可以理解为别名).为什么需要别名呢?因为这些字符串 ...

  2. 想要学好Git,应该掌握哪些基础知识?

    说到Git,作为程序员的你,在项目开发中一定会使用到或将来也一定会使用到的,但是我相信,很多在使用Git的人,都只是停留一些简单的操作上,比如提交(commit).拉取(pull).推送(push). ...

  3. 1 起步-Pro Git---VCS比较、git基本原理、git配置

    本地版本控制系统 集中化的版本控制系统 诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务 ...

  4. git 学习(1) ----- git 本地仓库操作

    最近在项目中使用git了,在实战中才知道,以前学习的git 知识只是皮毛,需要重新系统的学一下,读了一本叫  Learn Git in a Month of Lunches 的书籍,这本书通俗易懂,使 ...

  5. Git 学习之git 起步(一)

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  6. git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令

    git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...

  7. 学Git,用Git ①

    本月开始接触到Git版本管理工具,觉得很有意思,在这里总结一下学习Git的一些心得体会. 要在Mac上完整的使用git进行版本管理,需要熟悉Mac终端操作命令和Git操作命令两种命令,索性两种命令加在 ...

  8. git rebase vs git merge详解

    https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa#.std3ddz0g 请参考另外一篇文 ...

  9. Git 快速入门--Git 基础

    Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...

随机推荐

  1. 喜忧参半的SQL Server触发器

    SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...

  2. docker仓库之分布式harbor (一)

    1.harbor介绍 harbor是一个用于存储和分发docker镜像的企业级Registry服务器,由VMware开源.其通过添加一些企业必须的功能特性,例如安全,标识和管理,扩展了开源docker ...

  3. JUC-ThreadLocal

    目录 ThreadLocal ThreadLocal测试 ThreadLocal类结构 前言 多线程访问同一个共享变量的时候也别容易出现并发问题,特别是在多线程需要对一个共享变量进行写入的时候.为了保 ...

  4. 146. LRU 缓存机制 + 哈希表 + 自定义双向链表

    146. LRU 缓存机制 LeetCode-146 题目描述 题解分析 java代码 package com.walegarrett.interview; /** * @Author WaleGar ...

  5. RocketMQ安装配置过程

    官网 官方网站:http://rocketmq.apache.org 下载源码包:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/r ...

  6. drf给上传图片重命名

    1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在storage.py中添加如下代码: #复制代码 -- coding: UTF-8 ...

  7. MyBatis(二):自定义持久层框架思路分析

    使用端 引入架构端Maven依赖 SqlMapConfig.xml-数据库配置信息(数据库连接jar名称.连接URL.用户名.密码),引入Mapper.xml的路径 XxMapper.xml-SQL配 ...

  8. Mark一个代码量统计工具-Statistic

    安装方式 IDEA.Goland系列插件市场搜索Statistic 简单说明 统计纬度比较丰富 基本覆盖常见纬度,如代码行数,文件大小等,各指标取最大最小及平均值. 统计目录为当前项目目录 只有在当前 ...

  9. idea添加本地文件约束(DTD)

    当我们做 xml 文件配置的时候,需要对其进行约束的配置 例如: hibernate 如果我们在联网的情况下是可以不添加配置文件约束的,红框内的 URL 会自动帮我们从网络上加载约束文件,但是没有网络 ...

  10. 电影AI修复,让重温经典有了新的可能

    摘要:有没有一种呈现,不以追求商业为第一目的,不用花大价钱,不用翻拍,没有画蛇添足,低成本的可共赏的让经典更清晰? 本文分享自华为云社区<除了重映和翻拍,重温经典的第三种可能>,原文作者: ...