[关闭]
@hainingwyx 2018-09-16T12:57:43.000000Z 字数 8659 阅读 946

GitHub入门与实践读书笔记

Git


1.1 GitHub简介

GitHub是为开发者提供Git仓库的托管服务。这是一个让开发者与朋友、同事、同学以及陌生人共享代码的完美场所。

社会化编程

GitHub曾经的logo里面就有Social Coding这个概念,任何人都可以比从前更加容易地获得源代码,将其自由更改并加以公开。

在Github各个页面按下shift + /都可以打开键盘快捷键一览表。

Explore:最尖端的技术和软件

Gist:使用JavaScript编写的Ace编辑器,管理和发布一些没必要保存在仓库中的代码,如比较小的代码片段。

2.1 版本管理

集中型:以Subversion为代表,将所有数据存放在服务器中,有便于管理的优点,但是,一旦开发者所处的环境不能连接服务器,就无法获得最新的源代码。

分散型:以Git为代表,可以拥有多个仓库,开发者不必连接远程仓库就可以开发。

2.2 Git初始设置

设置姓名和邮箱

  1. $ git config --global user.name "Firstname Lastname"
  2. $ git config --global user.email "youremail@example.com"

这个命令会在“.../User/.gitconfig”中输出设置文件,想要更改信息时,可以直接更改设置文件。

其他初始化操作

  1. $ git config -global core.editor <editor> #设置默认文本编辑器
  2. $ git config -global merge.tool <tool> #设置解决合并冲突时差异分析工具
  3. $ git config --list #检查已有的配置信息

创建新版本库

  1. $ git clone <url> #克隆远程版本库
  2. $ git init #初始化本地版本库

提高命令输出的可读性

  1. $ git config --global color.ui auto

3.1 GitHub的前期准备

https 和 SSH 的区别

  1. 前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
  2. https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

在 github 上添加 SSH key 的步骤

  1. $ cd ~/.ssh
  2. $ ls

这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤2,直接进入步骤3。

  1. $ ssh-keygen -t rsa -C "your_email@example.com"
  2. Generating public/private rsa key pair.
  3. # Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
  4. Enter passphrase (empty for no passphrase):
  5. # Enter same passphrase again:

如果结果为

  1. Your identification has been saved in /c/Users/you/.ssh/id_rsa.
  2. # Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
  3. # The key fingerprint is:
  4. # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

SSH key 已经创建成功,你只需要添加到github的SSH key上就可以。

在Git Bash中输入

  1. $ ssh -T git@github.com

或者

  1. $ ssh -T -p 443 git@ssh.github.com

有一段警告

  1. The authenticity of host 'github.com (207.97.227.239)' can't be established.
  2. # RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
  3. # Are you sure you want to continue connecting (yes/no)?

输入 yes 回车,如果创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

  1. Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

当然如果你密码输错了,会再要求你输入,直到对了为止。

注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。

密码正确后你会看到下面这段话,如:

  1. Hi username! You've successfully authenticated, but GitHub does not
  2. # provide shell access.

查看分支间的差别

4.1 Git基本操作

git init--初始化仓库

用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。
在目录中执行 git init,就可以创建一个 Git 仓库了。比如我们创建 runoob 项目:

  1. $ mkdir runoob
  2. $ cd runoob
  3. $ git init
  4. Initialized empty Git repository in /Users/tianqixin/www/runoob/.git/
  5. # 在 /runoob/.git/ 目录初始化空 Git 仓库完毕。

在Git中我们称这个目录的内容为“附属于该仓库的工作树”,文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。如果需要恢复之前的状态,可以从仓库调取之前的快照。

git status 查看仓库状态
git status -s以获得简短的结果输出。
git add 向暂存区添加文件
git add . 命令来添加当前项目的所有文件
git commit 保存仓库的历史记录

  1. $ git commit -m "First commit"
  2. # -m 参数后面的"First commit称作提交信息
  3. $ git commiy -am "Add something"
  4. # 包含了git add 和 git commit

如果想要记录更加详细的信息,直接执行“git commit”命令即可,编辑器记录提交信息的格式为:

退出和保存操作参照Vim编辑器基本操作
git commit -a跳过git add 提交缓存的流程

git log--查看提交日志

  1. $ git log --pretty=short
  2. # 只让程序显示第一行简述信息
  3. $ git log README.md
  4. # 只显示指定文件的信息
  5. $ git log -p
  6. # 查看提交带来的改动
  7. $ git log -p README.md

git diff--查看当前工作树和暂存区的区别

  1. $ git diff HEAD
  2. # 查看工作树与最新提交的区别,可以在git commit之前用

尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

4.2 推送远程仓库

需要在GitHub上建立与本地仓库一致的远程仓库,创建时不要生成README.md文件。

git remote add 添加远程仓库

  1. $ git remote add origin git@github.com:WangYixin-Tom/Modern-Signal-Processing.git

这项指令可以直接从GitHub上拷贝。

git push 推送至远程仓库

  1. $ git push -u origin master

本地仓库的master分支将会被推送到远程仓库中。

远程仓库也可以创建其他分支。例如分支feature-D,将它以同名形式push至远程仓库。

  1. $ git checkout -b feature-D #本地仓库建立分支
  2. $ git push -u origin feature-D #推送至远程仓库

如果提示: error setting certificate verify locations,需要重新定位整证书的位置,并再次推送。

  1. git config --system http.sslcainfo "D:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"

4.3 从远程仓库获取

  1. $ git clone git@github.com:github-book/git-tutorrial.git #注意不要与之前的仓库在同一个目录下
  2. $ git branch -a #查看分支信息
  3. $ git checkout -b feature-D origin/feature-D #将远程仓库中分支获取至本地仓库
  4. $ git diff #修改之后,查看修改
  5. $ git commit -am "Add feature-D"
  6. $ git push

如果需要获得最新的远程仓库分支

  1. $ git pull origin feature-D

如果两人同时修改了同一部分的源代码,push时就很容易发生冲突。所以多名开发者在同一个分支作业时,建议频繁进行push和pull操作。

4.4 分支

不同的分支中,可以同时进行完全不同的作业,等该分支的作业完成之后再与master分支合并,可以实现多人高效地并行开发。

4.5 更改操作

merge分支的时候,可能会有冲突,这个时候需要手动查看冲突部分,在编辑器中修改成我们希望得到的样子。然后重新执行add和commit 命令。

在合并特性分支之前,如果发现已经提交的内容中有拼写错误等,可以提交一个修改,将修改压缩到一个历史记录中。

5.1 Pull Request

定义:自己修改源代码之后,请求对方仓库采纳该修改时采取的一种行为。在网络上也常常被简称为PR。

Pull Request一般流程

  1. Fork源代码管理者的远程仓库,建立自己的远程仓库
  2. pull需要修改的特性分支到自己本地仓库
  3. 新建需要修改的特性分支,并做相应修改
  4. push到自己的远程仓库
  5. 发送PullRequest

clone

  1. $ git clone git@github.com:hirocastest/first-pr.git
  2. $ cd first-pr

branch

  1. $ git branch -a #查看clone出的仓库分支
  2. $ git checkout -b work gh-pages #创建work分支并自动切换
  3. $ git branch -a #确认切换work分支
  4. $ ls #查看文件列表,并对相应文件做修改

提交修改

  1. $ git diff #查看修改是否正确进行
  2. $ git add index.html
  3. $ git commit -m "Add my impression"
  4. $ git push origin work #创建远程分支
  5. $ git branch -a #查看远程分支

为了防止开发到一半的Pull Request被误合并,可以在标题前面加上[WIP]表示Work In Process。完成之后再去掉这个标记。

如果用户对该仓库拥有编辑权限,则可以直接创建分支,从分支发送Pull Request。可以免去Fork的麻烦。

6.1 仓库的维护

可以将原仓库设置为远程仓库,从该仓库fetch数据并与本地仓库进行合并,让本地仓库保持最新的状态。

  1. $ git clone git@github.com:hirocastest/Spoon-Knife.git
  2. $ cd Spoon-Knife
  1. $ git remote add upstream git://github.com/octocat/Spoon-knife.git #upstream作为原仓库的表示符
  1. $ git fetch upstream #获取最新源代码
  2. $ git merge upstream/master #合并

以后只要重复这一步骤即可。

6.2 Pull Request的接收

首先可以通过代码审查,进行评论和比较。

其次,可以在本地开发环境中反映Pull Request的内容变化

  1. $ git clone git@github.com:ituring/first-pr.git
  2. $ cd first-pr
  1. $ git remote add PR发送者 git@github.com:PR发送者/first-pr.git
  2. $ git fetch PR发送者
  1. $ git checkout -b pr1
  1. $ git merge PR发送者/work

实际开发之中需要检查软件是否能正常运行

  1. $ git branch -D pr1

删除没有用的pr1分支

GitHub上点击Merge Pull Request自动合并至仓库或者利用CLI进行合并操作再push至GitHub

  1. $ git checkout gh-pages # 切换至 gh-pages 分支
  2. $ git merge PR发送者/work #合并分支
  3. $ git diff origin/gh-pages #查看两者区别,确认
  4. # git push

用这种方法处理之后仓库的PR自动从open状态切换到close状态。

7.1 GitHub Flow的流程

查看GitHub的分支列表页面(https://github.com/用户名/仓库名/branches)还可以轻松掌握各分支与master分支的差别。

附录

Vim 编辑器基本操作

按下Esc; 进入命令模式,然后输入

或者可以按下(Esc Shift+Z Shift+Z)以写入/保存,同时离开。

Vim有帮助,只需要按下,输入,

Vim has extensive help, so type Esc:helpReturn and you will have all your answers and even a neat tutorial.

Git资料

Git托管的软件

Git常用命令

master : 默认开发分支; origin : 默认远程版本库

初始化操作

  1. $ git config -global user.name <name> #设置提交者名字
  2. $ git config -global user.email <email> #设置提交者邮箱
  3. $ git config -global core.editor <editor> #设置默认文本编辑器
  4. $ git config -global merge.tool <tool> #设置解决合并冲突时差异分析工具
  5. $ git config -list #检查已有的配置信息

创建新版本库

  1. $ git clone <url> #克隆远程版本库
  2. $ git init #初始化本地版本库

修改和提交

  1. $ git add . #添加所有改动过的文件
  2. $ git add <file> #添加指定的文件
  3. $ git mv <old> <new> #文件重命名
  4. $ git rm <file> #从缓存区和硬盘中删除文件
  5. $ git rm -cached <file> #缓存区删除但硬盘不删除
  6. $ git commit -m <file> #提交指定文件
  7. $ git commit -m commit message #提交所有更新过的文件
  8. $ git commit -amend #修改最后一次提交
  9. $ git commit -C HEAD -a -amend #增补提交(不会产生新的提交历史纪录)

查看提交历史

  1. $ git log #查看提交历史
  2. $ git log -p <file> #查看指定文件的提交历史
  3. $ git blame <file> #以列表方式查看指定文件的提交历史
  4. $ gitk #查看当前分支历史纪录
  5. $ gitk <branch> #查看某分支历史纪录
  6. $ gitk --all #查看所有分支历史纪录
  7. $ git branch -v #每个分支最后的提交
  8. $ git status #查看当前状态
  9. $ git diff #查看变更内容

撤消操作

  1. $ git reset -hard HEAD #撤消工作目录中所有未提交文件的修改内容
  2. $ git checkout HEAD <file1> <file2> #撤消指定的未提交文件的修改内容
  3. $ git checkout HEAD. #撤消所有文件
  4. $ git revert <commit> #撤消指定的提交

分支与标签

  1. $ git branch #显示所有本地分支
  2. $ git checkout <branch/tagname> #切换到指定分支或标签
  3. $ git branch <new-branch> #创建新分支
  4. $ git branch -d <branch> #删除本地分支
  5. $ git tag #列出所有本地标签
  6. $ git tag <tagname> #基于最新提交创建标签
  7. $ git tag -d <tagname> #删除标签

合并与衍合

  1. $ git merge <branch> #合并指定分支到当前分支
  2. $ git rebase <branch> #衍合指定分支到当前分支

远程操作

  1. $ git remote -v #查看远程版本库信息
  2. $ git remote show <remote> #查看指定远程版本库信息
  3. $ git remote add <remote> <url> #添加远程版本库
  4. $ git fetch <remote> #从远程库获取代码
  5. $ git pull <remote> <branch> #下载代码及快速合并
  6. $ git push <remote> <branch> #上传代码及快速合并
  7. $ git push <remote> : <branch>/<tagname> #删除远程分支或标签
  8. $ git push -tags #上传所有标签

更新本地仓库

  1. //方法一
  2. $ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master
  3. $ git log -p master.. origin/master//比较本地的仓库和远程参考的区别
  4. $ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并
  5. //方法二
  6. $ git fetch origin master:temp//从远程的origin仓库的master分支下载到本地并新建一个分支temp
  7. $ git diff temp//比较master分支和temp分支的不同
  8. $ git merge temp//合并temp分支到master分支
  9. $ git branch -d temp//删除temp
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注