前言

本文可能不会是非常详细的关于 GitHub 的教程,只是把基本的步骤和重要的地方记录下来,方便查阅。关于 GitHub 的学习,建议可以首先阅读完参考资料中的 stormzhang 从 0 开始学习 GitHub。

说道 GitHub,可能很多人也常听到 Git,那这两是同一个东西吗?答案不是的。很早的我、懵懂的我,虽然经常听到这两家伙,但是不是很清楚区别。我相信很多人也是的,认为 GitHub 就是 Git,其实这是一个理解的误区。

我们先看下 Wiki 百科上关于 GitHub 说的吧:

GitHub 是个共享虚拟主机服务,于存放使Git 版本控制的软件代码和内容项它由 GitHub 公司(曾称 Logical Awesome)的开发者 ChrisWanstrath、 PJ Hyett 和 Tom Preston-Werner 使⽤ Ruby on Rails 编写成。

可能这么说大家不能理解其作用。

说下什么是 Git?

Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的。说到版本控制系统,估计很多人都用过 SVN ,只不过 Git 是新时代的产物,如果你还在用 SVN 来管理你的代码,那就真的有些落伍了。

其实就和 SVN 一样, Git 是代码版本控制系统,免费开源的,并且是一个分布式版本控制系统。不管是学GitHub,还是以后想从事编程行业,可以说 Git 算是必备技能了。而 GitHub 上面说了,主要提供基于 git 的版本托管服务。也就是说现在 GitHub 上托管的所有项目代码都是基于 Git 来进行版本控制的,所以 Git 只是 GitHub 上用来管理项目的一个工具而已,但 GitHub 的功能可远不止于此! 只要你愿意慢慢玩你还能知道它的用处:

• 学习优秀的开源项目
• 多人协作
• 搭建博客、个人网站或者公司官网
• 写作
• 个人简历
• 其他

比如基于 Hexo + Github Page 可以搭建免费博客。关于 Github 和 Git 以及 git 和 svn 详细区别可以看这篇文章:Git系列之初识Git与Github

首先是 Git 的简单使用

好了,废话不多说,下面说下自己的使用教程,本文的教程首要目标就是带你使用 git 上传自己的项目代码到 github 网站。

  1. git 下载(有两个网站都可以下载:https://git-scm.com/downloads、https://git-for-windows.github.io/)

    毋庸置疑,提到这么多次git,肯定首先需要安装 git 版本控制工具系统。下载完毕就是进行安装了,安装教程就不多说了,就类似 Java 开发需要安装 JDK 一样,这里也是,不安装 git 怎么进行代码版本管理。安装详细教程网上搜索下。注意的地方,有个安装页面可以选择勾选 git 自动加入 系统 path ,也可以不选,安装完毕,自己加入 git 安装目录下 bin 文件目录于 电脑 path 下。 path的作用:就是可以使你在电脑 cmd 命令窗口下能直接使用相关命令。判断是否安装成功:cmd 命令行下,输入 git 可以看到一些信息,则证明安装 ok。

  2. 随便在哪个磁盘创建一个文件夹,比如 githubtest,然后在该目录下,鼠标右键选择 GIt Bash Here 打开git,输入 git init 初始化 git 仓库。这样能在”不显示隐藏文件”的情况下,能看到 .git 文件夹。内容如下图:

    此文件夹保存了版本控制的所有相关信息。

  3. 在 githubtest 文件夹下随便创建一个文件,如创建一个名叫 readme.md 文件,然后输入 git status 可以查看当前版本库状态,可以看到如下图:

    Untracked files(未跟踪文件)下,会出现红色的readme.txt,代表此文件还未被Git所管理。

  4. 使用 git add readme.md,将该文件加入缓冲区(这里的缓冲区可以后面再好好了解下),如果你确定所有的修改都需要提交,可以使用 git add . 来加入所有修改。现在用git status查看,将看到文件名变为绿色。

  5. 使用 git commit -m "my first commit!" 来提交修改,-m 后面所带的参数是本次提交的注释说明信息,一般用来记录本次提交的主要意图。

    注:为什么先要再 add 一次呢?首先 git add 是先把改动添加到一个「暂存区」 ,你可以理解成是一个缓存区域,临时保存你的改动,而 git commit 才是最后真正的提交。这样做的好处就是防止误提交,当然也有办法把这两步合并成一步。这个命令是

    git commit -am "my first commit!"

    该命令用于将工作区中的代码直接提交到本地仓库,而无需手动添加到缓冲区。

    但是执行后,出现如下图:

    未提交成功,提示设置邮箱和用户名。

    是的,为了保证提交日志的准确性,在提交的时候 user.nameuser.email 会进入日志,这些信息,是追踪代码变更的关键,比如是谁修改的。以后会随更新内容一起被永久纳入历史记录。

    PS:在设置用户名的时候,可以使用任意的字符。Git实际上是使用email进行关联每次提交的,只不过使用username作为标示符来进行显示。当你的email地址和github上的email地址一致时,则会使用Github上面的name来进行显示。

    全局配置:

    如果工作中只涉及一个 git 服务器,用一个全局配置就可以了。

    git config --global user.name "strivebo"
    git config --global user.email "ishuzb@gmail.com"

    工作在多个git项目:

    但是我们可能同时工作在多个项目中,公司内部用自有的git管理项目,我们在github上还有自己的项目。对于使用不同的用户身份,需要设置不用的sshkey,具体的配置可以看这里:多个sshkey配置。这个时候,对于user.nameuser.email我们不能采用全局的配置。而是要对各个项目单独配置。

    某个项目下的配置(去掉 --global):

    git config user.name "strivebo"
    git config user.email "ishuzb@gmail.com"

    可以使用命令来查看修改后的配置:

    git config --global user.name 或 git config user.name
    git config --global user.email 或 git config user.email

    取消全局配置:

    git config --global --unset user.name
    git config --global --unset user.emailgit config --global user.name    #(查看)全局配置账户已经移除
    git config --global user.email   #(查看)全局配置邮箱已经移除

    参考资料:

    ​ 设置 Git 账户及邮箱

    ​ git: 提交前强制检查各个项目用户名邮箱设置

    ​ Git中的username的设置

    多说几句,关于 github 页面的设置哪个邮箱接收哪些消息,看下这篇文章:如何正确接收 GitHub 的消息邮件

  6. 提交成功后,可以用 git log 查看历史提交记录。每个记录都会有提交id,作者和提交日期。

    现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令,第一种是:

    git reset --hard HEAD^

    那么如果要回退到上上个版本只需把 HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可。

    假设: 我进行了两次修改,第一次readme.txt文件添加了2222,第二次添加了3333,我已经使用回退操作回到了第一次的修改,即现在文本内容为2222,但我其实又想回到第二次的修改,该怎么办呢(如何恢复3333内容呢)?这里可以:

    可以通过如下命令即可获取到版本号:git reflog,可以看到增加内容3333的版本号是多少比如为 6fcfc89,我们现在可以命令:

    git reset --hard 6fcfc89

    来恢复了。

  7. 你可以用 git branch 查看当前有哪些分支,当然,因为我们没有创建任何分支,目前只会有一个master分支。

    注:branch 即分支的意思,分支的概念很重要,尤其是团队协作的时候,假设两个人都在做同一个项目,这个时候分支就是保证两人能协同合作的最大利器了。举个例子,A, B俩人都在做同一个项目,但是不同的模块,这个时候A新建了一个分支叫a, B新建了一个分支叫b,这样A、B做的所有代码改动都各自在各自的分支,互不影响,等到俩人都把各自的模块都做完了,最后再统一把分支合并起来。

    执行 git init 初始化git仓库之后会默认生成一个主分支 master ,也是你所在的默认分支,也基本是实际开发正式环境下的分支,一般情况下 master 分支不会轻易直接在上面操作的,你们可以输入 git branch 查看下当前分支情况,如图:

  8. 如果我们想在此基础上新建一个分支,很简单,执行 git branch a 就新建了一个名字叫 a 的分支,这时候分支 a 跟分支 master 是一模一样的内容,我们再输入 git branch 查看的当前分支情况:

    但是可以看到 master 分支前有个 * 号,即虽然新建了一个 a 的分支,但是当前所在的分支还是在 master 上,如果我们想在 a 分支上进行开发,首先要先切换到 a 分支上才行,所以下一步要切换分支

    git checkout a

    有人就说了,我要先新建再切换,未免有点麻烦,有没有一步到位的,有的:

     git checkout -b a

  9. 以下为常用的 Git 命令:

    git merge

    A同学在a分支代码写的不亦乐乎,终于他的功能完工了,并且测试也都ok了,准备要上线了,这个时候就需要把他的代码合并到主分支master上来,然后发布。git merge 就是合并分支用到的命令,针对这个情况,需要先做两步,第一步是切换到 master 分支,如果你已经在了就不用切换了,第二步执行 git merge a ,意思就是把a分支的代码合并过来,不出意外,这个时候a分支的代码就顺利合并到 master 分支来了。为什么说不出意外呢?因为这个时候可能会有冲突而合并失败。

    git branch -d

    有删除分支,假如这个分支新建错了,或者a分支的代码已经顺利合并到 master 分支来了,那么a分支没用了,需要删除,这个时候执行 git branch -d a 就可以把a分支删除了。

    git branch -D

    有些时候可能会删除失败,比如如果a分支的代码还没有合并到master,你执行 git branch -d
    a 是删除不了的,它会智能的提示你a分支还有未合并的代码,但是如果你非要删除,那就执
    行 git branch -D a 就可以**强制删除**a分支。

    git tag

    我们在客户端开发的时候经常有版本的概念,比如v1.0、v1.1之类的,不同的版本肯定对应不同的代码,所以我一般要给我们的代码加上标签,这样假设v1.1版本出了一个新bug,但是又不晓得v1.0是不是有这个bug,有了标签就可以顺利切换到v1.0的代码,重新打个包测试了。所以如果想要新建一个标签很简单,比如 git tag v1.0 就代表我在当前代码状态下新建了一个v1.0的标签,输入 git tag 可以查看历史 tag 记录。 想要切换到某个 tag,执行:

    git checkout v1.0

    就可以切换到 v1.0 的代码状态。

    还有很多命令,待大家去找相关资料学习和练习了。

上传代码至 Github

以上都是讲的本地仓库关于 Git 的操作,下面需要讲的是项目代码提交至 GitHub 开源社区。

关于 GitHub 网站的操作教程包括注册、功能、设置、新建代码仓库等,请先看这篇文章吧:Git系列之Github基础设置及使用详解,写的很详细很好。我自个写的,也只是简单记录下步骤而已。

以自己 Github 的项目为例

  1. 首先注册 github 账户

    这个我就不用说了吧。

  2. 新建仓库,即新建项目文件

    如果想要新建私有仓库,即别人不能看到的仓库,则需要选择收费选项,否则我们就选择公共模式就可以。好像 github 有一个针对高校和学生有一个叫什么学生包申请,可以去了解下,我在网上也随便找了几个文章,先看下:Github 学生包申请教程、利用学生身份可以享受到的相关学生优惠权益…

  3. 然后就是克隆(下载)该项目

    如图:

    复制该地址。

    在 Git Bash 中输入:

    git clone https://github.com/strivebo/GitTest.git

    下载项目源码。这个时候该本地项目本身已经是一个 git 库了,不需要执行 git init 进行初始化,甚至已经关联好了远程仓库。

  4. 此时,就可以去开发里面的代码了,添加新的功能,修改明显的bug…

    关于这部分已经在前面 Git 本地库讲了相关命令。

  5. 最后就是要把本地的改动提交到 github 账户了。

    注: 你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以创建自己的项目,但是你没法提交代码。仔细想想也知道,肯定不可能随意就能提交代码的,如果随意可以提交代码,那么GitHub 上的项目岂不乱了套了,所以提交代码之前一定是需要某种授权的,而 GitHub 上一般都是基于 SSH 授权的。那么什么是 SSH 呢? 简单点说,SSH是一种网络协议,用于计算机之间的加密登录。目前是每一台 Linux 电脑的标准配置。而大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,所以想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置。

    SSH 设置

    1. Linux 与 Mac 都是默认安装了 SSH ,而 Windows 系统安装了 Git Bash 应该也是带了 SSH 的。大家可以在终端(win下在 Git Bash 里) 输入 ssh 如果出现以下提示证明你本机已经安装 SSH, 否则请搜索自行安装下。

    2. 紧接着输入 ssh-keygen -t rsa ,什么意思呢?就是指定 rsa 算法生成密钥,接着连续三个回
      车键(不需要输入密码) ,然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa 是密钥,id_rsa.pub 就是公钥。这两文件默认分别在如下目录里生成:
      Linux/Mac 系统 在 ~/.ssh 下,win系统在 /c/Documents and Settings/username/.ssh 下,
      都是隐藏文件,相信你们有办法查看的。

      id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    3. 接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上,这样你本地的 id_rsa 密钥跟 GitHub
      上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。 在设置页面打开 SSH and GPG keys 菜单栏:

      需要做的只是在 Key 那栏把 id_rsa.pub 公钥文件里的内容复制粘贴进去就可以了,Title 那栏不需要填写,点击 Add SSH key 按钮就ok了。

    4. SSH key 添加成功之后,输入 ssh -T git@github.com 进行测试,如果出现以下提示:

      输入 yes 出现如下图则证明添加成功了。

  6. 在提交之前熟悉两个命令:PushPull

    Push :直译过来就是「推」 的意思,什么意思呢?如果你本地代码有更新了,那么就需要把本地代码推到远程仓库,这样本地仓库跟远程仓库就可以保持同步了。

    git push origin master

    意思就是把本地代码推到远程 master 分支。

    Pull:直译过来就是「拉」 的意思,如果别人提交代码到远程仓库,这个时候你需要把远程仓库的最新代码拉下来,然后保证两端代码的同步。

    git pull origin master

    意思就是把远程最新的代码更新到本地。一般我们在 push 之前都会先 pull ,这样不容易冲突。

  7. 提交代码

    添加 SSH key 成功之后,我们就有权限向 GitHub 上我们自己的项目提交代码了!执行:

    git push origin master

    进行代码提交,这种是最简单方便的一种方式。

    注: 如果我们本地已经有一个完整的 git 仓库,并且已经进行了很多次 commit,这个时候第一种方法就不适合了。

    假设 :我们本地有个 test2 的项目,我们需要的是在 GitHub 上建一个 test 的项目,然后把本地 test2 上的所有代码 commit 记录提交到 GitHub 上的 test 项目。

    第一步就是在 GitHub 上建一个 test 项目,这个想必大家都会了,就不用多讲了。

    第二步把本地 test2 项目与 GitHub 上的 test 项目进行关联,切换到 test2 目录,执行如下命
    令:

    git remote add origin git@github.com:strivebo/test.git

    什么意思呢?就是添加一个远程仓库,他的地址是 git@github.com:stormzhang/test.git ,而 origin 是给这个项目的远程仓库起的名字,是的,名字你可以随便取,只不过大家公认的只有一个远程仓库时名字就是 origin ,为什么要给远程仓库取名字?因为我们可能一个项目有多个远程仓库?比如 GitHub 一个,比如公司一个,这样的话提交到不同的远程仓库就需要指定不同的仓库名字了。

    查看我们当前项目有哪些远程仓库可以执行如下命令: git remote -v ,接下来,我们本地的仓库就可以向远程仓库进行代码提交了:

    git push origin master

    就是默认向 GitHub 上的 test 目录提交了代码,而这个代码是在 master 分支。当然你可以提交到指定的分支

以别人开源项目为例

和上面很多步骤类似的。

  1. 首先 github 上搜索别人开源项目,单击右上角的fork按钮,就把这个项目拉到你的账户下了,你就可以加入到这个项目中了;
  2. 页面已经跳转到你的账户下的该项目里了,单击右下方的复制按钮,将这个地址就复制下来了;
  3. 在你的磁盘选择一个合适的位置专门存放源代码,比如D盘下新建 gittest 文件件,进入 gittest 文件夹,鼠标右键进入 Git Bash,输入:git clone 接着项目地址,回车,就开始将你的 github 上的该源码下载到你的电脑里了;
  4. 此时就可以去开发里面的代码了,添加新的功能,修改bug等等操作了;
  5. git push -u origin master 将你本地的仓库提交到你的github账号里,如果此时需要你输入你的github的账号和密码,输入就是了;
  6. 此时你在你的本地任务就完成了,进入到你的 github 上面,选择到这个该项目名,单击进入,右侧有个pull request,单击进入跳转的页面单击右侧的 New pull Request 按钮;
  7. 此时,你就能看到你改动的方了,核对下,没有问题后,就单击 View pull request 按钮;
  8. 此时,你可以在页面中输入你的本次提交的说明信息,输入完后,单击提交按钮 comment;
  9. ,到此,你的任务就完成了,等到开源项目的管理人员审核,通过了,他就把你的改动合并到相应的开发分支上。

参考资料:

github 学习:

  • 知乎:怎样使用 GitHub?
  • 入门级:GitHub和Git超超超详细使用教程!
  • 手把手教你如何加入到github的开源世界!
  • Git结合GitHub常用命令学习手册
  • 菜鸟教程:Github 简明教程

  • phodal:GitHub 漫游指南

  • stormzhang:从 0 开始学习 GitHub

git 学习:

  • 廖雪峰Git教程:Git教程
  • 猴子都能懂的GIT入门
  • Git使用教程
  • happypeter:Git 北京


更新于 2017-11-05

Github 完整学习教程相关推荐

  1. Blender制作3D模型导出到UE5完整学习教程

    学习如何在Blender中创建AAA游戏资产,然后导出到虚幻引擎5的完整指南 你会学到什么 遵循关于创建一套AAA游戏就绪的优质中世纪市场摊位的完整指南 最大化您的推荐人的潜力,以开发强大的游戏资产概 ...

  2. GitHub完整使用教程

    TortoiseGit使用笔记(windows下使用上传数据到GitHub) 作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经 ...

  3. 前端开发学习路线图,完整学习教程+工具+框架

    回看近年的前端发展,不管是之前的散装前端时代,还是后来插件化.模块化的演进,亦或是现如今如火如荼的前端工程化迭代,发展速度实在是太快了,各种框架层出不穷,这些难免会让我们这些学习者眼花缭乱,满腹疑团. ...

  4. Eigen学习教程(一)

    Eigen学习教程(一) 1.Eigen介绍 Eigen是一个用于线性代数的C++模板库:矩阵.向量.数值求解器和相关算法.他可以很方便的植入到C++的程序,然后在矩阵计算中有着很广泛的应用. 本教程 ...

  5. UE5和Blender中的完整场景环境创建学习教程

    UE5和Blender中的完整环境创建–深入课程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确)|时长:80 ...

  6. 【教程】Github快速学习

    [教程]Github快速学习 备注 一.Git基础 1.安装 2.git原理 3.基本配置 4.Gitignore 二.Git分支 1.基础命令 三.学习Github:Github Docs官方文档 ...

  7. Docker学习之Windows Home上安装Docker Desktop的完整图文教程

    Windows Home上安装Docker Desktop的完整图文教程 记录安装过程,文字略显沙雕✧٩(ˊωˋ*)و✧ 来自Docker官方文档: 支持的平台 Docker Engine可 通过Do ...

  8. python两层循环 循环完整体一个_Python学习教程(Python学习路线):Python编写循环的两个建议...

    原标题:Python学习教程(Python学习路线):Python编写循环的两个建议 Python学习教程(Python学习路线):给大家总结了两个Python编写循环的建议 循环是一种常用的程序控制 ...

  9. 免费Linux系统和生信宝典原创学习教程

    生物信息的学习离不开Linux系统,不管自己写命令处理数据,还是使用现有的工具.Linux对我们来讲最重要的是它强大的命令行功能,可以快速.批量.灵活的处理数据的提取.统计和整理等耗时耗力的重复性工作 ...

最新文章

  1. 心玮医疗发布75万股权回购计划 用于招揽和激励员工等
  2. 远程exp_Windows远程桌面服务漏洞(CVE-2019-0708)攻击代码现身
  3. Docker 安装、镜像、dockerfile、容器、仓库
  4. 【Spring Boot】Spring Boot之整合RabbitMQ并实现消息的发送和接收
  5. vb 开机到现在的时间
  6. css样式让样式失效,如何让css样式失效
  7. mc一进服务器就未响应,一进服务器就崩溃 大佬们求解
  8. 通过银行卡的Bin号来获取银行名称
  9. Maven下载安装与配置
  10. linux电脑关机后自动重启,Linux系统关机/重启
  11. 【QT】常用字符串/文件操作
  12. document.writeln
  13. Cisco Aironet WLAN系列AP的瘦胖模式转换
  14. azw3文件怎么打开?
  15. Golang学习笔记(二)
  16. AppList数据处理
  17. http安全 Java_AES - HTTP安全通信实现(java)
  18. 干货:Hulu教你赴美工作怎么拿签证!
  19. 医学图像分类_腾讯八篇论文入选顶级医学影像会议MICCAI ,涉及病理癌症图像分类等...
  20. vue组件之this指向问题

热门文章

  1. TCP/IP协议族-----10、搬家IP
  2. PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT...
  3. Materialized Views
  4. Office 365 Outlook Web App 移动设备体验
  5. sql range 范围内查询
  6. Java根据正则生成随机字符串
  7. Vue文件的缩进改为4个空格
  8. hexo右下角弄一个live2d的卡通动画小人
  9. CNN的卷积运算为何使用互相关而不是卷积
  10. 《C4.5: Programs for Machine Learning》chaper4实验结果重现