git的基本概述

简介

  • git(分布式版本控制系统)

  • git  是目前世界上最先进的分布式版本控制系统(没有之一)!

  • Linus  花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

  • Git  迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

  • 历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

集中式和分布式

  • Linux旗下的CVS和SVN都是集中式的版本控制系统,但git是分布式的版本控制系统

  • 何为集中式版本控制系统?

    • 版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

      gitfunbu.jpg

    何为分布式版本控制系统?

  • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

gitfenbu2.jpg

  • 集中式VS分布式

    | | 集中式(SVN) | 分布式(Git) |
    | :———————: | :—————————————————————————————: | :—————————————————————————————: |
    | 是否有中央服务器 | 有。开发人员需要从中央服务器获得最新版本的项目然后在本地开发,开发完推送给中央服务器。因此脱离服务器开发者是几乎无法工作的 | 没有中央服务器,开发人员本地都有 Local Repository |
    | 网络依赖 | 必须要联网才能工作,而且对网络的依赖性较强,如果推送的文件比较大而且网络状况欠佳,则提交文件的速度会受到很大的限制 | 分布式在没有网络的情况下也可以执行commit、查看版本提交记录、以及分支操作,在有网络的情况下执行pushRemote Repository。 |
    | 文件存储格式 | 按照原始文件存储,体积较大 | 按照元数据方式存储,体积很小 |
    | 是否有版本号 | 有 | 没有 |
    | 分支操作的影响 | 创建新的分支则所有的人都会拥有和你一样的分支 | 分支操作不会影响其他开发人员 |
    | 提交 | 提交的文件会直接记录到中央版本库 | 提交是本地操作,需要执行push操作才会到主要版本库 |

git的三种数据状态


暂存态

  • git传输文件实际上是进行数据的传输,每个用户机都存在一个数据的暂存区(temp),当用户机没有网络时,可以在本地把要上传到本地数据库的文件数据先放到暂存区(temp),待网络通畅时git会自动提交数据到指定的本地数据库(仓库)。此状态为——已暂存(staged)状态

提交态

  • 当文件安全的保存到本地数据库时,此状态为——已提交(commit)状态

修改态

  • 若文件只是进行更改内容,但尚未保存到数据库中,那么此状态就为——已修改(modify)状态

git的工作原理


核心

  • git  的工作原理不同于集中式版本控制系统(CVCS),git赋予每个用户机上一个本地数据库,此数据库可同步到服务器的数据库中,当用户对文件做每一次的修改时,会把该文件的所有版本文件保存到本地数据库(即克隆文件),这样做的好处是,当没有网络时,也可以对文件的版本进行控制,而且要修改时,把修改后的文件进行标记,待网络通畅后会把被标记的文件提交到数据库中,供其他开发者使用。

获取Git仓库

获取方式

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库
  2. 从其它服务器 克隆 一个已存在的 Git 仓库

在已存在的目录中初始化仓库

  • 第一步:打开git bash

  • 第二步:输入进入目录的命令

     $cd /f/gitproject
    
  • 第三步:初始化仓库

     $git init
    

此步骤会在已创建的目录下生成一个.git的子目录(该目录为隐藏文件)

添加文件

创建文件

  • 方法一:在创建的gitproject目录下直接右键创建一个文件(例如:helloworld.java)

  • 方法二:在创建的gitproject目录下右键git bash here ,使用命令创建

     $touch helloworld.java  //创建文件
     $git status //查看文件状态
    
  • 方法三:直接打开git bash ,用Linux命令切换到gitproject目录下,输入方法二的命令即可!

    把文件放入暂存区

  • 通过Linux命令

     $git add helloworld.java
    
  • 此时再输入 git status 查看状态

    把文件提交到仓库

     $git commit -m"new file helloworld.java"
    

    (-m为message)

    查看是否已提交

     $git status
    

    如出现下图所示则提交成功

    gitcmd.jpg

克隆仓库

  • 命令
$git clone <url>

查看当前文件状态

  • 命令
    $git status