github入门书籍总结
第一章 由来
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_rsa
和id_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入门书籍总结的更多相关文章
- 搜刮一些开源项目的APP
iOS完整App资源收集 <iOS完整app资源收集> <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...
- 结合个人经历总结的前端入门方法 (转自https://github.com/qiu-deqing/FE-learning)
结合个人经历总结的前端入门方法 (https://github.com/qiu-deqing/FE-learning),里面有很详细的介绍. 之前一直想学习前端的,都不知道怎么下手都一年了啥也没学到, ...
- 前端工作面试问题--摘取自github
前端工作面试问题 本文包含了一些用于考查候选者的前端面试问题.不建议对单个候选者问及每个问题 (那需要好几个小时).只要从列表里挑选一些,就能帮助你考查候选者是否具备所需要的技能. 备注: 这些问题中 ...
- 转:怎么使用github(通俗易懂版)
转: https://www.zhihu.com/question/20070065 作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/ans ...
- github使用-知乎的某小姐的一篇文章
作者:珊姗是个小太阳链接:http://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. 作为一个文科 ...
- MAC使用GITHUB
作者:珊姗是个小太阳链接:https://www.zhihu.com/question/20070065/answer/79557687来源:知乎著作权归作者所有,转载请联系作者获得授权. #什么是 ...
- 文科妹学 GitHub 简易教程
#什么是 Github ?必须要放这张图了!!!<img src="https://pic4.zhimg.com/7c9d3403bf922b1663f56975869c829b_ ...
- 【Git和GitHub】学习笔记
1. 书籍推荐: 先看一本比较简单并且好的入门书籍 Git - Book https://git-scm.com/book/zh/v2 2. 书籍理解: Git 有三种状态,你的文件可能处于其中之一: ...
- 文科妹学 GitHub 简易教程(转)
文科妹学 GitHub 简易教程 #什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版 ...
随机推荐
- shell编程(四)之循环控制语句(for,while,until,break,continue,case)
for循环 语法:for NAME in LIST; do 循环体 done 列表生成方式:1.整数列表 {start...end} $(seq,[start [step]] end)2.glob / ...
- Cannot retrieve metalink for repository: epel 错误解决办法
centos下安装完EPEL源, 然后更新一下yum缓存, 如果发现这样的错误:Error: Cannot retrieve metalink for repository: epel. Please ...
- P2517 [HAOI2010]订货
思路 费用流水题 对每月拆点,入点向出点连cap=ui的边,s向入点连cost=di的边,i的入点向i+1的入点连cap=S的边即可 代码 #include <cstdio> #inclu ...
- SalGAN: Visual saliency prediction with generative adversarial networks
SalGAN: Visual saliency prediction with generative adversarial networks 2017-03-17 摘要:本文引入了对抗网络的对抗训练 ...
- 如何判断一个单向链表是否为回文链表(Palindrome Linked List)
题目:给定一个单向链表,判断它是不是回文链表(即从前往后读和从后往前读是一样的).原题见下图,还要求了O(n)的时间复杂度O(1)的空间复杂度. 我的思考: 1,一看到这个题目,大脑马上想到的解决方案 ...
- 2、Python程序控制结构(0530)
条件测试: 1.if 条件测试表达式 python的比较操作 1.所有的python对象都支持比较操作 可用于测试相等性.相对大小等: 如果是符合对象,python会检查其所有部分,包括自动遍历各级嵌 ...
- nodejs的dependency.md
dependency和devDependency的区别 package-a --- package-b (dependency) --- | --- package-c (devDependency) ...
- Python 汉诺塔游戏
#n 多少个盘子 def hanoi(n,x,y,z): : print(x,'→',z) else: hanoi(n-, x, z,y) #将前n-1个盘子从X移动到y上 print(x,'→',z ...
- react native 第三方组件react-native-swiper 轮播组件
github地址:https://github.com/leecade/react-native-swiper 使用方法:安装:npm i react-native-swiper –save 查看模块 ...
- hdu 2034 改革春风吹满地 多边形面积
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...