一、相关概念

版本控制

什么是版本控制?

  • 用于管理多人协同开发项目的技术
  • 对文件的版本控制,要对文件进行修改、提交等操作

版本控制的分类

1.本地版本控制

就是放在本地

2.集中版本控制 SVN

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

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

3.分布式版本控制 Git

  • 每个人都拥有全部的代码。(这也有安全隐患,程序员跑路泄密)
  • 每个用户都有所有的版本数据,可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
  • 每个用户都有所有版本数据,有一个用户的设备没有问题就可以恢复所有的数据。
  • 不会因为服务器损坏或者网络问题,造成不能工作的情况!可以先在本地写代码不提交。

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

GIT和SVN的区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

通常这俩是公司使用最多的,而Git则是最流行的,无脑学Git就行,后期用到其他的再学也容易。

二、Git的下载与配置

下载、安装、卸载

1.下载链接

Git官网下载:速度可能较慢

Git镜像:GITCNPM Binaries Mirror

2.安装方法

无脑下一步即可!选择路径,其他默认即可。
3.如何卸载

  1. 删除环境变量,和Git相关的
  2. 卸载Git

启动方式

开始菜单会有三个选项:分别代表不同的启动方式,Windows和Linux命令行语句有些差别。

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

Git配置相关命令

下面只写一些Git相关的,其他一些基础的可以参考这篇文章 *http://t.csdn.cn/WUFu5*

#清屏
clear
#查看历史记录
history

#查看系统(system)配置
git config --system --list

#查看当前用户(global)配置
git config --global  --list

#global配置名称
git config --global user.name "GDM"

#global配置邮箱
git config --global user.email 24736743@qq.com

配置文件

Git配置文件位置:

  • Git\etc\gitconfig:Git安装目录下的gitconfig --system系统级
  • C:\Users\19396\.gitconfig:全局/用户(global)配置

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

忽略文件

我们写项目都会有一个 .gitignore文件,它告诉 git 不要跟踪特定的文件、目录或文件类型。

并不是编程项目中的每个文件都非常重要,需要由GIT进行跟踪。许多文件是在特定机器或操作系统上编译代码的特定结果,不应由版本控制进行跟踪。例如,两个人在两个不同的操作系统上可能会从相同的代码生成两个不同的可执行文件。虽然可执行文件可以在一台机器上运行,但它可能会给另一台机器带来严重的问题。由于这些原因,我们在检入代码时使用 .gitignore 文件来过滤掉不需要的文件。

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

  1. 忽略文件中,使用#注释

  2. 可以使用Linux通配符,例如:*代表多个字符,?代表一个字符

  3. !表示例外规则,将不被忽略

  4. / 表示仅忽略此目录下的文件

  5. //表示忽略子目录下该名称的子目录,二位文件

    *.txt		#忽略所有以 .txt结尾的文件
    !lib.txt	#但lib.txt除外
    /temp		#仅忽略项目根目录下的TODO文件,不包括其他目录teml
    build/		#忽略build/目录下的所有文件
    doc/*.txt	#忽略doc/notes.txt,但不包括doc/server/arch.txt
    

三、Git核心基本理论

四个区域

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

1.工作目录(Working Directory)

即进行开发改动的地方,是当前看到的,内容也是最新的,平常开发就是拷贝远程仓库中的分支,基于该分支进行开发,在开发的过程就是在工作区的操作。

2.暂存区(Stage/Index)

位于.git目录下的index文件,暂存区会记录 git add 添加文件的相关信息(文件名、大小),不保存文件实体,通过 id 指向每个文件的实体。

.git是隐藏文件夹,要勾选起来 显示隐藏文件夹选项 才能看到。

使用 git status 可以查看暂存区的状态,暂存区标记了当前工作区中那些内容是被 git 管理的,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add 先提交到暂存区。

3.本地仓库(Repository或Git Directory)

位于自己的机器,本地仓库保存了被提交过的各个版本,比起工作区和暂存区的内容,它更旧一些。

首先是 git commit 同步 index 的目录树到本地仓库,然后通过 git push 同步本地仓库到远程仓库。

4.远程的git仓库(Remote Directory)

位于托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改。比起本地仓库,远程仓库通常旧一些,因此本地仓库修改完之后需要同步到远程仓库。

文件的四种状态

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

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

在idea中也有颜色提示

  • 绿色——已经加入控制暂未提交
  • 红色——未加入版本控制
  • 蓝色——加入,已提交,有改动
  • 白色——加入,已提交,无改动
  • 灰色——版本控制已忽略文件
  • 黄色——被git忽略,不跟踪

上面说文件有四种状态,可以根据下面的命令查看文件状态

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

#查看所有文件状态
git status

#添加所有文件到暂存区
git add .

#提交到本地 -m 提交信息
git commit -m

#提交到远程
git push

四、Git

项目的创建和克隆

一种是创建全新的仓库,另一种是克隆远程仓库。

1.提交已存在的本地仓库

  1. 在你需要的位置鼠标右键 git bash here,输入命令git init

  2. 把你的项目移动到 这个文件夹内

  3. 查看当前状态git status,用于显示工作目录和暂存区的状态,红色的字体显示的就是你修改的文件,绿色是没提交过的文件。

  4. 提交文件到git缓冲区,git add . 或者 git add [filename]

  5. 提交文件到本地仓库git commit –m "备注描述"

  6. 提交文件到远程仓库 git push git push origin master

2.克隆远程仓库

在你需要的位置鼠标右键 git bash here,输入命令 git clone [HTTPS]

Git原理详解+指令操作,带你快速掌握Git-LMLPHP

Git的分支

在实际的项目中通常不同的小组负责不同的开发模块,这时候可以创建几个功能分支,当这些功能测试完成后,再合并到主分支。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]$ git branch -dr [remote/branch]

五、Git指令总结

帮助

git help 显示有关git的帮助信息

  • 如果git help 后面没有参数,命令行将会打印出git命令的概要和最常用的git命令。
  • 如果git help 后面有-all或者-a参数,命令行将会打印出所有可用的git命令。
  • 如果git help 后面有-guide或者-g参数,命令行将会打印出有用的git指南。
  • git --help 与 git help 相同,因为前者被内部转换为后者。
  • 举栗子:如果想要查看pull命令如何使用,则可以使用git help pull命令,按键盘中的q键可退出

新建代码

# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init [project-name]

# 下载一个项目和它的整个代码历史
git clone [url]

配置

#显示当前的Git配置
git config --list

#编辑Git配置文件
git config -e [--global]

#设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

代码库
git init

新建一个目录,将其初始化为Git代码库

git init [project-name]

下载一个项目和它的整个代码历史

git clone [url]



## 配置

```bash
#显示当前的Git配置
git config --list

#编辑Git配置文件
git config -e [--global]

#设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"
06-10 19:22