开发者可以提交到本地,每个开发者通过克隆(Git clone),在本地机器上拷贝一个完整的Git仓库。记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
Git优点
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
Git 是一个版本控制 工具,什么是版本控制,我们下面实际操作一下就一目了然了。
Git 本地工作流
Git 本地工作流 (没有网络操作)可以分为以下几步:
- 第一步,使用 atom 创建并编辑项目
- 第二步,使用
git init
命令,把一个普通项目 变成一个Git 仓库 - 第三步,使用
git add -A
命令,添加修改内容到 Git - 第四步,使用
git commit -m"my commit msg"
命令,制作一个版本
下面来走一个 Git 本地工作流的 Demo
- 首先,我们先来创建一个项目:
mkdir trygit
- 然后进入项目,创建一个 index.html 文件:
cd trygit
- 现在我们来把一个普通项目 变成一个仓库 ,需要执行
$ git init Initialized empty Git repository in /Users/peter/Desktop/project/.git/
- init 是英文 initialization (初始化)的缩写。输出信息的英文意思是:已经在 /Users/Liu/Desktop/project/.git/ 初始化了一个空的 Git 仓库。
- 运行这个命令之后,如果我们键入:
ls
- 会看到没有任何变化。因为,命令创建的
.git
文件夹是一个隐藏文件夹(所有以点开头的文件或者文件夹在 Linux 系统下都是隐藏的)。 - 要查看隐藏文件夹 ,可以键入:
ls -a
- 这样可以看到输出中包含
.git
文件夹了。 .git
文件夹是 Git 仓库的心脏,未来所有的版本历史都会保存在 .git 文件夹中。所以仓库 == 项目 + .git/改版历史
- 注:仓库 ,英文是 Repo ,是我们使用 Git,GitHub 必须要了解的一个概念。
- 如果要制作一个版本 ,一共分两步:添加修改和制作版本。
- 首先来添加修改到 Git :
git add -A
- 小贴士 : -A 的意思是添加“所有当前修改内容”
- 要想把添加的内容制作成版本,还需要执行
git commit -m"I add a file"
- 小贴士 :
commit
的意思是”做一件很重要的事”,但是在 Git 这里,它的意思就是版本 。-m
就是 message 的简写,后面的内容是再版留言 。 - 问题来了,新用户首次执行上面的命令,会看到下面的报错信息
please tell me who you are
- 解决方法是,运行下面的命令
git config --global user.name "l552177239" git config --global user.email "552177239@qq.com"
- 来设置用户名和邮箱。这样再次执行
$ git commit -m"I add a file" [master (root-commit) dcb0329] I add index.html 1 file changed, 1 insertion(+) create mode 100644 index.html
- 就可以成功制作一个版本了。也就是 Git 本地工作流就完成了一个完整的循环。
- 后续如果再做第二第三个版本,就是只需要:
- 修改内容
- Git add -A
- Git commit -m”msg”
- 注意:一个项目中 Git init 只需要执行一次就可以了。
查看改版历史
- 改版历史(所有我们做过的版本组成的一条线,就叫历史)中,会包含多个版本。每个版本中起码要包含4个 W ( Who When What Why )。
- 那么如何来查看改版历史呢?
git log -p
log
是日志的意思。-p
是 patch (补丁,也就是修改内容)的缩写。- 小技巧:
q
可以退出git log -p
的界面,敲j
可以往下翻,敲k
可以往上翻。 - 注意,实际中查看版本历史从来不用 Git log 命令,而是使用一个前端工具叫做 tig 。安装和使用方式可以参考:http://www.haoduoshipin.com/v/49.html
忽略特定文件或者文件夹
- 有时候,项目文件夹中有一些文件或者文件夹,并不是我们写的代码,例如 node_modules 。那么我们就没有必要把它们进行版本控制,这样我们可以吧这个文件或者文件夹的名字添加到,项目文件夹内的一个特殊文件,叫做 .gitignore 中。
vi .gitignore
- 然后,.gitignore 中填写如下内容:
/node_modules
- 这样,Git 就会忽略 node_modules 文件夹,以及里面的所有文件了。
- 没有 .gitignore 的技巧,我们就会把 node_modules 中的文件也进行版本控制,这样带来两个明显不爽的现象:
- 版本历史混乱
- Git push 到 github.com 就会很慢
- 所以,我们需要学习 .gitignore 的配置技巧。
总结
这样,我们就学会了如何在本地创建 Git 版本 ,查看各个版本 ,下面一节我们来研究如何把本地的这些版本 上传到 github.com 。
下一节:前面学会了如何在本地用 git 创建项目版本,本节咱们看看咋把新版本上传到 github.com 之上。