前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享,查看下部请点传送门

Git介绍

​ Git是目前世界上最先进的分布式版本控制系统。并且它是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git功能

​ 我们先看一下Git的主要功能,从一般开发者的角度来看,git有以下功能:

  • 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
  • 在自己的机器上根据不同的开发目的,创建分支,修改代码。
  • 在单机上自己创建的分支上提交代码。
  • 在单机上合并分支。
  • 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
  • 生成补丁(patch),把补丁发送给主开发者。
  • 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
  • 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

​ 从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:

  • 查看邮件或者通过其它方式查看一般开发者的提交状态。
  • 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
  • 向公共服务器提交结果,然后通知所有开发人员。

Git的优缺点

​ ️ 优点:

  • 适合分布式开发,强调个体。
  • 公共服务器压力和数据量都不会太大。
  • 速度快、灵活。
  • 任意两个开发者之间可以很容易的解决冲突。
  • 离线工作。

​ 缺点:

  • 资料少(起码中文资料很少)。
  • 学习周期相对而言比较长。
  • 不符合常规思维。
  • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

​ 那为什么要用版本控制系统呢?

  • 更方便地存储版本。
  • 更方便地进行比对。
  • 可以恢复之前的版本。
  • 协同合作。

Git安装及账户配置

下载

​ 在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行,各平台安装包都可以在官网中找到,选择你需要的平台下载安装即可。windows的推荐使用这个下载地址,速度相对官网会更快。

安装

​ 下载后安装,直接一路点击next安装即可。

​ 安装完成后,在文件夹中右击,看到下面两个git选项,就说明git安装成功了。

查看Git版本

​ 在文件夹中右击,点击Git Bash Here打开git命令行窗口,输入git --version就可以查看git的版本信息了。

​ 如果安装的版本较旧,想要升级最新版,可以使用git update-git-for-windows命令一键升级到最新版。当然,你也可以直接在官网下载最新版的手动安装。

配置用户名和邮箱

​ 初次安装Git时都需要配置一个用户名和邮箱,否则使用过程会出现警告信息如:please tell me who you are。

相关配置命令

  • git config --global user.name "用户名":配置用户名
  • git config --global user.email "邮箱地址":配置邮箱
  • git config --global --list:查看全局配置列表

​ global 表示全局,表示你这台机器上所有的Git仓库都会使用这个配置,提交项目内容时就会以配置的账户署名,当然你也可以对某个仓库指定不同的用户名和邮箱,也可以针对操作系统进行配置,配置命令几乎是一样的。

git config --local:只对指定的仓库有效,如果不指定时(即git config)默认是配置local,之一如果要指定仓库,配置时要先切换到对应仓库的目录。

git config --system:对操作系统的所有用户有效。

创建Git仓库

​ 仓库(即版本库)是什么?简单来说它就是一个目录,这个目录下的所有文件都可以使用git管理起来,对文件进行的增删改操作都会被记录下来,之后任何时刻都可以去查看这些历史记录,并且可选择回退到某一个时间点的该仓库的版本。

​ 创建git仓库有两种方式:

方式一

git init:已经手动创建了一个目录,直接把该目录变成一个git仓库。

​ 在已经创建好的目录下右击,点击Git Bash Here,输入git init回车,你会发现你的目录下多了一个.git文件夹,你可以点击进去看一下,这个文件夹是git用来跟踪管理仓库版本信息的,因此不要去修改里面的任何文件,否则会损坏仓库的版本信息。(如果你看不到这个文件夹,可以在文件设置中设置显示隐藏的文件,但强烈建议隐藏,避免误操作破坏仓库)

方式二

git init 仓库名:新建一个git仓库

​ 在你想要创建仓库的目录下右击,点击Git Bash Here,输入git init 仓库名回车,就会在该目录下创建一个git仓库,并且仓库内会生成一个.git文件夹。

提交版本

​ 这里先科普一下两个名词,工作区和暂存区。

​ 工作区就是你在电脑中能看到的目录,比如我现在新建一个learn文件夹,这个文件夹就是一个工作区。问题来了,我在前一章中创建的my_git仓库它是不是工作区呢?答案是否,它就是一个仓库,一个版本库,版本库里存了很多的东西,其中最重要的一个就是暂存区(stage也叫index),如图:

​ 我们提交版本时,是分两步执行的,第一步先把对文件的操作从工作区添加到暂存区,第二步再把暂存区的所有操作提交到当前分支,我们创建git仓库时,git会默认创建了一个master分支,因此我们未创建其他分支时,提交版本是默认提交到master分支上的。

​ 另外一点,我们要知道的是,所有的版本控制系统,都只能跟踪文本文件类的改动,比如:txt文本,html网页文件、py文件、css、js等程序代码,版本控制系统可以清楚地记录每个版本的改动,但是像图片、视频、mp3这些二进制文件,虽然也能由版本控制系统管理,但无法跟踪文件的具体变化,只能简单地记录某些变动的地方,比如图片从100kb变成250kb,但是图片替换了还是调整了像素,具体到底改了什么,版本控制系统是不知道的。

​ 提交版本的相关命令:

  • git add <file>:把指定的文件添加到暂存区
  • git add .:把所在目录下的所有文件添加到暂存区
  • git commit -m '版本信息':把暂存区的操作真正地提交到git仓库
  • git log:查看提交版本的log

​ 我们先创建一个txt文本,以提交txt文本为例,提交后查看日志,日志清晰地记录了提交版本的哈希值、提交人的信息、提交的时间、提交的版本信息。

​ 除了上面的方式提交版本外,还有一种方法可以一步到位,就是使用git commit -a -m '版本信息'来提交,仔细看的话就会发现其实它是把add融合在一起了,想用哪种方式提交都是可以的,看你喜欢啦!

查看版本状态

​ 一般在我们提交版本或对某些文件进行了一些修改时,我们如何知道修改的文件在版本控制系统中处于什么样的状态呢,是修改中、已添加到暂存区还是已经提交到仓库了呢?我们可以通过以下命令行来查看版本的状态,也可以说是查看工作区的状态。

  • git status:查看工作区的状态
  • git status -s:以简洁的方式查看工作区的状态
  • git status --short:与上一个命令是一样的效果

工作区干净时

​ 没有任何文件处于修改或添加中时:

文件被修改但未提交

​ 在test.txt文本添加一行内容,保存后关闭,再次查看git状态,通过状态信息我们可以看到,test.txt这个文件被标红了,意思是说该文件被修改了,但是还未添加到暂存区,并且提示我们可以使用git add <file>添加文件到暂存区,或者使用git restore <file>丢弃工作目录中的修改。

​ 也就是说在文件被修改后,文件还未添加到暂存区,而你已经关闭文件,又想要把修改的全部撤回,那么就可以使用该命令撤销修改的部分回到这个文件的上一个版本。

​ 比如我修改了test.txt,在最后一行追加了“hello, git!”,使用了撤销命令后,再去查看这个文件,就会发现追加的最后一行已经不见了,还原到了上一个版本。

文件已添加到缓存

​ 把test.txt添加到暂存区后查看状态,text.txt被标绿了,意思是说该文件已经添加到缓存,但是还未提交到仓库,并且提示可以使用git restore --staged <file>把该文件从暂存区中撤销,重新放回到工作区中,放回到工作区中它是修改但未添加到暂存区的状态。

​ 如下图例子,从暂存区撤销后,该文件再次处于被修改但未添加暂存区的状态。

​ 如果选择不撤销,把文件提交到git版本库,那么工作树就会回到干净状态。

简洁的状态信息

​ 上面中我们看到的状态信息都是比较详细的,如果我们不想看到太多信息,可以使用git status -s查看简洁的状态信息,返回的内容分为以下几种:

  • ?? 文件名:该文件是新创建的,还未添加到暂存区
  • A 文件名:该文件是新创建的已添加到暂存区,但还未提交到仓库
  • M 文件名:该文件被修改了,但还未添加到暂存区
  • M 文件名:该文件已添加到暂存区,但还未提交到仓库

​ A就是add的意思,M就是modified。

​ 如果工作树是干净的状态,使用该命令是没有任何信息的。

查看历史版本

​ 顾名思义,就是查看历史提交的版本信息,几个常规查看命令如下:

  • git log:不带参数最基本的查看
  • git log --pretty=oneline:只显示一行
  • git log -p:查看版本之间的差别
  • git log -2:查看最近的2个版本
  • git log -2 p:查看最近的2个版本之间的差别
  • git log --stat:查看大致的统计信息

​ 参数之间是可以组合使用的,下面举几个例子:

忽略特殊文件

​ 有时候我们不想让某些文件被添加到版本控制系统中,比如一些缓存文件,保存了账户信息或数据库密码的配置文件等,那么我们就可以配置.gitignore文件去忽略一些特殊的文件。

​ 首先我们要在工作区的根目录下创建一个.gitignore文件,这个文件名是固定的,如果你直接在操作系统下重命名,可能会提示“必须键入文件名”,我们可以通过编辑器打开文件重新另存为即可。

匹配规则

​ .gitignore文件使用的是glob模式匹配,这个模式匹配有点类似正则表达式,常用的匹配语法如下:

字符 描述
# 注释
* 星号,匹配0个或者任意个字符
[abc] 匹配任何一个在括号内的字符
[0-9] 0-9的字符
? 匹配一个任意字符
/ 结尾指定目录
! 取反,就是否的意思,屏蔽了某文件,使用!后就不会再屏蔽

​ 下面看一下.gitignore配置例子:

# .gitignore文件
# 屏蔽src文件夹
src/ # 屏蔽python缓存文件,python缓存文件有可能是.pyc,.pyo,.pyd
# 使用[cod]匹配三种文件
# *号表示匹配0个或者任意个字符,也就是说只要是.py[cod]结尾的文件都屏蔽掉
*.py[cod] # 也可以精确屏蔽某一个文件
conf.ini

​ 我们先在工作区新建一些对应的文件,看一下提交时是否有屏蔽:

​ 把该工作区的文件全部添加到暂存区,然后提交到仓库,提交后我们可以看到它只提交了.gitignore文件和test_login.py文件。

强制添加

​ 如果你在某些时候提交文件时,发现如何都提交不了,那你可以看一下.gitignore是否配置了忽略,如果你确实想添加这个文件,但又不想把它从忽略中移除,可以使用-f强制添加,即git add -f 文件名

检查规则

​ 还有一种可能,你在配置.gitignore时,可能会因为匹配规则编写时不够严谨,把不应该并屏蔽的文件给屏蔽了,但又不知道是因为哪一条规则引起的屏蔽,我们就可以使用git check-ignore -v <file>命令来检查一下。它会告诉你是.gitignore文件第几行的匹配规则屏蔽了该文件。

版本比对

工作区比对

​ 我们在工作区修改了一些文件,在还没有添加到暂存区时,可能会想要去查看修改后的文件相对于上一个版本具体作了那些修改,这些修改是否合适。我们就可以使用git diff去比对一下当前的修改相对于上一个版本有哪些差别,需要注意的是,修改的文件必须是还未添加到暂存区的,以下为例:

暂存区比对

​ 如果文件已经添加到暂存区,但又想与上一个版本比对一下呢?这时就要加上一个--staged参数去比对,即git diff --staged,用法与git diff是一样的,这里就不做举例了。

版本间比对

​ 除了可以查看当前与上一个版本的区别外,我们还可以指定两个版本查看它们间的区别。我们先查看一下git现在有哪些版本。

​ 然后使用git diff 老版本 新版本然后指定两个版本,来查看它们的区别,我们只需要复制一下版本的部分哈希值即可,注意这里是老版本在前新版本在后,如果反过来的话,返回的对比信息就是新版本在前,老版本在后。

git版本控制系统小白教程(上)的更多相关文章

  1. git版本控制系统小白教程(下)

    前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享,查看上部请点传送门. 删除文件 ​ git删除文件一般有三种情况,第一种是在工作区修改了文件,但是 ...

  2. Google Code项目代码托管网站上Git版本控制系统使用简明教程

    作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这 ...

  3. Git版本控制系统VCS

    Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...

  4. git版本控制系统重新认识

    git 版本控制系统 目标:完全搞懂git分布式版本控制系统 搭建git版本控制系统 cvs集中化版本控制系统--集中式管理的服务器 git分布式版本控制系统--会将原始代码仓库镜像下来 新项目使用g ...

  5. 初识git版本控制系统

    当下git分布式版本控制系统越来越火,掌握git也是必须的一个技能.因此,对git做了如下学习. Git初级指南 1. 先安装git.(ps:在select cmponents处要勾选Git Bash ...

  6. Git版本控制系统之基本使用

    最早是通过接触著名的开源社区Github了解到Git的,但一直没有系统学习过.这次下定决心从头到尾系统的学一学,也将学习过程记录于此,供大家批驳.本篇文章先从以下几个方面简单了解一下Git: Git的 ...

  7. Git 版本控制系统的基本使用、常用操作

    以Ubuntu16.04操作系统为例(其他系统类似),主要记录常用的.基本操作: 0. 安装Git 分散型版本控制系统(CVS): sudo apt-get install git 1. 初始化本地配 ...

  8. 如何选择版本控制系统 ---为什么选择Git版本控制系统

    版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开 ...

  9. git版本控制系统更新

    版本控制系统: 一.概念: 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 二.版本控制系统分类 1.本地版本控制 ...

随机推荐

  1. SpringMVC学习笔记五:HandlerExceptionResolver异常处理

    继承HandlerExceptionResolver自定义异常处理器 控制器ExceptionController.java package com.orange.controller; import ...

  2. Docker企业级镜像仓库harbor(vmware 中国团队)

    第一步:安装docker和docker-compose 第二步:下载harbor-offline-installer-v1.3.0.tgz 第三步:上传到/opt,并解压 第四步:修改harbor.c ...

  3. python 获取表单的三种方式

    条件:urls.py文件中配置好url的访问路径.models.py文件中有Business表. 在views.py文件中实现的三种方式: from app01 improt models def b ...

  4. 吴裕雄--天生自然 R语言开发学习:高级编程

    运行的条件是一元逻辑向量(TRUE或FALSE)并且不能有缺失(NA).else部分是可选的.如果 仅有一个语句,花括号也是可以省略的. 下面的代码片段是一个例子: plot(x, y) } else ...

  5. function_exists (),method_exists()与is_callable()的区别

    is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true.如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方 ...

  6. 台式机安装CentOS7.6 Minimal ISO系统并增加图形化桌面

    需求:公司测试环境因业务原因,需要在台式电脑上安装带桌面的CentOS系统,因同事有一个7.6版本Minimal ISO镜像的安装U盘,为了图方便没有去下载everything ISO镜像,而是待同事 ...

  7. Spring Security基本原理

    近期研究了Spring Security,现进行记录. 首先先进行一个最简单的demo.默认情况下,在Spring Boot里,如果在classpath下面有Spring Security相关的jar ...

  8. Flutter混合开发:Android接入Flutter

    Flutter Google推出已经已经一年多了,单个 Flutter 项目的开发流程已经很成熟了.对与个人开发者来说使用 Flutter 开发一个跨平台的App挺有意思.但是对于现有的项目改造来说还 ...

  9. 人工智能VS投资者:股票市场上谁的胜算更高?

    人工智能研究历史渊源,当人工智能与资本投资,尤其是股票投资相结合或许听起来有些异想天开,但正如科幻作家William Gibson所言:"未来已经到来,只是分布不均." 在股票市场 ...

  10. php获取远程图片并把它保存到本地

    /* *功能:php多种方式完美实现下载远程图片保存到本地 *参数:文件url,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ function getImage( ...