版本控制
学习目标
- 理解版本控制的必要性
- 了解常用的版本控制方式
- 熟悉
Git
的使用方法
什么是版本控制
可以把一个版本控制系统理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节
使用版本控制的好处:
- 作为数据备份
- 版本管理
- 提高代码质量
- 提高协同开发的效率
- 明确分工责任
不只是代码才可以使用版本控制,凡是需要持续修改的文档资料都可以进行版本管理
常用的版本控制软件
现在市面上的控制系统有几十上百种,但是最为流行的版本控制系统为下面三者:
- Git
- Subversion: 简称 SVN
- Mercurial
尽管有着不同的版本控制系统,但其主要类别分为两种:
- 集中式模型:所有用户都连接到一个中央的仓库
- 分布式模型:每个用户都在自己的计算机上拥有完成的仓库。
在集中式模型中,有一台功能强大的中央服务器托管项目。每个每户都必须通过这台中央服务器。
在分布式模型中,没有中央信息库,每个开发者的计算机都有一份完整的项目拷贝。因为每台计算机都有完成的项目拷贝,这就意味着我们可以离线工作,不受网络的限制了。
目前来说,由于 Git
可以离线使用,更加强大,所以 Git
是目前最流行的版本控制方式,本次也会主要讲解 Git
的使用方式。说到 Git
,你可能听说过 GitHub
,Git
和 GitHub
是完全不同的东西。 Git
是版本控制工具,而 Github
是托管 Git
项目的服务。
- github
- coding
- 码云
- gitblit
- gogs
Git 简介
Git的诞生确实是一个有趣的故事,我们知道,当年 Linus 创建了开源的 Linux,从此,Linux 系统不断发展,现在已经成为最大的服务器系统软件了。(请不要傻傻分不清 Linus 和 Linux )
但是随着Linux的不断壮大,就需要各种版本控制了,起初 Linus 带着他的小弟们使用的是 BitKeeper (商业版本控制系统),之后呢由于某种原因 BitKeeper 的公司不让他们使用了,于是 Linus 自己花了两周时间写出了 Git 并且开源了(BitKeeper已哭晕在厕所).
这里先引用一张图解释 Git :

-
Workspace:工作区,即自己当前分支所修改的代码,
git add *
之前的!不包括git add *
和git commit -m 'xxx'
之后的。 -
Index(stage):暂存区,已经
git add *
进去,且未git commit -m 'xxx'
的。执行git add *
命令就把改动提交到了暂存区,执行git pull
命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]
切换分支 -
Repository:仓库区(或本地仓库),执行
git commit -m '说明'
命令就把改动提交到了仓库区(当前分支/本地分支) -
Remote:远程仓库,就是类似 github,coding 等网站所提供的仓库,执行
git push origin master
提交到远程仓库,执行git clone 地址
将克隆远程仓库到本地
Git 术语
Repository
: 仓库, 包括了所有的版本信息、所有的分支和标记信息。在Git中仓库的每份拷贝都是完整的。仓库让你可以从中取得你的工作副本Branches
: 分支, 一个独立的、拥有自己历史信息的代码线, 你可以从已有的代码中生成一个新的分支,这个分支与剩余的分支完全独立, 默认的分支往往是叫master- origin master,origin就是指向某一个repository的指针,这个可以自己定义,不过一般是用origin罢了,master是默认的分支,服务器端的"master"(强调服务器端是因为本地端也有master)就是指向某个repository的一个branch的指针。
Tag
: 标记, 某个分支某个特定时间点的状态, 通过标记,可以很方便的切换到标记时的状态Commit
: 提交, 提交代码后,仓库会创建一个新的版本, 这个版本可以在后续被重新获得\HEAD
指针,表示当前版本,也就是最新的提交3628164...882e1e0
,Git 为我们自动创建的第一个分支是 master,以及指向 master 的一个指针叫 HEADRevision
: 修订, 用来表示代码的一个版本状态
忽略特定的文件
我们可以配置Git忽略特定的文件或者是文件夹,这些配置都放在.gitignore
文件中。这个文件可以存在于不同的文件夹中,可以包含不同的文件匹配模式, 比如.gitignore
内容可以如下:
# 忽略某文件
npm-debug.log
# 忽略文件夹
dist/
node_modules/
.idea/
Bash常用命令
$ cd 文件目录 # 改变/切换 目录
$ cd .. # 退回到上一个目录
$ pwd # 会显示我们当前所在的目录路径
$ ls、ll # 列出当前目录中的所有文件
$ cat 文件名 # 查看当前文件内容
$ touch 文件名 # 创建一个指定名称的新文件
$ mkdir 文件夹名字 # 新建一个目录,即创建一个指定名称的文件夹
$ vim text.txt # 编辑文件内容
$ rm 文件名 # 删除当前目录下指定名称的文件
$ rm -r 文件夹名字 # 删除一个指定名称的文件夹 r(recusive):递归的意思
$ mv 文件 目标文件夹名 # 移动文件
$ reset/clear # 清屏
$ git status # 查看状态
$ esc 后 输入:wq # 保存并退出
Git 基础配置
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件,只是配置用户信息的话直接看下面两行命令即可
$ git config -e [--global]
# 设置提交代码时的用户信息,是否加上全局--global自行决定,一般是直接设置全局的。另外用户邮箱需要注意最好使用gmail,QQ也可以,需要和你远程仓库保持一致不然你的contribution是不会被记录在远程仓库的
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
Git 安装
Git-for-window, 这个不用多说,下载后下一步就好了
如果使用 mac 或者 linux, 建议使用命令行安装,请自行搜索相关教程。
创建 Git 仓库
有以下几种方式进行创建:
# 在当前目录创建一个文件夹
$ mkdir [project-name]
# 在当前目录新建一个Git代码库
$ git init
# 或者新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 或者下载一个项目和它的整个代码历史(各个分支提交记录等)
$ git clone [url]
git init
后会出现.git文件夹,里面有配置文件,如果没有 则可以在git bash里面输入ls -lah
就可以看到了
常用操作
首次推送
# 添加当前目录的所有文件到暂存区
$ git add *
# 或者
$ git add .
# 提交暂存区到仓库区
$ git commit -m [message]
# 为远程Git更名为origin
$ git remote add origin git@github.com:abcd/tmp.git
# 推送此次修改,这是首次推送需要加上-u,之后推送就可以直接git push origin master,origin是远程Git名字,这个可以自己定义,不过一般是用origin罢了,master是默认的分支,如果不在master分支提交需要写清楚分支名称
$ git push -u origin master