一:Git简介

1.1:VCS的历史

Git是一款代码管理工具(Version Control System),傲视群雄,是目前世界上最先进的免费开源的分布式版本控制系统,没有之一!

VCS版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn,git等。

1.本地版本控制

通过保存并管理文件补丁的方式,来记录对应文件修订前后的内容变化。目前最为流行的一种本地版本控制系统是rcs,所以,根据每次修订后的补丁,rcs可以通过不断打补丁,计算出各个版本的文件内容。当然这样做之后,对于本机被管理文件可以做到版本回滚或者回退,但是对于处在不同系统上的开发者要进行协同工作,就遇到了问题。于是也就有了“集中式版本控制工具”。

2. 集中式版本控制

集中式版本控制系统(Centralized Version Control Systems,简称 CVCS),版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器

这么做最显而易见的缺点是中央服务器的单点故障。如果维修一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

相比老式的VCS,每个人能看到项目中其他人在干嘛,管理员也可以控制每个开发者的权限,但是一个致命的缺点就是中央服务器的单点故障。如果发生,谁都无法提交更新,无法协同工作,甚至有丢失数据的风险。至此,后来产生了“分布式版本控制工具”。

3. 分布式版本控制

客户端并不是提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来,分布式,当我们连接共享版本库时,可以先将服务器上的项目,克隆到本地,相当于每一台电脑上都有整个项目的文件备份,在没有网时也可以开发,完成开发后,可以先提交到本地仓库,当有网的时候,再提交到共享版本库,这样一来,如果我们的服务器或者我们自己的电脑出故障,我们也没有任何担心的。

1.2:Git的历史

起初参与Linux开源项目的代码是由Linus Torvalds本人通过“diff”和“patch”命令来手动为别人整合代码的。随着项目越做越大,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满。

diff介绍

diff  A  B  > C

1.diff 命令比较文本文件。它能比较单个文件或者目录内容。

2.diff 命令只有当输入为文本文件时才有效。

3.如果指定了 Directory1 和 Directory2 参数,diff 命令比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

4.diff命令用于比较两个文件的差异,它可以被制作成补丁文件,使用patch命令对相应的文件打补丁。

Patch: 补丁

于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

直到2005年,Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!Git也由此诞生了。

有人说:“Git的出现,使得其他国家和美国的计算机水平差距拉近了30年!!!”

1.3:Git和SVN的区别

  1. Git是分布式,SVN是集中式
  2. Git的每个历史版本存储的是完整的文件,而SVN只是存储文件的差异
  3. Git可以离线完成大部分操作,SVN不可以
  4. Git有着更优雅的分支和合并实现
  5. Git有更强的撤销修改和修改版本历史的能力
  6. Git速度更快,效率更高

1.4:Git和Github的关系

  1. Git是一个分布式的版本控制系统;

2.GitHub是一个基于Git的项目托管平台,它提供了web界面,我们可以在上面创建资源仓库来存放你的项目;

3.在本地或服务器创建一个资源仓库通过shell命令或图形用户界面可以和远端的GitHub进行项目同步更新,实现对项目的管理。

二:Git的安装

2.1:下载git客户端

链接:https://pan.baidu.com/s/1r-XCZtqA8qgdEKbPWo6rTA

密码:y4k3

2.2:安装git

2.3:可能出现的问题

这时候 以管理员身份运行cmd命令

msiexec /package 你将要安装的程序的完整路径及程序名 (注意空格)

例如:  msiexec /package e:\git\xxx文件名  回车即可

三:Git入门

3.1:基本配置

我们本地仓库中的代码最终是要上传到GitHub中,而在上传的时候,必须要指定我们的信息,包括用户名和邮箱地址!方便团队或者项目组中其他人员知道是谁修改或者上传了代码!

所以我们首先要设置用户名和邮箱地址!

1.设置用户名和邮箱

安装成功之后,右键点击桌面空白位置===》Git Bash Here

git config --global user.name 用户名

git config --global user.email  邮箱地址

2. 修改用户信息

vim  ~/.gitconfig

在这个文件中也可以,新增name和email

3. 删除用户信息

如果有多个用户,想删除指定的用户可以使用

git config --global --unset user.name 用户名

3.2:基本操作

1. 创建本地仓库

git init

2. 创建并编辑文件

vim  gitDemo.txt

内容如下

3. 将文件新增到暂存区

我们刚才创建的gitDemo.txt文件虽然在我们的仓库目录下,但是并没有被仓库所管理!

需要使用git add让文件被仓库管理(进入暂存区)

4.将文件提交到历史仓库

5.对文件进行修改

此时,我们对修改的文件有两种处理方式!

  1. 确实需要修改,那么我们使用git add将文件放进暂存区
  2. 如果是误修改,我们可以将文件回滚到之前的版本

6.对比文件差异

7. 撤销修改

这里的撤销指的是,我们修改的文件还没有被提交到暂存区!

之后,还有一种方式是===》已经提交到了暂存区之后怎么撤销?

3.3:工作区,暂存区,历史仓库

1.基本描述

我们使用了git init初始化git仓库之后,在文件夹中会多出一个.git隐藏文件夹!

这个.git隐藏文件夹就是git的版本库repository。

我们创建的myRepertory文件夹就是工作区 working directory。

暂存区:暂存区可以理解为一个虚拟工作区,这个虚拟工作区会跟踪工作区的文件变化(增删改等操作)。这个工作区的位于.git文件夹下的index目录下

2.注意点

  1. 当需要对工作区的修改提交到版本库前,暂存区会与工作区进行差异比较,如果工作区与暂存区的文件不一致,那么需要同步工作区的修改到暂存区,然后才可以提交到版本库;
  1. 暂存区可以说是工作区和版本库的桥梁,我们对文件的修改可以先放在暂存区中,如果后悔了不仅可以非常方便撤销,而且不会影响到现有的版本库;
  1. 只要我们使用过git add,那么文件就会被跟踪,暂存区跟踪记录了工作区的文件名和文件状态(在index文件中会记录修改时间,文件大小等信息);
  1. 下次我们对文件进行修改的时候,会比较时间戳来判断文件是否被修改,

在执行git status时,首先会到.git/index下查看被跟踪的工作区文件的时间戳,如果发现自上次执行git add(执行git add可以让工作区的文件被跟踪)以来,文件的时间戳发生了变化,那么判断文件发生了改动,于是会与暂存区的原始文件与工作区中的该文件进行差异比较,如果发现两个文件内容不一致,那么就给出差异信息。

3.实例演示

3.4:查询历史提交记录

1. git log

2. git log --pretty=oneline

也可以查询某个指定文件的提交历史

3.git reflog

4.git log和git reflog的区别

01.Git log查询的是commit id,作者以及提交时间和提交信息

但是不包括之前删除的历史记录

02.git reflog查询的是简洁的commit id和提交信息

也会包含之前删除的历史记录

3.5:回退历史版本

git  reset  版本ID

3.6:撤销修改

这里的修改,就是我们的文件已经到达了暂存区了,需要把修改的文件还原到工作区!

3.7:误删除工作区的文件

3.8:真正删除文件

git和githup的更多相关文章

  1. git、githup使用

    一.git安装.配置 git安装: root@ubuntu~# apt-get  install  git git配置githup/自己的git服务器端账号, 即在用户的home目录下生成.gitco ...

  2. git关联githup和码云

    1.与已有的本地仓库关联git remote add origin git@github.com:michaelliao/learngit.git然后就可以协作开发push与pull 2.第二种方法直 ...

  3. Git 安装与使用(一)

    一.简介 1.集中式版本控制系统(CVS):Svn     * 版本库是集中存放在中央服务器中的,客户端需要先从中央服务器取得最新的版本,然后再干活,活干完后,再把自己的代码推送给中央服务器.    ...

  4. git学习记录——远程仓库(说白了就是代码放到githup上)

    远程仓库 现在讲述的这些SVN都已经做到了,并没什么稀奇的地方 所以这节课赘述的是杀手级的东西——远程仓库githup ssh-keygen -t rsa  -C "xxxxxxxxxxx@ ...

  5. git的使用学习(七)githup和码云的使用

    1.使用GitHub 我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开 ...

  6. 1.Git & GitHup

    1.常见的版本控制(管理代码的版本迭代)工具: @ svn:集中式版本控制系统: SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里 ...

  7. git分布式版本控制玩法

    git分布式版本控制玩法 Git distributed version control play github的配置安装步骤:1.下载git bash(从http://www.git-scm.com ...

  8. Git下载Spring项目源码并编译为Eclipse

    1)当前系统中安装了gradle,如果为安装,可以从:http://www.gradle.org/downloads,,下载完后进行解压到任意盘符,然后增加环境变量GRADLE_HOME,并在环境变量 ...

  9. Git使用命令

    git init 初始化仓库 git init --bare 初始化一个裸仓库 git branch 查看本地分支 git branch -a 查看全部分支 git remote 远程仓库管理 add ...

随机推荐

  1. JavaScript 事件(捕获和冒泡 兼容性写法)

    事件    浏览器客户端上客户触发的行为都称为事件 所有的事件都是天生自带的 不需要人为绑定 只需要我们去触发通过obj.事件名=function(){} 我们给元素的事件绑定了一个方法 事件名:on ...

  2. 17 | 精益求精:聊聊提高GUI测试稳定性的关键技术

  3. Fabric1.4源码解析:链码实例化过程

    之前说完了链码的安装过程,接下来说一下链码的实例化过程好了,再然后是链码的调用过程.其实这几个过程内容已经很相似了,都是涉及到Proposal,不过整体流程还是要说一下的. 同样,切入点仍然是fabr ...

  4. HDU 5113:Black And White(DFS)

    题目链接 题意 给出一个n*m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同. 思路 以为是构造题,结果是爆搜.对于每一 ...

  5. Ng-Matero:基于 Angular Material 搭建的中后台管理框架

    前言 目前市面上关于 Angular Material 的后台框架比较少,大多都是收费主题,而且都不太好用. 很多人都说 Material 是一个面向 C 端的框架,其实在使用其它框架做管理系统的时候 ...

  6. [常用命令]OSX命令

    在mac os下,如何通过命令行来下载网络文件?如果你没有安装或wget命令,那么可以使用curl工具来达到我们的目的. curl命令参数: curl ‘url地址’ curl [选项] ‘url地址 ...

  7. Unix及Linux编辑器vi/vim基本使用方法

  8. 从四个属性的角度来理解C语言的指针也许会更好理解

    文章会在文末更新! 关于指针是什么,很多教材已经作出了定义,大多数都会定义为"存放变量内存地址的变量".从这句话中我觉得除了让我知道这个定义有11个字以外,其他就没什么用了.我个人 ...

  9. I/O:DataInput

    DataInput: boolean readBoolean() :读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false. byte readByte() :读取并返回一 ...

  10. C#中对EXCEL保存的SAVEAS方法说明

    这两天做的导出报表的项目中,因为出现了一些问题所以对于excel一些方法参数有了一些认识, 首先:开始生成的是.xls格式的excel文件,但是某个sheet发现我本来dataTable的数据有8万多 ...