一、简介

1.集中式版本控制系统(CVS):Svn
     * 版本库是集中存放在中央服务器中的,客户端需要先从中央服务器取得最新的版本,然后再干活,活干完后,再把自己的代码推送给中央服务器。
        中央服务器就好比是人事局,当你想要修改档案,得先从人事局把档案取出来,修改完,再还回人事局
     * 缺点:
       * 必须有网络才能协同工作,否则单机工作,那就乱套了
       * 当中央服务器出问题了,那所有人都得蒙逼

2.分布式版本控制系统(DVCS):Git
     * 首先,没有“中央服务器”,每个客户端同时也是一个完整的版本库,这样工作的时候,就不需要联网了
     * 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢         复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份.
     * 更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的         协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

3.分布式 VS 集中式
      * 安全性
         分布式:安全性更高,因为每个人电脑都有完整的版本库
         集中式:中央政策没了,企业就蒙逼了
      * 分支管理
        集中式:也有分支管理,但是谁TM会用,谁TM敢用,建立个分支,那个墨迹,可靠性太TM低
        分布式:操作简便,合并快捷,天下武功,唯快不破

二、原理

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

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而CVS(SVN)类系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数      据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这        次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

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

3.时刻保持数据完整性

4.文件的三种状态

Git 内都只有三种状态:已提交(committed),已修改(modified)和 已暂存(staged)

未被Git跟踪的状态为unstage状态; 已经被Git跟踪的状态为stage状态,因此包括staging状态和staged状态

untrack files是指尚未被git所管理的文件;changed but not updated是指文件被git管理,并且发生了改变,但改动还没被git管理;这两种状态,都可以看成是改动还没被        git管理的状态,我们这里称非stage状态。

changes to be commited是指进入stage状态的文件,stage是commit和未管理之间的一个状态,也叫index状态,也就是git已经管理了这些改动,但是还没完成提交。
      .gitignore(git忽略文件)中的文件,不会出现在以上三个状态中。

5.基本的 Git 工作流程如下

在工作目录中修改某些文件 -> 对修改后的文件进行快照,然后保存到暂存区域 -> 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中

三、安装与配置

安装就不在叙述了,根据自己的环境进行下载版本安装即可,这里主要讲解一下初次运行 Git 前的配置

右键 -> Git Bash Here

* 注册用户信息

git config --global user.name "XXX"

git config --global user.email "XXX@XXX"

git config –-list              #查看用户信息

* 文本编辑器(默认会使用操作系统指定的默认编辑器Vi 或者 Vim)
      git config --global core.editor emacs

* 差异分析工具
        决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
      git config --global merge.tool vimdiff

四、开始使用

1.创建版本库

         版本库又名仓库(Repository),目录下的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,且还原

         创建一个空目录 —> 变成Git可以管理的仓库

  当前目录中,多了一个.git隐藏文件夹,这个目录是Git来跟踪管理版本库的,别动这个文件夹奥

2.将文件添加到版本库中

        问:微信撩妹分几步走?分两步:找妹儿,加好友(添加到通讯录);点击妹儿头像->发送信息,进入聊天页面(告诉微信,我要开始发消息了)

        将文件从工作区添加到暂存区  ->  把文件提交到本地版本库 

       (为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

        git add filename 添加单个文件到暂存区

git add -A  添加当前文件夹下的所有文件

git status   查看当前操作目录处于哪个分支 和 文件的状态

          

        git commit -m "描述信息"    将暂存区的文件提交到本地版本库

          clean 说明缓存区没有要提交的文件了

3.时光穿梭机

       * 查看文件哪里变动了       git diff filename

         

      * 提交修改,同新增文件的用法一致(add -> commit)

      * 版本回退

* 查看历史纪录   git log

  可以看到从最近到最远的提交记录,一大串码是commit id

* 回退到上一个版本  git reset --hard HEAD^

* 回退错了,我要回到3.0 ,  只要当前窗口没有关闭,因为你可以看见commit id,      git reset --hard commit id

  commit id 没必要写全,前几位就可以了,Git会自动去找

* 那么问题来了,如果昨天大姨妈,心情不好,思维蒙逼了,回退到了某一个版本,但是今早醒来,疼痛去无踪,后悔回退版本了,咋整呀,别怕,老司机带你飞

查看操作记录   git reflog

4.管理修改

       * 提交修改

举个例子, 修改了一个文件,然后add,并未commit,这个文件被提交到暂存区了,然后接着修改该文件,然后直接commit,最后版本区的文件是第一次修改的文件。

       第二次的修改为什么没在版本库中呀,我TM commit了,老妹儿,你说这是为什么呢?

       原因:commit只能将暂存区的文件提交到版本库,因为第二次修改没有add,暂存区中只保留着第一次修改后的文件,因为所以,自然道理

       解决办法: 方式一: 接着上一步, add -> commit

                       方式二: 再修改完第二次后,要先add,这样就将一次与第二次的修改合并了,然后提交到暂存去了。最后在 commit,搞定

       * 撤销修改

          如果不小心修改文件,而多加了一行 “妮,来耍一下子嘛”,咋整呀,被别人看见了咋办,敢自称老司机,自然有办法,

使用命令    git checkout -- filename

情况一:还未add , 想丢弃工作区的修改,也就是让工作区恢复到与版本库一致

情况二:已经add , 想丢弃工作区与暂存区的修改

情况四:已经add了,然后又修改了东西,想回到add后的状态,去掉后修改的东西

情况四:已经commit了,那就 版本回退 

    5.删除文件

       情况一:未add,直接删除就好了 或者  rm filename

情况二:已add,未commit

如果直接删除,工作区删除了文件,但是暂缓区不知道工作区删除了文件

先恢复一下被删除的文件, git checkout -- filename

工作区与暂存区都删除文件  git rm filename  ,然后还得add、commit

情况三:已commit

情况四:已push,这里先不讲解,后续再说

要分成三步: git rm filename -> git commit -m "" -> git push

5.远程仓库

        * 创建SSH Key

           第一步:

ssh-keygen -t rsa -C "281345774@qq.com" , 然后一路回车

id_ras是私钥,不能泄露

id_rsa.pub是公钥,可以放心告诉任何人

第二步:登陆github进行设置

               登陆GitHub,点击右上角的头像 -> 选择settings -> 选择“SSH and GPG keys”页面:

点机“new SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:保存

为什么要用ssh key?

因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

* 添加远程库

           在本地已经创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,

首先,登陆GitHub,然后,在右上角找到“+”按钮,创建一个新的仓库:

可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联

第一步: 关联:  在本地的git_test仓库下运行命令:

      $ git remote add origin git@github.com:xfz1987/git_test.git   后面的地址如途中所示   
  第二步: 查看当前关联的远程库:
git remote -v

第三步: 将本地已关联的库的内容推送到远程库中

git push命令,把当前本地分支master推送到远程库中的master分支上

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的                master分支关联起来,在以后的推送或者拉取时就可以简化命令,第一次 clone 或 push 时,会有一个警告,不予理睬,输入 yes 即可

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

git push -u origin master

               

               推送成功后,我们登陆github,就可以看见文件已经被推送至远程库上了

         * 从远程库克隆

            git clone githup远程库地址 [本地目录]    - 如果不写目录,默认为当前目录

            

             

git的基本使用已经介绍完毕了, 下一篇 开始讲解git 的 分支管理 与 标签管理 及 一些扩展知识

Git 安装与使用(一)的更多相关文章

  1. CentOS 7 Git安装

    Git安装 yum -y install git 安装后,在srv目录下建立Git的目录. 初始化一个git空仓库 git init --bare project.git 增加用于访问git仓库的用户 ...

  2. Git安装

    前面说了很多废话,说得再好,还不如实践一次.要想使用Git,首先得安装.这次实验主要是实践怎样安装Git. 安装与检查是否安装成功 1. 在Linux(Ubuntu)上安装 上篇的Git简介已经介绍过 ...

  3. Git安装与配置

    一.简介 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...

  4. 版本管理之Git(二):Win7上Git安装及简单配置过程

    一.安装包 msysgit(Windows版本的Git) 下载地址:http://code.google.com/p/msysgit/downloads/list?q=full+installer+o ...

  5. git安装及命令使用和github网站

    最近参与别人的github项目时,学习了git的使用,首先需要在https://github.com/网站上注册账号和邮箱,然后fork一个开源项目,然后下载目前Windows下最新版本的git,下载 ...

  6. Git 安装

    安装参考资料: http://lzw.me/a/msysgit-tortoisegit-win-git.html http://blog.csdn.net/qwiwuqo/article/detail ...

  7. 转 git安装配置

    Win7上Git安装及配置过程 一.安装说明 1.Git在windows平台上安装说明. Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...

  8. git学习1:git安装和配置

    Git是什么?世界上最先进的分布式版本控制系统,记录了一个文本文件的每次一修改信息,比如,一篇散文,从草稿到最终出版,经历过无数次修改,修改了标点符号形成一个版本,老师帮助修改形成一个版本,同学帮忙修 ...

  9. ubuntu下git安装及使用

    ubuntu下git安装及使用   其实,好几个月前,就已经安装好了,可是一直搁置在那儿,所以密码等一些其它细节都忘的差不多了,所以今天就重新部署了一下,并开始积极使用......... 1,git ...

  10. 分布式管理系统-git安装及配置

    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 安装完成后,还需要最后一步设置,在命令行输入: $ git config - ...

随机推荐

  1. 远程重启IIS服务

    方法一: $UserName = "administrator" $serverpass = "pass" $server = "10.4.19.60 ...

  2. Android 如何更换屏幕上锁界面背景图片

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  3. hibernate 使用C3P0数据源

    1.导入jar包: hibernate-release-4.3.5.Final/lib/optional/*.jar 2.增加配置: <!-- 配置 C3P0 数据源 --> <pr ...

  4. UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。

    tapGesture.delegate = self; - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shoul ...

  5. Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).

    The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...

  6. 数据结构与算法分析(2)——表、栈和队列

      抽象数据类型     抽象数据类型(ADT)是一系列操作的集合.诸如表.集合.图和他们的操作一起可以看做是抽象数据类型 表 List 表的实现有两种:数组和链表.数组实现的表在插入和删除操作上的花 ...

  7. 主机开启后,显示器显示NO SIGNAL,无信号

    第一个原因:有可能是主机和显示器的连线接触不良(特别是接口处没有插好或者松动),还有可能这根连接的数据线出现问题,所以才会出现没有信号输入到屏幕,无显示,黑屏,处理方法:重新拨插一下这根连接的数据线, ...

  8. [转]Creating Unit Tests for ASP.NET MVC Applications (C#)

    本文转自:http://www.asp.net/mvc/tutorials/older-versions/unit-testing/creating-unit-tests-for-asp-net-mv ...

  9. C语言的变量的作用域和生存期

    一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令:      2)初始化数据段(数据段)——在 ...

  10. mstsc 终端服务器超出了最大允许连接的解决办法

    终端服务器超出了最大允许连接的解决办法   win7系统:运行,输入mstsc /v xxx.xxx.xxx.xxx /admin win2003系统:运行,输入mstsc /v xxx.xxx.xx ...