zoukankan      html  css  js  c++  java
  • git

    版本控制

    版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

    版本控制系统可以将摸个文件回溯到之前的状态,甚至将整个项目都退到过去某个之间点的状态。你可以比较文件的变化细节,查出最后是谁修改了那个地方,从而导致出现诡异问题,又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改 删的删,你可赵勇可以轻松恢复到原来的样子。但额外增加的工作量缺微乎其微。

    Git基础

    那么,简单地说,Git究竟是怎样的一个系统呢?

    直接记录快照,而非差异比较

    Git和其他版本控制系统的主要差别在于,git只关心数据的整体是否发生变化,而大多数其他系统只关系文件内容的具体差异。这类系统 (CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,请看图 1-4。

    Git并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件做快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件做一个快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存呢的快照做一个链接。

    近乎所有的操作都是本地执行

    在Git中的绝大多数操作都只需要访问本地文件和资源,不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月 前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。

    时刻保持数据完整性

    在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。

    Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:

    Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。

    git具有高可靠行,在怎样也不会丢失数据

    文件有三种状态

    对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库 中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

    初次运行 Git 前的配置

    用户信息

    第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉--global 选项重新配置即可,新的设定保存在当前项目的.git/config 文件里。

    查看配置信息

    要检查已有的配置信息可以使用      git config --list     

     用户名和邮箱地址的作用

    用户名和邮箱地址是本地Git客户端的一个变量,不随git库而改变

    每次commit都会用用户名和邮箱记录

    github的contributions统计就是按邮箱来统计的

    查看用户名和邮箱地址

       git config user.name   

       git config user.email   

    修改用户名和邮箱地址

        git config --global user.name 'user.name'    

        git config --global user.email 'user.email'    

  • 相关阅读:
    反思 自学困境自我剖析、习惯的惯性与维持
    Java IO 节点流 FileInput/OutputStream
    Java IO 理解流的概念
    spring boot2.1读取 apollo 配置中心1
    saga+.net core 分布式事务处理
    npm install 报错 ECONNREFUSED
    读书笔记: Microsot .NET企业级应用架构设计
    Dockerfile 设置语言包
    Centos环境下,执行gulp,显示执行成功,但找到不生成的压缩文件
    Jenkins Pipeline shell脚本用svn_revision当做系统版本号
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/6592955.html
Copyright © 2011-2022 走看看