美文网首页码农的世界iOS Developer工具癖
SSH免密上传本地项目到GitHub for mac

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

作者: 蓝色小石头 | 来源:发表于2017-06-14 15:06 被阅读207次

    楔子

    试想以下两种场景:

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

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

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

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

    一、安装Git

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

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

    二、GitHub部分

    1. 注册GitHub账号

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

    注册GitHub账号

    2. 创建 respository(代码仓库)

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

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

    创建仓库 配置仓库信息 仓库创建完成

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

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

    3.1. GitHub上直接操作

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

    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

    1. 进入设置 2. 添加SSH公钥 3. 配置SSH公钥信息 4. 公钥添加成功
    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或命令行addcommitpushGitHub即可。

    四、删除GitHub上的代码仓库

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

    进入项目设置

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


    删除项目

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


    删除特定项目

    他山之石

    本文特别感谢包括并不限于以下优秀文章:
    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

        本文链接:https://www.haomeiwen.com/subject/uvtjqxtx.html