Git教程

一、什么是版本控制

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

常见的操作有查看更改历史记录,备份以便恢复以前的版本,是管理多人协同开发项目的技术。

无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段,版本控制工具在这时候起到很重要的作用。

image

二、版本控制分类

2.1、本地版本控制:RCS

对文件的每次更新做一个快照,或者是记录补丁文件,适合个人用,如RCS。

image

2.2、集中版本控制 SVN CVS VSS

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

  • 所有数据都在服务器上,不了网查看不到历史版本,无法切换版本验证,在不同分支工作麻烦。
  • 数据集中保存在单一服务器上,服务器崩溃时容易导致数据丢失。
  • 需要定期备份。

image

2.3、分布式版本控制 Git

  • 所有版本数据同步到本地每个用户。
  • 可以本地查看版本历史,离线本地提交,在联网是push到相应的服务器或其他用户即可。
  • 由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
  • 每个人都拥有全部的代码!安全隐患!
  • 不会因为服务器损坏或者网络问题,造成不能工作的情况!

image

2.4、Git与SVN的主要区别

  • Git是分布式的,SVN是集中式的。Git可以在离线本地操作文件,只需在联网时push即可,而SVN断网不可工作。
  • Git复杂概念多,SVN简单易上手。Git是命令各种秀,SVN对新手友好一点,一般大型项目用Git的较多。
  • Git分支廉价,SVN分支昂贵。SVN分支说多了都是泪。
  • Git基本没有权限管理,SVN不同用户不同权限。

Git是目前世界上最先进的分布式版本控制系统。

三、聊聊Git的历史

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
  • **2、Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  • **3、Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  • **4、Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  • **5、Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

Linux社区中存在很多的大佬!破解研究 BitKeeper !

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。(2周左右!) 也就是后来的 Git!

Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!

image

Linux和Git之父李纳斯·托沃兹(Linus Benedic Torvalds)1969、芬兰

四、Git环境配置

4.1、软件下载

下载地址:https://git-scm.com/downloads

image

选择对应的版本,一直next安装即可。

4.2、启动Git

安装成功后在开始菜单中会有Git项,菜单下有5个程序:任意文件夹下右键也可以看到对应的程序!

image

其中最常用的以下这三个

  • Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
  • Git CMD:Windows风格的命令行
  • Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

4.3、Git配置

所有的配置文件,其实都保存在本地!

查看配置 git config -l

image

  • 查看系统配置文件:git config --system --list
  • 查看当前用户配置文件:git config --global --list

Git相关的配置文件:

1)Git\etc\gitconfig:Git 安装目录下的 gitconfig --system 系统级

2)C:\Users\Administrator\ .gitconfig :只适用于当前登录用户的配置 --global 全局,此文件可能要设置用户名称和邮箱后才生成,如果存在可以直接编辑。

image

设置用户名与邮箱(用户标识,必要)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "F856483200"			# 名称
git config --global user.email "F856483200@163.com"	# 邮箱

只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。总之–global为全局配置,不加为某个项目的特定配置。

image

五、Git基本理论

5.1、三个区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

image

  • Working Directory:工作区,就是你平时存放项目代码的地方;

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。

  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

  • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
  • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
  • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

5.2、工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

image

六、Git项目搭建

6.1、创建工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。

常用指令

image

6.2、本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

6.2.1、创建全新仓库

执行 git init 命令在当前目录新建一个Git代码库。执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

image

6.2.2、克隆远程仓库

克隆远程目录,是将远程服务器上的仓库完全镜像一份至本地!

执行 git clone [url] 命令克隆远程服务器信息,git服务器可以再 gitee 或者 github 上创建。

例如:git clone https://gitee.com/btlx/git.git

image

七、Git文件操作

7.1、文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制,通过 git add 状态变为 Staged
  • Unmodify: 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改,而变为 Modified 。 如果使用 git rm 移出版本库,则成为 Untracked 文件。
  • Modified: 文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过 git add 可进入暂存 staged 状态, 使用 git checkout 则丢弃修改过, 返回到 unmodify 状态, 这个 git checkout 即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行 git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存, 文件状态为 Modified

7.2、查看文件状态

# 查看指定文件状态
git status [fileName]

# 查看所有文件状态
git status

# git add .                  添加所有文件到暂存区
# git commit -m "消息内容,备注"    提交暂存区中的内容到本地仓库 -m 提交信息

7.3、忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立 .gitignore 文件,此文件有如下规则(匹配规则和linux文件匹配一样):

  • 以斜杠 / 开头表示目录
  • 以星号 * 通配多个字符
  • 以问号 ? 通配单个字符
  • 以方括号 [] 包含单个字符的匹配列表
  • 以叹号 ! 表示不忽略(跟踪)匹配到的文件或目录
# / 表示 当前文件所在的目录
# 忽略public下的所有目录及文件
/public/*
# 不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets

# 忽略具体的文件
index.php

# 忽略所有的php
*.php

# 忽略 a.php b.php
[ab].php

八、IDEA集成Git

  1. 新建项目绑定Git,将我们的远程Git文件拷到项目目录中即可

image

image

  1. 修改文件,使用IDEA操作Git

image

  • 更新项目
  • commit 提交
  • push到远程仓库

九、常见错误

fatal: not a git repository (or any of the parent directories): .git

解决办法:

在目录下执行 git init 命令,然后在执行之前报错的命令。

十、常用命令

  • 新建一个本地分支 git checkout -b 分支名称

image

  • 查看现在分支状态

image

星号(*)表示当前虽在分支,现在状态是成功新建了一个分支并切换到这个新的分支上。

使用 git push origin code:code 命令把新建的本地分支push到远程服务器,远程分支名称随意。

image

  • 查看所有分支 git branch -a ,有 remotes/origin/code 这个远程分支,说明新建远程分支成功。

image

  • 删除远程分支,推送一个空分支到远程分支,其实就相当于删除远程分支, git push origin :远程分支名称

image

  • git push origin --delete 远程分支名称

image

  • git checkout 分支名称 切换分支

image

  • 删除分支上的文件
git rm 文件名
git rm -r 文件夹名

git commit -m "remove file"
git commit -m "remove files"

git push origin 分支名称
  • 添加一个或多个文件到暂存区 git add [file] [file2]

  • 添加指定目录到暂存区,包括子目录 git add [dir]

  • 添加当前目录下的所有文件到暂存区 git add .

  • 把暂存区代码提交到服务器 git commit -m "备注"

  • 更新代码 git pull

  • 查看历史提交记录 git log

  • 以列表形式查看指定文件的;历史修改记录 git blame <file>

  • 查看历史提交记录简介版 git log --oneline

  • 合并分支 git merge 分支名称

合并之前先 git pull 在合并

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little Tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值