CS-Notes/notes/笔记/Github.md.txt
2018-02-22 14:47:22 +08:00

144 lines
8.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[TOC]
#  1  Github 课程介绍
Git 是一个版本控制工具 Linux 之父 Linus 编写完成。相比于 CVS  SVN 等集中式版本管理工具Git 分布式的特点给它带来了很大的优势首先它不需要像集中式的版本管理工具一样只有连网才能进行操作其次它的分布式特点使得每个项目合作者本地都有一个项目的完整版本这避免了集中式版本管理工具会出现的因为中央服务器故障而导致的代码丢失的问题。需要注意的是Git 也有一个中央服务器只不过这个中央服务器是用来分发各个合作者的版本的中介不像集中式那样起到所有版本的管理者的角色。
Git 能够火起来有一个主要的原因是它体现了互联网的开源文化GitHub 这个网站是基于 Git 而创建的将这种开源文化发扬光大。GitHub 现在是全球最大的开源代码托管平台它重新定义了软件开发的流程因为很多软件功能都可以在 GitHub 上找到相应的源代码而不需要重新编写这大大减低了软件开发时间和成本。
Git 是一个命令行的工具GitHub 的图形化界面让 Git 的使用更简单可以结合 GitHub 的桌面客户端和 GitHub 的网站来一起使用。
#  2  浏览器中使用 Github
**commit** GitHub 以一个 commit 作为一个版本。每当项目被修改后需要进行一次 commit 操作。可以查看每个 commit 做的什么样的修改包括修改时间修改人修改内容。一个 commit  GitHub  具有一个版本号还有父版本号父版本号是为了记录版本的历史线。
![](index_files/25c861a6-e70e-47b7-9447-df17d74b75a1.jpg)
![](index_files/d0bc7eca-bd58-4fab-b559-7ebdd508702f.jpg)
#  3  GitHub 客户端的使用
本地有更好用的编辑器和 IDE 因此基本上需要在本地使用 GitHub。使用桌面客户端可以更简单方便地使用 GitHub如果直接使用 Git 命令行工具会暴露在复杂的概念面前不容易掌握。
在本地的仓库里面进行修改后会在桌面客户端自动显示 change。
![](index_files/02e1268b-4e4e-46d4-a437-61f586f8d939.jpg)
一个 commit 需要有 Summary  Description以便以后回头看这个 commit 能够知道进行了哪些修改。
Publish 用于发布一个本地的 repostory  GitHub 上。发布之后可以用 Sync 同步本地的 commit  GitHub 服务器上。
客户端上的 Undo 只能是撤销还未同步的一个版本 Revert 才能撤销已经同步的版本它本身也作为一个 commit 提交到服务器抵消了上一次的 commit 做的修改。
Roll Back to this Commit 可以回滚到选定的一个版本也是作为一个 commit 提交到服务器进行操作。
#  4  简单分支操作
分支是用指针来实现的master 分支的指针指向最新的一个版本。
![](index_files/3f3d800e-7068-487c-a915-ec723d9c4d15.jpg)
新建一个分支没有复制各个版本而是新建的一个指针和 master 指向同一个版本在这个分支上的操作只是移动这个分支的指针。
![](index_files/a25b5785-ce00-4703-8462-0cfa06d485e6.jpg)
![](index_files/a6fa121a-6a48-4da9-8a7a-4b477c397630.jpg)
新建分支的目的是为了完成一个新想法而不去污染 master 分支。
可以自由的切换分支,在不同分支上进行操作互不影响。
要发布一个新分支发布到 GitHub 上也是用 Publish。
删除一个分支当前分支不可删除需要切换到其它分支才可以删除。Unpublish 是不发布分支也就是删除远程服务器上的分支但是本地上的分支会保留 Delete 是直接删除本地分支并且远程服务器上的分支也会被删除。
master 是默认分支不能被删除可以通过在设置中修改默认分支为其它分支然后再删除 master 分支。需要到 Github 网站上的 setting 中设置默认分支。
#  5  分支合并
通过 merge 合并分支之后会以一个 commit 的形式提交称为融合版本它有两个父版本号并且 master 指针会指向这个 commit。
![](index_files/e6124f92-51f5-4be7-8e03-aa9ea80db04d.jpg)
在并行开发过程中,两个分支可能同时进行修改,如果对同一个文件进行了而修改,就会造成冲突。
本地 master 和远程 master 可以看成两个分支同样也可能出现冲突的情况使用 Sync 就是一个合并本地 master 分支和远端 master 分支的操作。
发生冲突的文件会自动添加冲突标识符,修改的时候也要把冲突标示符删除。
![](index_files/b4fd1a14-ca5f-4916-b6dd-c5c2784d762e.jpg)
#  6  团队协作流程
通过 Github 网站的 Setting 中的 Collaborators 可以为一个仓库添加协作者协作者对项目具有写权限。
每个协作者可以直接对仓库进行修改但是很容易产生冲突只有在做一点小修改时才这么做。当开发新功能时一般是新建一个新分支然后在新分支上进行修改。新分支要合并到 master 分支上之前先提交一个 pull request 来引发讨论和代码审核之后再进行合并操作。
新建分支之后使用 Sync 就可以发布一个 pull request而不是用 publish 该分支。
**Github Flow**
1. 新建话题分支
![](index_files/ba69b54f-aa39-4b5c-a474-d89448803f91.jpg)
2. 实现功能,做成一个个新版本
![](index_files/ab9ad765-a7b5-427d-ba6b-df0c23721fa7.jpg)
3. 发起 pull request就是请求项目参与者 pull 该分支并进行审查和讨论。
![](index_files/f201cd06-a6ce-44b3-919b-3a956d9bd977.jpg)
4. 审查和讨论。该过程的讨论和论坛上类似而且该过程也可以继续提交新的 commit而不用再次发 pull request。
![](index_files/1cdbd78d-0043-40c4-aad5-400d6a74ec69.jpg)
![](index_files/a96896ee-f50c-4a32-947a-0cb949a5fc38.jpg)
5. 最后协作者通过 merge pull request 来合并
![](index_files/60f8eb23-f398-4987-9eb8-69c383d710d9.jpg)
#  7  开源项目共享流程
![](index_files/1ae45cb9-6540-40a4-9edb-02a71172259e.jpg)
开源项目以陌生人为主不可能每个人都成为 Collaborators。
fork 之后相当于拷贝一份仓库到自己的 Github 类似于新建了一个分支。
如果只是对某个文件进行修改那么可以在 Github 网站上通过修改按钮进行修改会自动创建一个 pull request而不用先 fork。
#  8  GitHub Issues
Github 提供了三种辅助设施GitHub Pages搭建项目主页、Wiki知识库、Issues事务卡片。
一个 Issues 相当于一个讨论区可以 @ 某个人让他参与进来。每个 Issues 都有编号 #+ 编号 可以指定某个 Issues。当要回复前面某个评论时可以用 > 引用前面的内容,然后再在下方写回复。>  markdown 的一个标记其后面需要跟上引用内容。一个评论也有特定的链接可以在新评论中插入该链接来快速定位。
![](index_files/cfdf5e0c-8860-4901-beef-c3d6ccaf4c6a.jpg)
Pull Request 会创建一个 Issues。
在一个 commit  sumnary 内容后面加上 Issues 会自动在 Issues 后面新增这个 commit 内容。
![](index_files/b7307f8a-52be-4c84-babe-1362e3069086.jpg)
#  9  GitHub Pages
可以搭建的网站分为用户和组织、项目。
在项目中新建一个 gh-pages 分支可以删除里面的其它文件只放网页的文件比如 index.html。域名为 用户名 .Github.io/ 项目名。
可以使用 Jekyll 等前端框架。
#  10  GitHub 的秘密机关
 Github 网站的项目主页上按 t 快捷键可以打开搜索项目文件的界面。
![](index_files/454f65d3-d700-432e-9637-e7f7b8da44e6.jpg)
#  11  Until Next TimeGoodbye
GitLab 是一个开源免费的类似于 GitHub 的项目可以用它来搭建私有仓库。
# 资源
- [ 课程地址 ](http://www.imooc.com/learn/390)
- [ 课程的文档地址 ](http://book.haoduoshipin.com/Gitbeijing/)