前端工具篇:浅谈Git和Github

  • Kevin
  • 11 Minutes
  • 2017年8月10日

首先指出,GitGithub不是一个概念,完全没有可比性。

Git可以说是每个程序员必备的技能,Github是检验一个程序员是否合格的标准。反正这东西虽然不一定要十分精通,但一定要能懂会用。Git是一个实用的版本控制(代码管理)工具,Github则是一个仓库托管(代码共享)平台,全国大神聚集的地方,装逼神器。

关于Git的详细教程建议阅读其官方文档,中文版,就是有点多,对于一般人来说阅读前三章即可。本篇文章主要介绍下面这几个方面:

这是我总结的对于一般开发人员来说,比较实用的几个方面。本篇文章,只会引入几个概念和一些比较重要的思想,不是一篇纯教程。

Git的基本使用

Git是一个分布式版本控制工具,对应的SVN则是集中式版本控制工具。如果你不知道SVN,那也没必要去学它了(除非工作需要),直接学Git可能更实用一点。

分布式和集中式

简单的说,集中式,就是将项目集中在一台服务器上进行管理。而分布式就是将项目分布在各台计算机或服务器中进行管理。分布式管理中每台计算机都是一个完整的仓库,而集中式管理中只能在服务器中进行版本管理。听起来可能很模糊,详细请参考官方介绍

基本使用

  1. 配置用户信息
1
2
3
# 名称和邮箱随意, Git仅用于记录身份
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
  1. 基本命令
1
2
3
4
5
6
7
8
9
# 在项目根目录下运行 初始化一个本地仓库
$ git init
# 跟踪文件 或将文件添加到 暂存区
$ git add 文件名
# 提交 将暂存区的文件提交到版本控制中
$ git commit -m "提交信息"

# 查看当前版本状态 有事没事多敲敲
$ git status

这是一个最基本的操作流程。但是实际使用中,总是不会如此顺利,会遇到各种问题和需求。建议:

1
2
3
4
# 比如查看push相关的用法
$ git push -h
# 或
$ git push --help

这里补充一下,Git有三个工作区域:工作目录、暂存区、Git仓库。我们写代码可以直接操作的是工作目录,通过git add将文件添加到暂存区git commit指令将文件提交到Git仓库

实用技巧

  1. 放弃本次工作目录中的修改
1
$ git checkout -- 文件名
  1. 将暂存区的文件移除到工作目录
1
$ git reset HEAD 文件名
  1. .gitignore不起作用
1
2
# 移除git仓库中所有文件,不会从真实的目录移除
$ git rm -r --cached .

这种情况是Git仓库中已经有了(跟踪了)某个文件,然后又修改了.gitignore文件,所以需要用上面的命令将要忽略的文件从Git仓库中移除。.代表移除所有文件。

  1. 执行命令报错Unable to create '/.git/index.lock': File exists之类的
1
2
# 删除该文件即可
$ rm -rf .git/index.lock

出现该问题一般都是之前手动或其他问题而终止了某条命令。

Git与GitHub搭配使用

对于个人来说,Git的远程仓库大多都是github。要将一个本地仓库推送到github上,首先必须github上要存在一个与本地同名的仓库,并且与本地仓库关联起来。

基本使用

你有两种方式可以选择,第一就是首先在github上建立项目仓库,然后克隆到本地使用。

1
$ git clone git@github.com:username/project-name.git

第二种就是本地已经存在一个项目仓库,然后先在github上建立一个同名的仓库,并关联起来。

1
2
3
4
# 添加远程仓库
$ git remote add origin git@github.com:username/project-name.git
# 推送到远程服务器
$ git push -u origin master

如果push失败,先pull更新到本地,然后再执行上面的push命令。这里的origin是远程仓库的名称,也是默认的。一个本地的Git仓库可以添加多个远程仓库,远程仓库名用来区分每个远程仓库(一般可能用不上,对于个人来说,远程仓库一般都是github一个)。

配置SSH

如果要使用github,配置一个SSH公钥也是必不可少的。如果你执行某项操作提示你没有权限,那么很有可能就是没有正确配置SSH公钥。

一台本地计算机对应一个SSH公钥,一个github账号可以添加多个SSH公钥,也就是说可以通过多台电脑来管理一个github账号下的项目仓库。

1
2
3
4
# 生成SSH公钥 一路回车即可
$ ssh-keygen
# 查看生成的SSH公钥
$ cat ~/.ssh/id_rsa.pub

然后,复制所有查看到的内容,添加到github上即可。

Git分支

Git的另一个重要的特性就是分支,要学好分支,必须得先弄懂Git分支的本质。

理解分支

每建立一个Git仓库,默认就有一个master分支(主分支)。Git中的分支本质上就是一个指向commit对象的指针。每commit一次,就对应一个提交记录(暂且就叫版本号),把这些提交记录想象成一条串联起来的方块,而分支就是指向这些方块的指针。

因此,在一个分支上的所有修改和提交只会将当前分支的指向往最新的版本移动,而其他分支依旧指向原来的提交版本,不会有任何影响。

Git中可以有很多分支,HEAD指针指向当前的分支,建议参考官方解释,图文例子很形象,一定要理解它的本质和原理。

基本操作

1
2
3
4
5
6
7
8
9
# 创建分支
$ git branch 分支名
# 创建并切换到分支
$ git checkout -b 分支名

# 删除分支
$ git branch -d 分支名
# 合并其他分支到当前分支
$ git meger 分支名

对于新手,建议不要在重要的项目上试用各种分支操作,不然你会越高越乱,最后可能就回不去了。

GitHub静态站点

github有一个十分强大的特性,就是每一个仓库,都可以是一个可访问的静态站点,也就是说,你可以将html文件放在仓库中,可以通过域名的方式来访问这个页面。

github提供一个主站点,它的仓库名必须是username.github.iousername就是你自己的用户名),默认访问的域名是username.github.io,而且还可以配置自己的域名(比如baidu.com,前提是这个域名是你的)。其他项目站点都只能通过username.github.io/project-name的形式访问。大多数人都会用这个主站点搭建一个个人的主页或博客之类的,网上与之相关的教程很多,对于非专业的前端开发人员,大多就是采用hexo来快速搭建自己的博客系统。有兴趣的可以自己百度hexo关键字,会有很多相关的教程。

其他项目有三种方法将仓库配置为可访问的站点,具体请参考这里

后记

Git对于刚接触的人可能并不友好,一路走来,我不知道弄坏了多少个项目仓库。最好是身边有会的人指导,这样会少走很多弯路。我的前端开发之路只有我一个人,而且所有东西全部都是靠自学,吃过的苦踩过的坑也是不计其数。