Github免密操作

客户端生成SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

根据要求输入密码,一路回车。

之后会在用户目录(~/)下生成.ssh文件夹,打开id_rsa.pub,复制里面的key

返回GitHub,进入 Account => Settings,选择SSH and GPG keys,点击 New SSH key 按钮,将之前复制的key粘贴至页面中,点击Add SSH key

SSH中公钥认证流程:

  1. Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
  2. Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R)
    ,然后将加密后信息发送给Client。
  3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  4. Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

验证是否成功

$ ssh -T git@github.com

GIT操作

远程仓库

添加远程库

git remote add [shortname] [url]
//例如:
git remote add origin https://github.com/yinyayun/Gridea.git

通常都将远程库叫做origin,有了远程库,我们可以从远程库进行拉取代码到本地,也可以将本地代码推送至远程库。

推送至远程仓库

git push [alias] [branch]

例如,将当前分支推送至远程:

git push origin master

如果本地master和远程master还未做关联,即远程master暂且为一个空库,那么第一次将本地内容push到远程时,需要加上参数-u,将本地master和远程master进行关联:

git push -u origin master

从远程库克隆

从上面的介绍我们发现,我们将本地代码推送到远程,大致要做3件事

  • 本地添加远程库别名
  • 关联本地库和远程库
  • 推送

然而,我们还有一种更简单的方式,即直接从远程clone到本地,这样不光添加了远程库,还然本地和远程做了关联。

$ git clone https://github.com/yinyayun/yinyayun.github.io.git

进入yinyayun.github.io目录,使用git remote -v查看,我们就可以发现远程库的信息:

$ git remote -v
origin  https://github.com/yinyayun/yinyayun.github.io.git (fetch)
origin  https://github.com/yinyayun/yinyayun.github.io.git (push)

从远程更新

$ git fetch  ## git fetch origin
$ git merge  ## 从远程拉取完之后,需要将代码合并至本地的分支中

上面的命令等价于:

git pull <远程库名> <远程分支名>:<本地分支名>

删除远程仓库

git remote rm [别名]

本地仓库

添加暂存区

$ git add <file>

本地仓库提交

$ git commit -m “message”

分支管理

创建分支

$ git branch <name> ## git branch dev

切换分支

$ git checkout <name> ## git checkout dev

创建并切换分支

git checkout -b <name> ## git checkout -b dev

合并分支

将某个分支合并到当前分支

$ git merge <name>

例如上面我们从master创建并切换到dev分支,同时我们对dev分支做了修改,如果我们要将dev分支内容合并至master分支,那么需要作如下操作:

$ git checkout master
$ git branch ## 查看当前分支
* master
  dev
$ git merge dev

删除分支

$ git branch -d <name>

其他

常用命令

$ git diff HEAD -- <file> ##查看差异
$ git status
$ git log

代理

git config --global https.proxy http://yinyayun:yinyayun0802@192.168.25.210:8080