GitHub 的作用就是将代码储存到云端

GitHub 怎么连接 GitHub账号和电脑上的 Git仓库?

  1. 使用 ssh key
  2. 电脑上放私钥,GitHub 账号里留下公钥
  3. 上传代码是用私钥加密,GitHub 用公钥解密
    • id_rsa :公钥
    • id_rsa.pub:私钥

如何生成 ssh key 密钥

生成 ssh key

  • GitHub 有帮助文档
  • 运行 ssh-keygen -t rsa -b 4096 -C 你的邮箱
  • 然后一直回车,知道没有提示
  • cat ~/.ssh/id_rsa.pub 得到公钥内容,复制后粘贴到 GitHub
  • 打开 GitHub,在设置页面填入公钥

    1. $ ssh-keygen -t rsa -b 4096 -C 你的邮箱 # 用于生成 shh-key
    2. # 密钥的目录是 '~/.ssh'
    3. $ cat ~/.ssh/id_rsa.pub # 得到公钥内容

    如何测试配对成功了

  • ssh -T git@github.com

  • 如果问 yes/no,请回答 yes 并回车

设置了公钥就能上传和下载了,通过:

  • git pull
  • git push
  • git clone

上传代码到 GitHub

GitHub 用来备份 .git/ 而已

  • git remote add origin git@xxxxxxxx
  • git push -u origin master

1. 新建 GitHub Repo(远程仓库),复制其 SSH 地址

  • 仓库 ssh 地址 :https://github.com/TKwan96/仓库名.git
  • 一定要点击 SSH,不要用 STTPS
    • 因为 Https:// 地址,每次都要输入密码,太不方便

image.png

2. 在本地添加远程仓库地址

  1. $ git remote add origin git@github.com:TKwan96/仓库名.git

image.png

  • origin 是远程库的默认名字,可以换但不建议换
  • 如果想上传到两个远程仓库,那么可以将第二个 origin 更改为其他名字

3. 推送本地 master 分支到远程origin的 master 分支

  1. $ git push -u origin master # 下次也按照这样推送到 origin 仓库的 master 分支
  2. # 只有第一次需要写 -u origin master,后面直接 git push 即可

**-u**:把这次匹配的推送记下来,下次依旧这样推送

  • 这次推送到 origin ,就是推到 git@github.com:TKwan96/demo-2.git 地址
  • 然后推送到 master 分支
git push 每次 push 只是把本地仓库的分支上传到远程仓库的分支,仅此而已
git pull 是把远程分支合并到本地对应的分支。
-u origin master 的意思是设置上游分支,之后就不用设置上游分支了,直接 git pull ;git push.
只要看到了
master -> master
就说明本地的 master
上传到了远程的 master 分支
image.png
  • 如果提示应 git pull ... ,则 pull 一下 | 如果 push 的时候遇到此提示
    - 运行 git pull
    - 再重新运行之前的命令
    | image.png | | —- | —- |

**git commit --amend**
修改上一次提交,将两次提交合并为一次提交。如果你不满意上次的提交,可以修改掉之前写的日志。

  • 修改提交的内容分为2种情况:
    • 提交了代码之后,又有新的改动,不想创建两个 commit
    • 发现一个地方改错了,下次提交时不想保留上一次的记录
  • 这时就可以使用 git commit --amend 命令把新的内容添加到之前的 commit 里面,这个命令没有添加新的提交,而是用新提交取代了原始提交。

4. 如何上传其他分支

方法一:

  1. $ git push origin x:x # 把本地 x 分支上传到远程 x 分支
  2. # x:x 左边x是源头,右边x是目标

方法二:

  1. git checkout x
  2. git push -u origin x

5. 如何上传到两个远程仓库

  1. $ git remote add repo2 git@xxxxxx
  2. $ git push -u repo2 master

如果提示 git pull

  • 说明新建项目的时候创建了一些文件
  • 只需要运行 git pull 之后再运行刚才的命令即可。

上传到两个远程仓库的用途:

  • 有些软件有收费版和免费版,可以把1号远程库做免费版,2号远程库做收费版。有些功能就可以只推送到2。

    下载远程仓库到本地

    git clone

  • 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者修改该项目。

    如何下载代码

  • git clone git@xxxxx[目标路径]

    • 每次 clone 的时候是把它的所有分支都下载下来
  • 如果是不同机器,要写上传新的 ssh key(一机一key)
  • cd 目标路径 :进入目标路径
  • 然后在仓库里进行四连操作:

    1. $ git add
    2. $ git commit # 提交到本地仓库
    3. $ git pull # 这一步可选,如果远程代码变动了,比如被同事动了,就需要 git pull。没被动过就可省略
    4. $ git push # 上传的到远程仓库后,就可以继续基于已下载的代码继续编辑

    【注意】

  • 下载代码前先 cd ~/Desktop/ 回到桌面,或者切换到其他位置存放要下载的仓库

  • 因为不能在仓库里面再 clone 仓库,一定要在没有仓库的地方去 clone 仓库

如何下载某个分支

  • 先下载整个仓库,然后 git checkout 分支名 切换到其他分支
  • 或者去搜一些难记的命令

下载速度很慢怎么办?

git clone 的3种参数形式

  • **git clone git@?/kkk.git**:把远程仓库 clone 到当前目录里,目录名与远程仓库名相同

    • 会在当前目录下创建一个 xxx 目录
    • kkk 目录里有一个 .git 本地仓库
      • 只要 git clone下来就会多一个本地仓库,以及最新的代码
    • 一般需要接一句 cd kkk,clone 之后加 cd 是要做成条件反射的不能忘
      1. $ git clone git@github.com:TKwan96/kkk[仓库名].git
  • **git clone git@?/kkk.git yyy**:对从远程仓库 clone 下来的目录进行重命名

    • 会在本地创建 yyy 目录,内容与远程仓库 kkk一样,只是目录名变成了 yyy
    • 记得 cd yyy
      1. $ git clone git@github.com:TKwan96/kkk[仓库名].git yyy
  • **git clone git@?/xxx.git .**:先在本地新建一个目录(最好是空目录否则后果字符),再把远程仓库代码灌进来

    • 注意有空格,最后一个字符是点
    • 不会新建目录,使用当前(目录容纳代码和 .git
      1. $ git clone git@github.com:TKwan96/kkk[仓库名].git . # 将远程仓库灌到当前目录里

      小结:

      • 要克隆一个仓库,首先必须知道仓库地址,然后使用 git clone 命令克隆。
      • Git 支持多种协议,包括 https 协议,只是 ssh 协议传输速率更高。

总结

常用命令

  • 大部分时候只需要用三个命令:
    • git clone
    • git pull
    • git push
  • 遇到报错,仔细看报错,翻译一下,就能猜到原因

远程仓库

  • 只是本地仓库的备份,所有变换都要先 commit 到本地仓库,然后 push 到远程
  • 无法下载部分代码,只能 clone 整个仓库

国内 GitHub 的替代品

  • coding.net(腾讯战略投资)
  • gitlab.com
  • 码云 gitee.com(开源中国)