zoukankan      html  css  js  c++  java
  • progit 之 git 起步(1)

    了解git为什么这么流行,为什么应该使用git 以及 如何设置及使用git

    关于版本控制

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。有了它就可以将文件回溯到之前的状态,甚至将整个项目都回溯到过去某个时间点的状态。

    本地版本控制系统

    许多人习惯用复制的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做的唯一好处是简单,但是很容易犯错。为了解决这个问题,人们很久以前就开发了许多本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

    其中最流行的一种是RCS,他的工作原理是在硬盘上保存补丁集(补丁是指文件修改前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

    集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)

     主要解决问题:如何让不同系统上的开发者协同工作

    原理:CVS、Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本。而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。

    好处:每个人都可以在一定程度上看到项目中的其他人正在做些什么,而管理员也可以轻松掌握每个开发者的权限,并且管理一个CVCS要远比在各个客户端上维护本地数据库来的轻松容易。

    坏处:最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么这一小时内,谁都无法提交更新,也就无法协同工作;

      如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据 —— 包括整个项目的变更历史,只剩下人们在各个机器上保留的单独快照。

      本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

    分布式版本控制系统(Distributed Version Control System,简称DVCS)

    原理:如 Git、Mercurial、Bazaar、Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

    Git简史

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

    Git和其他版本控制系统的主要差别在于Git对待数据的方法。

    概念上来区分,其他大部分系统以文件变更列表的方式存储信息。存储每个文件与初始版本的差异。Git不按照以上方式对待或保存数据,反之,Git更像是把数据看作是对小型文件系统的一组快照。每次你提交更新或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个数据流。

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

    在Git中绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其他计算机的信息。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

    Git保证完整性

    Git中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不知情时更改任何文件内容或目录内容。若你在传送过程中丢失信息或损坏文件,Git就能发现。

    Git用以计算校验和的机制叫做SHA-1散列(hash,哈希)。这是一个由40个十六进制字符组成的字符串,基于Git中文件的内容或目录结构计算出来。

    实际上,Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

    Git一般只添加数据

    你执行的Git操作,几乎只往Git数据库中增加数据。很难让Git执行任何不可逆操作,或者让它以任何方式清除数据

    三种状态

    Git有三种状态:已提交(committed)、已修改(modified)、已暂存(staged)。

    已提交表示数据已经安全的保存在本地数据库中;已修改表示修改了文件,但还没保存到数据库中;已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

    由此引入Git项目的三个工作区域的概念:Git仓库、工作目录以及暂存区域

    Git仓库目录:是Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其他计算机克隆仓库时,拷贝的就是这里的数据。

    工作目录:是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库提取出来的文件,放在磁盘上供你使用或修改。

    暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作索引,不过一般说法还是叫暂存区域。

    基本的Git工作流程如下:

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

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

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

    如果Git目录中保存着特定版本的文件,就属于已提交状态。如果做了修改并已放入暂存区域,就属于已暂存区状态。如果自上次取出后,做了修改但还没有放到暂存区域,就是已修改状态。

    命令行

    Git有多种使用方式,可以使用原生的命令行方式,也可以使用GUI模式。但是只有在命令行模式下才能执行Git的所有命令,而大多数GUI软件只实现了Git所有功能的一个子集以降低操作难度。

    安装Git

    初次运行Git前的配置

     Git自带一个git config的工具来帮助设置控制Git外观和行为的配置变量。这些变量存储在三个不同的位置:

    1. /etc/gitconfig文件:包含系统上每一个用户及他们仓库的通用配置。如果使用带有 --system选项的git config时,他会从此文件读写配置变量。

    2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。可以传递 --global 选项让Git读写此文件

    3. 当前使用仓库的Git目录中的config文件,就是 .git/config:针对该仓库

    每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig中的配置变量

    用户信息

    设置你的用户名称与邮件地址,每一次的Git提交都会使用这些信息,并且他会写入到你的每一次提交中,不可更改:

    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com

    当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有--global选项的命令来配置。

    文本编辑器

    如果未配置,Git会使用操作系统默认的文本编辑器,通常是Vim。如果想使用不同的文本编辑器,例如Emacs。

    git config --global core.editor emacs

    检查配置信息

    git config --list
    git config user.name

    获取帮助

    git help <verb>
    git <verb> --help
    man git-<verb>
  • 相关阅读:
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    POJ 3162 Walking Race (树的直径,单调队列)
    POJ 2152 Fire (树形DP,经典)
    POJ 1741 Tree (树的分治,树的重心)
    POJ 1655 Balancing Act (树的重心,常规)
    HDU 2196 Computer (树形DP)
    HDU 1520 Anniversary party (树形DP,入门)
    寒门子弟
    JQuery选择器(转)
    (四)Web应用开发---系统架构图
  • 原文地址:https://www.cnblogs.com/mlllily/p/12152401.html
Copyright © 2011-2022 走看看