GitHub
更新日期:
以前玩 GitHub,懵懵懂懂啊朦朦胧胧,就记得,中间环节但凡求助于他人,即便最后弄好了,自己其实还是有些稀里糊涂。本周有项任务:用脚本定期从 GitHub上下载最新代码。于是,就借此机会,把这里搞清楚些。
你是否有过这样的经历:某次,自己在某处瞎转悠了一个多小时死都没找到目的地or地铁or公交站牌,甚是沮丧。可是,等你以后再去那儿时,会很熟悉,即便没有GPS也不怕迷路了。自己倒腾,虽然是有些费时费力,但,此阶段,到该自己摸索的时候了。
今天就先聊聊最爱出问题的权限问题,再科普下GitHub。
SSH keys
介绍
GitHub 上有详细的文档说明,里面介绍了如何查看本地的已有 SSH keys、如何创建一个新 SSH key、如何把它添加到 ssh-agent、如何添加到你的账户,以及一些常见问题。目录如下所示。
在页面上的入口,详见:
用法示例:
- 查看已经存在的 SSH keys
- 生成一个新的 SSH Key
- 并将其添加至 ssh-agent
遇到的问题
问题:授权的 key 被标识为只读,没法读取远程仓库
原因:是因为添加了多个 key
解决:清空,再重新添加,就好了。参考 stackoverflow 上的 Github authenticates but will not allow code push。整个过程,如下
很久之前也碰到过类似的问题,但原因不同。那次是因为没有用 SSH 克隆代码导致的,可参考 stackoverflow 上的 Configuring Git over SSH to login once。
今天更新时,又碰到了类似的问题。解决方法是:在 github 上 key 的授权改成具有写权限的,即 “Read/write”
杂谈
- 生成的 SSH keys 是一对 public/private rsa (比如: id_rsa.pub 和 id_rsa),pub的传给git,private的本机留着
- 默认路径就是 C:\Users\anjia\.ssh,即 ~\.ssh
如果你新输入了名字,那就会在当前目录下(要在默认路径下用新名字,那就只能用绝对路径)
后面弹出的框,是要你设置密码的。默认为空,直接回车就好 - 查看本机目前所有的 public SSH key
命令 $ ls -al ~/.ssh - 一个 key 只能用于一个账户或者一个仓库;同样,一个仓库也只能有一个 key(key是指特定的一台机器。我碰到的情况就是:添加了2个key导致的权限问题)
- 默认情况,public keys 的文件名字是以下中的一个
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub(window)
关键词:
- 打开 Git Bash
- SSH key
- ssh-agent
.bash_history
.gitconfig
GitHub
入门
GitHub上有个专门的 文档说明 让你快速入门 Git 和 GitHub。不需要任何编码,单纯通过页面上的鼠标操作,就可以完成:创建一个仓库,开始一个分支,发表评论,开启一个拉取请求。
- 创建&使用一个仓库
- 开始&管理一个新的分支 branch
- 修改一个文件、并把它作为一个 commits 提交到 GitHub 上
- 打开&合并一个 pull request
关键词:
- GitHub:是一个代码管理平台,可以进行版本控制和多人协作
Git:是一个版本管理的软件,GitHub就是建立在它上面的 - Master、Branch
- Pull Request:commit -> merge
两种 clone 方式
一个仓库,一般有两种方式去拷贝or下载,就是 HTTPS 和 SSH。
- HTTPS(prefer to use it)
用 HTTPS 克隆,优点是方便。它是用 GitHub 的用户名和密码进行认证的。所以,每次提交的时候,都会提示你输入用户名和密码(当然也有相应的工具帮助缓存 GitHub 的账户信息,比如 credential helper ) - SSH
它不需要输入用户名和密码,它是用 SSH key 认证的。值得一提的是,SSH key 和机器相关,等你换了一台机器的时候,就得重新生成并添加 SSH key。
心得及参考
心得就是:
- 有问题,就 stackoverflow 和 google 吧(一段时间没搜疑难杂症就又忘记了…)本次,谨记之
- 英文文档:不得不说,有时候还是英文文档读着更直观些,知道它到底在说什么(被翻译过来的…是会丢掉一些东西)
- GitHub 上的资料是真的挺全的。没有你想不到的,只有你没发现的…
https://guides.github.com/activities/hello-world/
//这里面有脚本
http://stackoverflow.com/questions/1595848/configuring-git-over-ssh-to-login-once
http://stackoverflow.com/questions/9560892/permissions-error-github-ssh-key-not-recognized
http://stackoverflow.com/questions/13306435/repository-access-denied-access-via-a-deployment-key-is-read-only
http://stackoverflow.com/questions/33467474/github-authenticates-but-will-not-allow-code-push