第一章 由来

  • GitHub是为开发者提供Git仓库的托管服务。

  • Git与GitHub的区别:在Git中,开发者将源代码存入名叫“Git仓库”的资料库中并使用;而GitHub则是在网络上提供Git仓库的一项服务。

  • Pull Request使得地球上不同位置不同时间的开发者共同开发软件。

  • GitHub Flavored Markdown语法被用于GitHub作文字标记使用。

  • GitHub以人为中心,我们可以看到一个人公开的所有源代码,还能看出其他的信息,包括提交信息等。

  • Issue功能是将一个任务或问题分配给一个Issue进行追求和管理的功能。

第二章 基本知识简介

  • 版本管理就是管理更新的历史记录。

  • 集中型,将所有数据集中存放在服务器中,便于管理,但一旦开发者所处环境无法连接服务器时,就无法获取最新的源代码,使得开发停滞下来。万一翻身服务故障导致数据消失,那就一切前功尽弃了。

  • 分散性,GitHub将仓库Fork给了每一个用户,分散性拥有多个仓库,开发者本地就有仓库,无需连接远程服务器就可以进行开发。

  • Fork就是将GitHub的某个特定仓库复制到自己的账户下,Fork的仓库与原仓库是两个不同的仓库,开发者可以随便编辑。

  • 所有仓库之间可以push和pull,即使不通过GitHub,开发者A也可以直接向开发者B的仓库进行push和pull。

  • linux和mac系统自带Git,windows安装git应用程序git bash。

  • 设置姓名和邮箱地址,输入内容会在~/.gitconfig中显示

git config --global user.name "Firstname Lastname"

git config --global user.email "email@example.com"

  • 另外,为了提高可读性,可以设置

git config --global corlor.ui auto

第三章 初始操作

3.1 注册账号

  • 注册账号https://github.com/

  • 设置SSH Key,GitHub上连接已有仓库时的认证,是通过使用了SSH的公开密钥认证方式进行的。


$ ssh-keygen -t rsa -C "your_email@example.com" Generating public/private rsa key pair. Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): 按回车键 Enter passphrase (empty for no passphrase): 输入密码 Enter same passphrase again: 再次输入密码

需求:注册有限,密码,生成的ssh密钥会放置在/Users/your_user_directory/.ssh/,包括id_rsaid_rsa.pub

然后将id_rsa.pub其添加至注册GitHub账号的SSH keys中,id_rsa是私钥,需要自己慎重保存,切勿公开。添加位置

之后就可以使用手中的私人密钥与GitHub进行认证和通信了。测试:

ssh -T git@github.com

Hi hugechuanqi! You've successfully authenticated, but GitHub does not provide shell access.表示成功。

3.2 创建仓库

  • 创建仓库repository,参考笔记

  • .gitgnore文件记录不需要在Git仓库中进行版本管理的文件。

  • README.md文件标明本仓库所包含的软件的概要、使用流程、许可协议等信息。

  • clone仓库,将已有仓库clone到本地电脑上进行开发:

git clone https://github.com/hugechuanqi/MachineLearing.git

  • 然后编写代码或其他文件,例如.md, .py, .cpp, .c, .java, .txt等,此处假设为hello_world.php,内容自定。

  • 提交,通过git add命令将文件加入暂存区,再通过git commit命令提交

git add hello_world.php

git commit -m "Add very good script by php" -m表示提交说明

可以通过git log查看日志;公开的源代码也拥有软件著作权,协议包括BSD修正协议,Apache许可协议,MIT许可协议

  • 然后执行push,GitHub上的仓库就会被更新:

git pull

第四章 具体实际操作

4.1 初始化仓库及相关操作

  • git init初始化仓库,要使用版管理,首先得初始化一个仓库,实际建立一个目录并初始化仓库:

mkdir git-tutorial cd git-tutorial git init

目录底下会生成.git目录,存储着管理当前目录内容所需的仓库数据。在Git中,这个目录的内容成为“附属于该仓库的工作树”,文件编辑等操作在工作树中进行。

  • git status显示Git仓库的状态。

  • git add表示向暂存区中添加文件。

  • git commit命令可以将当前的暂存区中的文件实际保存到仓库的历史纪录中,保存仓库的历史记录。

  • git log查看提交日志

git log -p 显示文件的改动

git log -p README.md 仅查看README.md文件的提交日志。

git diff 查看更改前后的差别,可以查看工作树、暂存区、最新提交之间的差别。

4.2 分支操作

  • 分支操作:从master分支创建feature-A分支和fix-B分支,每个分支中都拥有自己的最新代码;master分支是Git默认创建的分支。

  • git branch命令可以显示分支名列表;

  • git checkout -b创建和切换分支;

git checkout -b feature-A

git checkout master 表示切换到master分支

git checkout - 切换回上一个分支

  • 特性分支,是集中实现单一特性,除此之外不进行任何作业的分支,往往特性分支会有数个,如feature-A,而保留一个可以随时发布软件的稳定分支,如master。

  • 主干分支,master,是特性分支的原点,也是特性分支的终点。

  • git merge合并分支,假设分支feature-A上的内容已经实现完毕,这时应该先切换到主干分支master中,然后

git merge --no-ff feature-A

  • git reset 回溯历史版本

git reset --hard 3e3e67a1a94cc6180dcd0bbdd2efa91076073422 其中这一长串数字是时间节点的哈希值。git log之后就可以看到,在commit后面。

git checkout -b fix-B 创建特性分支

4.3 消除冲突

  • 消除冲突,系统在合并README.md时,feature-A分支更改的部分与本次想要合并的fix-B分支更改的部分发生了冲突,因此需要解决这个冲突。打开README.md文件会发现以下内容:
<<<<<<< HEAD
- Feature-A
======= - fix-B
>>>>>>> fix-B

其中,=======以上的部分是当前HEAD的内容,以下的部分是要合并的fix-B分支中的内容。我们在编辑器中将其改成想要的样子,即

- Feature-A
- fix-B

这样,就可以让feature-A和fix-B的内容并存于文件之中;但是在实际中,往往需要删除其中一个。然后提交:

git add README.md

git commit -m "solve the conflict"

  • git commit --amend修改提交信息

    git commit --amend 然后在编辑器中修改并保存

    随后git log --graph就可以看到提交日志的相应内容已经被修改。

4.4 压缩历史

  • git rebase -i 压缩历史,若发现前一个提交内容有错,则提交一个修改,并将这个修改包含到前一个提交之中,压缩成一个历史记录。过程为:

    • git checkout -b feature-C #创建新分支
    • git commit -am "Add feature-C" #提交内容
    • git diff #查看修改后的差别,如何修改内容就是对文件的操作了
    • git commit -am "Fix typo" #Fix typo英文意思是错字和漏字
    • git rebase -i HEAD~2 #将修改的内容“Fix typo”与前一次的提交合并
  • git checkout master 切换到主分支
  • git merge --no-ff feature-C 将分支feature-C与master主分支合并

4.5 推送至远程仓库

  • Git是分散型版本管理系统,为防止与其他仓库混淆,仓库名请与本地仓库保持一致,即git-tutorial。为了提高整合性,创建仓库时不要勾选初始化README文件。

  • git remote add 添加远程仓库。在GitHub上创建的仓库路径为"git@github.com: 用户名/git-tutorial.git"。用git remote add命令将其设置成本地仓库的远程仓库。例如:

    • git remote add original git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git

      上述操作之后,Git会自动把git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git远程仓库的名称设置为origin(标志符)。
  • git push 推送至远程仓库

    • git push -u origin master 把当前分支的内容推送给远程仓库origin的master分支。-u阐述可以在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。添加-u阐述有利于之后运行git pull命令从远程仓库获取内容时,省去了另外添加的麻烦。
  • git push 推送至master以外的分支

    • git checkout -b feature 创建分支
    • git push -u origin feature-D 将当前分支push给远程仓库并保持分支名称不变。之后就可以在远程仓库的GitHub页面就可以查看到feature-D分支。

4.5 从远程仓库获取

  • git clone 获取远程仓库。

    切换到非仓库目录名下后,执行git clone git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git,我们会默认处于master分支,同时系统会自动将origin设置成该远程仓库的标识符。即当前仓库的master分支与GitHub端的远程仓库(origin)的master分支在内容上完全相同。

  • git branch -a 命令查看当前分支的相关信息。

  • 获取远程的feature-D分支(??此处有点问题,今天暂时没时间修改)

    • git checkout -b feature-D origin/feature-D. -b参数后面是本地仓库中新建分支的名称。为了与远程仓库origin/feature-D保持同名,此处-b后面也起名为feature-D,过程如下:
git init
git remote add origin git@github.com:hugechuanqi/Algorithms-and-Data-Structures.git #将远程仓库名称设置为origin
git checkout -b feature-D origin/feature-D #新建分支,并获取远程分支内容
  • git pull 获取最新的远程仓库分支

    • git pull origin feature-D 将本地的feature-D分支更新到最新状态。如果两人同时修改了同一部分的源代码,push时就很容易发生冲突,所以多人同时在同一个分支中进行作业时,为减少冲突情况的发生,建议更频繁地进行push和pull操作。

推荐资料

1、Pro Git:http://git-scm.com/book/zh/v1,是一本零基础Git学习资料。Scott Chacon书写。

2、LearnGiBranching:http://pcottle.github.io/learnGitBranching/,是学习Git基本操作的网站,偏重树形结构。

3、tryGit:http://try.github.io/ 可以在Web上一边操作一边学习Git的基本功能。

97/286 未完待续

参考:书籍:github入门与实践

github入门书籍总结的更多相关文章

  1. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  2. 结合个人经历总结的前端入门方法 (转自https://github.com/qiu-deqing/FE-learning)

    结合个人经历总结的前端入门方法 (https://github.com/qiu-deqing/FE-learning),里面有很详细的介绍. 之前一直想学习前端的,都不知道怎么下手都一年了啥也没学到, ...

  3. 前端工作面试问题--摘取自github

    前端工作面试问题 本文包含了一些用于考查候选者的前端面试问题.不建议对单个候选者问及每个问题 (那需要好几个小时).只要从列表里挑选一些,就能帮助你考查候选者是否具备所需要的技能. 备注: 这些问题中 ...

  4. 转:怎么使用github(通俗易懂版)

    转:  https://www.zhihu.com/question/20070065 作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/ans ...

  5. github使用-知乎的某小姐的一篇文章

    作者:珊姗是个小太阳链接:http://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. 作为一个文科 ...

  6. MAC使用GITHUB

    作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. #什么是 ...

  7. 文科妹学 GitHub 简易教程

      #什么是 Github ?必须要放这张图了!!!<img src="https://pic4.zhimg.com/7c9d3403bf922b1663f56975869c829b_ ...

  8. 【Git和GitHub】学习笔记

    1. 书籍推荐: 先看一本比较简单并且好的入门书籍 Git - Book https://git-scm.com/book/zh/v2 2. 书籍理解: Git 有三种状态,你的文件可能处于其中之一: ...

  9. 文科妹学 GitHub 简易教程(转)

    文科妹学 GitHub 简易教程     #什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版 ...

随机推荐

  1. Java中 System.arraycopy() 和 Arrays.copyOf()方法

    System.arraycopy() 和 Arrays.copyOf()方法 阅读源码的话,我们就会发现 ArrayList 中大量调用了这两个方法.比如:我们上面讲的扩容操作以及add(int in ...

  2. LOJ#2452. 「POI2010」反对称 Antisymmetry

    题目描述 对于一个 \(0/1\) 字符串,如果将这个字符串 \(0\) 和 \(1\) 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 \(00001111\) 和 \(01010 ...

  3. Vue.directive自定义指令

    Vue除了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-diy的指令,作用就是让文字变成红色. 写好了这个功能,我们现在就自己定义一个全局的指令.我们这里使用Vue.directi ...

  4. entity framework浅谈

    1. 什么是EF 微软提供的ORM工具. ORM让开发人员节省数据库访问代码的时间. 将更多的时间放在业务逻辑层面上. 开发人员使用linq语言, 对数据库进行操作. 2. EF的使用场景 EF有三种 ...

  5. Docker4之Stack

    Make sure you have published the friendlyhello image you created by pushing it to a registry. We’ll ...

  6. 关于jQ的Ajax操作

    jQ的Ajax操作 什么是AJAX AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 它不是一门编程语言,而是利用JavaScript ...

  7. mac删除python

    删除Python框架 sudo rm -rf /Library/Frameworks/Python.framework/Versions/x.x 删除Python本程序 sudo rm -rf &qu ...

  8. Runnable、Callable、Executor、Future、FutureTask关系解读

    在再度温习Java5的并发编程的知识点时发现,首要的就是把Runnable.Callable.Executor.Future等的关系搞明白,遂有了下述小测试程序,通过这个例子上述三者的关系就一目了然了 ...

  9. 项目Alpha冲刺--3/10

    项目Alpha冲刺--3/10 1.团队信息 团队名称:基于云的胜利冲锋队 成员信息 队员学号 队员姓名 个人博客地址 备注 221500201 孙文慈 https://www.cnblogs.com ...

  10. Django中ORM系统多表数据操作

    一,多表操作之增删改查 1.在seting.py文件中配置数据库连接信息 2.创建数据库关联关系models.py from django.db import models # Create your ...