SSH免密上传本地项目到GitHub for mac

楔子

试想以下两种场景:

  • 场景一
    《鹿鼎记》中青木堂香主韦小宝每次见手下都要来两句:
    ** 地震高岗,一派西山千古秀,**
    ** 门朝大海,江河河水万年流。**
    这还是短的,有的暗号更长,说错一个字或顺序不对都要从头再来,韦小宝想明明已经很熟了还要每次都来这套,你说烦不烦,肯定烦,但为了反清复明的大业,韦香主你就忍了吧!!!
  • 场景二
    时光穿梭到了现代,《伪装者》的军统特工或地下党们为了在公众场合掩人耳目,便以胸前插支或用两半撕开的纸币接头交换情报,既能验证双方身份又快速简洁不易察觉!!!

很显然,以上两种场景中后者在现实使用中更优,体现谍者随时代发展而进步。
身份验证古往今来都不可或缺,场景一就像每次我们做事前都要原班输入账号密码一样繁琐又无奈;场景二就是这种无奈之下的改进措施,由账号-密码转化为SSH免密登陆。

SSH密钥对采用的是RSA非对称加密算法,而由账户-密码方式的身份验证到SSH免密登录绝不仅仅是技术上应用,更是设计思想的巧妙运用。我们在做技术的过程中遇到的问题往往是有多种解决方案,就是“怎么着都行”,而在这多种方案的比较、分析中往往能迸发出奇妙创新的思维火花,也就是换个思路问题竟如此简单的那种极爽的感觉,这就是程序员的快乐!!!

笔者在此就以上传本地项目到GitHub为例子,假设读者朋友们没有任何账号+没有装载任何客户端,期望能让大家吃着火锅唱着歌就能把事儿给办了。

一、安装Git

  1. Git命令行版本 从terminal即终端输入命令进行操作。
  2. Git可视化管理工具 可视化页面点点鼠标就能完成各项操作,建议使用SourceTree,程序员喜闻乐见的git可视化工具。

根据笔者经验,命令行操作没有SourceTree等可视化工具操作方便、简洁、直观,但是一步一步的命令行更便于我们理解git版本控制的原理,还可以做一些更细致的操作。本人一般都是用命令行提交、拉取、合并代码,但是用SourceTree查看提交记录和冲突部分的代码,非常直观。

  • git 操作细节可看文章缪雪峰的git教程

二、GitHub部分

1. 注册GitHub账号

登陆GitHub官网,按引导注册即可

SSH免密上传本地项目到GitHub for mac_第1张图片
注册GitHub账号

2. 创建 respository(代码仓库)

建好的代码仓库自带.git文件进行仓库管理,即我们常说的版本控制,respository存放并管理着库内所有文件、资源、代码的存取、更新、记录等,和现实中物流仓库功能很相似。

无图无真相,观众朋友们按图索骥就行了。

SSH免密上传本地项目到GitHub for mac_第2张图片
创建仓库
SSH免密上传本地项目到GitHub for mac_第3张图片
配置仓库信息
SSH免密上传本地项目到GitHub for mac_第4张图片
仓库创建完成

3. 建立本地与GitHub的交互通道

说白了,GitHub上我们建立的是开源项目,也就是人人看得见,摸得着(都能下载、克隆),但只有本账号持有者才有更改的权限(人人都能直接改就乱套了)。现在问题来了:GitHub怎么识别账号持有者呢?

3.1. GitHub上直接操作

很显然这种方式是通过账号-密码的形式直接从官网进行操作的,看似简单直接,但看看就行了,因为不支持文件夹,这对单独或简单创建和上传少许文件比较适用,而我们的项目数不胜数的文件文件夹,显然不行。

SSH免密上传本地项目到GitHub for mac_第5张图片
github直接操作

3.2. GIt可视化工具管理仓库文件

利用Git可视化工具如SourceTree进行代码操作,每次push操作时都会验证用户合法性,即需要输入相应GitHub账号-密码。

3.3. SSH免密登陆

简单点说就是,用自己的电脑生成了一对密钥对,私钥文件留在本机特定地方,公钥放在GitHub特定地方,每次进行网路交互时,一旦双方密钥能对上,就说明用户身份有效。有兴趣的同学可看看下面文章:
ssh 免密码登录

账号-密码式的用户验证方式就像是每次见面都先来一通“天王盖地虎”的说道,不烦才怪。而SSH免密验证就像是双方拿着两半撕开的纸币,合上即代表自己人,一切尽在不言中,是不是酷毙了!!!

3.3.1. .ssh文件

cd ~/.ssh/,若无此文件夹需要创建一个 mkdir .ssh

3.3.2. 创建SSH密钥对

~/.ssh/目录下,ssh-keygen -t rsa -C "[email protected]" 后面“ ”里面改成你的邮箱就行,回车会提示你输入密钥文件名,然后输入密码什么的,既可以根据提示设置,也可以无视一直回车下去。

3.3.3. 将SSH密钥公钥放进GitHub

open . 打开.ssh,找到公钥文件(.pub)打开复制其文本内容
登陆GitHub,进入Settings

SSH免密上传本地项目到GitHub for mac_第6张图片
1. 进入设置
SSH免密上传本地项目到GitHub for mac_第7张图片
2. 添加SSH公钥
SSH免密上传本地项目到GitHub for mac_第8张图片
3. 配置SSH公钥信息
SSH免密上传本地项目到GitHub for mac_第9张图片
4. 公钥添加成功
3.4. 测试SSH密钥设置是否成功

ssh -T [email protected]

bogon:test2 guoxiangyang$ ssh -T [email protected]
Permission denied (publickey).

修改了密钥文件名之后就行了:

bogon:~ guoxiangyang$ ssh -T [email protected]
Hi guoxiangyang110! You've successfully authenticated, but GitHub does not provide shell access.

经验证SSH密钥文件名不是id_rsa 和 id_rsa.pub好像是不行,知道原因的同学还请指教一二。

三、上传本地项目到GitHub

1. 克隆代码仓库

cd 到存储代码仓库的目录

// 根据自身情况跟换后面的代码仓库目录
git clone [email protected]:guoxiangyang110/HelloWorld.git

之后同样有2条路可以走

  • git可视化工具
    将clone下来的代码仓拖拽到SourceTree工程列表中,然后进行各种操作
  • git命令行
常用命令 作用
git init git 仓库初始化
git add 添加文件至git缓存
git commit 提交文件到本地代码仓库
git push 提交更新到远程(GitHub
bogon:HelloWorld guoxiangyang$ git init
Reinitialized existing Git repository in /Users/guoxiangyang/Desktop/Test/HelloWorld/.git/
bogon:HelloWorld guoxiangyang$ git add .
bogon:HelloWorld guoxiangyang$ git commit -m "first commit"
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
bogon:HelloWorld guoxiangyang$ git push origin master:master
Everything up-to-date

2. 上传本地项目

只需将本地项目添加到clone下来的代码仓库里,然后用SourceTree或命令行addcommitpushGitHub即可。

四、删除GitHub上的代码仓库

操作简单但一开始不太好找,以图说明:

SSH免密上传本地项目到GitHub for mac_第10张图片
进入项目设置

翻滚到左下方,点击确定删除


SSH免密上传本地项目到GitHub for mac_第11张图片
删除项目

输入要删除的仓库名称,确定删除


SSH免密上传本地项目到GitHub for mac_第12张图片
删除特定项目

他山之石

本文特别感谢包括并不限于以下优秀文章:
http://www.open-open.com/lib/view/open1454507333214.html
http://blog.csdn.net/leikezhu1981/article/details/47664215
http://www.jianshu.com/p/9c918d96f941

你可能感兴趣的:(SSH免密上传本地项目到GitHub for mac)