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中公钥认证流程:
- Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
- Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R)
,然后将加密后信息发送给Client。- Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
- 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