VCS的历史 :

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

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

1.本地版本控制

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

2. 集中式版本控制

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

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

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

3. 分布式版本控制

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

Git的历史 :

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

diff介绍

diff  A  B  > C

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

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

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

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

Git和SVN的区别

1. Git是分布式,SVN是集中式

2. Git的每个历史版本存储的是完整的文件,而SVN只是存储文件的差异

3. Git可以离线完成大部分操作,SVN不可以

4. Git有着更优雅的分支和合并实现

5. Git有更强的撤销修改和修改版本历史的能力

6. Git速度更快,效率更高

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

可能出现的问题

这时候 以管理员身份运行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  邮箱地址

1. 修改用户信息

vim  ~/.gitconfig

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

2. 删除用户信息

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

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

基本操作

创建本地仓库

git init

1. 创建并编辑文件

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. 当需要对工作区的修改提交到版本库前,暂存区会与工作区进行差异比较,如果工作区与暂存区的文件不一致,那么需要同步工作区的修改到暂存区,然后才可以提交到版本库;

2. 暂存区可以说是工作区和版本库的桥梁,我们对文件的修改可以先放在暂存区中,如果后悔了不仅可以非常方便撤销,而且不会影响到现有的版本库;

3. 只要我们使用过git add,那么文件就会被跟踪,暂存区跟踪记录了工作区的文件名和文件状态(在index文件中会记录修改时间,文件大小等信息);

4. 下次我们对文件进行修改的时候,会比较时间戳来判断文件是否被修改,

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

3.实例演示

3.4:查询历史提交记录

1. git log

1. 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--之本地仓库的更多相关文章

  1. github仓库主页介绍、用git管理本地仓库和github仓库、搭建网站

    github仓库主页介绍 名词解释: 工作区: 添加.编辑.修改文件等动作 暂存区: 暂存已经修改的文件,最后统一提交到git中 git(仓库): 最终确定的文件保存到仓库,成为一个新的版本,并且对他 ...

  2. Git单人本地仓库操作

    本地仓库是个.git隐藏文件 以下为演示Git单人本地仓库操作 1.安装git sudo apt-get install git 密码:skylark 2.查看git安装结果 git 3.创建项目 在 ...

  3. 和同事合作开发,使用局域网 git创建本地仓库

    转自原文 和同事合作开发,使用局域网 git创建本地仓库 1.仓库 建一个空文件夹来做仓库,例如建为 cangku 1.1 cd 到 cangku目录下 创建远程仓库容器 mkdir  mycangk ...

  4. 使用Git初始化本地仓库并首次提交代码

    本文介绍使用Git初始化本地仓库,并首次提交代码到远程仓库GitLab上面. 首先,登录GitLab,创建一个新项目的私人仓库: 然后,在本地仓库(就是你写代码文件夹),右键,Git Bash Her ...

  5. 使用 Git 删除本地仓库和远端仓库文件

    使用 git bash 来删除 一.将文件(夹)添加到暂存区 这里假设本地和远端都有一个 test.txt 文件先在本地删除,通过 ·git status 查看通过git add test.txt 添 ...

  6. Git创建本地仓库&把pycharm项目添加GitHub仓库上

    一.创建本地仓库 1.1.下载Git地址:https://git-scm.com/downloads 下载完,一路next就可以 1.2.打开Git Bash输入: #创建一个learngit目录 $ ...

  7. git原理-本地仓库认识

    项目人员使用git,几乎70%的工作都是在本地仓库完成的.由此可见本地仓库的重要性. 下面我们就通过一些基本的命令讲下git的本地仓库的结构,存储流程,数据类型,如何存储...... 仓库结构 大家都 ...

  8. 如何使用Git建立本地仓库并上传代码到GitHub

    使用Git建立本地仓库并上传代码到GitHub 工具/原料   电脑安装git客户端.注册github账号并登陆 方法/步骤     到本地项目文件夹右键选择git bash here   输入个人信 ...

  9. Git创建本地仓库

    使用Git创建本地仓库, 可以记录文本文件变化, 这里以自己的文章为例, 利用TortoiseGit工具创建一个本地Git仓库. 1. 切换到需要创建仓库的目录下, 比如:D:\MyDoc\Devel ...

  10. Git 创建本地仓库

    前面已经搭好环境了,现在我们缺的是一个管理版本控制的仓库.这次的实验是在电脑本地创建本地仓库.指定路径 默认的位置是在你所安装Git的目录下.Git的仓库你可以建在你电脑的任何目录下(最好不要包含有中 ...

随机推荐

  1. 【BZOJ3209】花神的数论题 数位DP

    [BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级 ...

  2. 【BZOJ3998】[TJOI2015]弦论 后缀自动机

    [BZOJ3998][TJOI2015]弦论 Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T ...

  3. 2015-03-06——ajax基础

    IE6  必须使用Microsoft.XMLHTTP ActiveX组件来实例化一个对象 IE7已实现了XMLHttpRequest对象 var request = new ActiveXObject ...

  4. What are DESC and ASC Keywords?

    What are DESC and ASC Keywords? ASC is the short form for ascending DESC is the short form for desce ...

  5. Wireshark网络分析工具(二)

    一.TCP三次握手过称 1. 第一次握手的数据包 客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接. 如下图: 2. 第二次握手的数据包 服务器发回确认包, 标志位为 SYN ...

  6. 让phpstorm 支持 vue文件并且语法高亮

    1 安装 vue.js 插件 很遗憾,我的win版本没有支持的插件 2 修改文件类型 vue本质上还是html文件,包含了css html js,用html类型文件打开就可以 给html 文件添加 * ...

  7. matlab学习笔记之求解线性规划问题和二次型问题

    一.线性规划问题 已知目标函数和约束条件均为线性函数,求目标函数的最小值(最优值)问题. 1.求解方式:用linprog函数求解 2.linprog函数使用形式: x=linprog(f,A,b)  ...

  8. windows下 安装python_ldap MySQL-python

    //////////////////////////////////////////////////// 失败  ----------------------------------------  F ...

  9. 剑指offer 面试32题

    面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...

  10. android 对话框中的进度条 (ProgressDialog)

    from:http://byandby.iteye.com/blog/817214 显然要定义对话框进度条就要用ProgressDialog,首先我们需要创建ProgressDialog对象,当然这里 ...