楔子
试想以下两种场景:
- 场景一
《鹿鼎记》中青木堂香主韦小宝每次见手下都要来两句:
** 地震高岗,一派西山千古秀,**
** 门朝大海,江河河水万年流。**
这还是短的,有的暗号更长,说错一个字或顺序不对都要从头再来,韦小宝想明明已经很熟了还要每次都来这套,你说烦不烦,肯定烦,但为了反清复明的大业,韦香主你就忍了吧!!! - 场景二
时光穿梭到了现代,《伪装者》的军统特工或地下党们为了在公众场合掩人耳目,便以胸前插支或用两半撕开的纸币接头交换情报,既能验证双方身份又快速简洁不易察觉!!!
很显然,以上两种场景中后者在现实使用中更优,体现谍者随时代发展而进步。
身份验证古往今来都不可或缺,场景一就像每次我们做事前都要原班输入账号密码一样繁琐又无奈;场景二就是这种无奈之下的改进措施,由账号-密码转化为SSH免密登陆。
SSH密钥对采用的是RSA非对称加密算法,而由账户-密码方式的身份验证到SSH免密登录绝不仅仅是技术上应用,更是设计思想的巧妙运用。我们在做技术的过程中遇到的问题往往是有多种解决方案,就是“怎么着都行”,而在这多种方案的比较、分析中往往能迸发出奇妙创新的思维火花,也就是换个思路问题竟如此简单的那种极爽的感觉,这就是程序员的快乐!!!
笔者在此就以上传本地项目到GitHub为例子,假设读者朋友们没有任何账号+没有装载任何客户端,期望能让大家吃着火锅唱着歌就能把事儿给办了。
一、安装Git
- Git命令行版本 从terminal即终端输入命令进行操作。
- Git可视化管理工具 可视化页面点点鼠标就能完成各项操作,建议使用SourceTree,程序员喜闻乐见的git可视化工具。
根据笔者经验,命令行操作没有SourceTree等可视化工具操作方便、简洁、直观,但是一步一步的命令行更便于我们理解git版本控制的原理,还可以做一些更细致的操作。本人一般都是用命令行提交、拉取、合并代码,但是用SourceTree查看提交记录和冲突部分的代码,非常直观。
- git 操作细节可看文章缪雪峰的git教程
二、GitHub部分
1. 注册GitHub账号
登陆GitHub官网,按引导注册即可
2. 创建 respository(代码仓库)
建好的代码仓库自带.git文件进行仓库管理,即我们常说的版本控制,respository存放并管理着库内所有文件、资源、代码的存取、更新、记录等,和现实中物流仓库功能很相似。
无图无真相,观众朋友们按图索骥就行了。
3. 建立本地与GitHub的交互通道
说白了,GitHub上我们建立的是开源项目,也就是人人看得见,摸得着(都能下载、克隆),但只有本账号持有者才有更改的权限(人人都能直接改就乱套了)。现在问题来了:GitHub怎么识别账号持有者呢?
3.1. 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 "your_email@example.com"
后面“ ”里面改成你的邮箱就行,回车会提示你输入密钥文件名,然后输入密码什么的,既可以根据提示设置,也可以无视一直回车下去。
3.3.3. 将SSH密钥公钥放进GitHub
open . 打开.ssh,找到公钥文件(.pub)打开复制其文本内容
登陆GitHub,进入Settings
3.4. 测试SSH密钥设置是否成功
ssh -T git@github.com
bogon:test2 guoxiangyang$ ssh -T git@github.com
Permission denied (publickey).
修改了密钥文件名之后就行了:
bogon:~ guoxiangyang$ ssh -T git@github.com
Hi guoxiangyang110! You've successfully authenticated, but GitHub does not provide shell access.
经验证SSH密钥文件名不是id_rsa 和 id_rsa.pub好像是不行,知道原因的同学还请指教一二。
三、上传本地项目到GitHub
1. 克隆代码仓库
cd 到存储代码仓库的目录
// 根据自身情况跟换后面的代码仓库目录
git clone git@github.com: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
或命令行add
、commit
、push
到GitHub
即可。
四、删除GitHub上的代码仓库
操作简单但一开始不太好找,以图说明:
翻滚到左下方,点击确定删除
输入要删除的仓库名称,确定删除
他山之石
本文特别感谢包括并不限于以下优秀文章:
http://www.open-open.com/lib/view/open1454507333214.html
http://blog.csdn.net/leikezhu1981/article/details/47664215
//www.greatytc.com/p/9c918d96f941