备注:

本文参考于廖雪峰老师的博客Git教程。按照其博客进行学习和记录,感激其自私分享,也欢送各位查看原文。

知识点

  • ssh-keygen -t rsa -C "youremail@example.com"生成SSh密钥对。私钥保留好,公钥能够增加到Git服务器(如GitHub近程仓库)
  • 增加或关联一个近程仓库,git remote add origin git@server-name:path/repo-name.git
  • 第一次将本地仓库推送到近程master分支,git push -u origin master
  • 本地提交后,将本地最新仓库推送到近程,git push origin master
  • 克隆近程仓库,git clone git@server-name:path/repo-name.git

近程仓库

Git是分布式版本控制系统,同一个Git仓库能够散布到不同机器上。一台机器上的原始版本库,能够被其余机器“克隆”,且每台机器的版本库都一样,没有主次之分。(一台电脑不同目录也可也组成近程仓库)

理论,个别是有一台服务器,每个人从这个服务器仓库克隆一份到本人电脑,并且能够提交本人的代码,或者从服务器仓库拉取他人的提交。

Github就是一个提供近程仓库托管服务的网站,通过github账号,就能够收费取得Git近程仓库。

本地和近程仓库

本地Git仓库和近程Github仓库之间的传输是通过SSH加密的

  • 创立SSH Key

创立SSH Key时,生成的公钥和私钥默认寄存在用户主目录下,在用户主目录下(windows为c/Users/用户名/,linux为/home/用户目录/)会有一个.ssh目录,并且外面蕴含有id_rsaid_rsa.pub两个文件。

  • 关上终端(shell,windows下关上Git Bash),创立SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"

设置及明码等,间接回车放弃默认即可,临时不必对key设置明码(除非窃密级别特地高)

此时,在用户主目录下找到.ssh目录,外面有id_rsa(私钥,不能泄露)和id_rsa.pub(公钥),这两个就是SSH Key的机密对。

github近程仓库增加密钥

  • 登陆Github,点击头像,抉择setting,关上SSH and GPG keys>SSH keys列表
  • 而后点击“New SSH Key”,填上Title,在Key文本框里粘贴公钥id_rsa.pub的内容

  • 点“Add key”,将公钥增加到Github
  • GitHub反对SSH协定,通过你增加的公钥,就能够确定代码的提交、近程连贯、推送等不会被他人顶替
  • Github容许增加多个Key,这样能够在多台电脑上近程连贯github仓库、提交和推送代码等。

Github上托管的Git仓库,目前公开库能够被所有人查看,如果设置为公有库则只能本人查看批改

通过有条件,能够本人搭建Git服务器

增加近程仓库

本地曾经存在一个Git仓库,通过将其连贯到近程GitHub仓库,能够实现备份和近程同步(和写作)

  • 登陆GItHub,点击“New repository”,新建一个仓库。填上仓库名、形容、public,点击“create repository”。

  • 当初一个空的GItHub仓库曾经创立实现。

如下所示,GitHub疾速装置,有三个向导提醒,能够在命令行创立一个新仓库、或者从本地推送一个已有的仓库、或者导入代码从一个仓库

  • 要把本地已有的仓库推送到近程,依据GitHub提醒,在本地的GitTest仓库目录下运行如下命令
$ git remote add origin git@github.com:findmoon/newrepo.git

本地仓库曾经和近程仓库关联,实际上能够和任何近程仓库关联,然而如果SSH Key公钥不在GitHub的账户列表中,是无奈推送的

近程仓库的名字是origin,是Git默认的叫法。

  • 把本地仓库的内容推送到近程仓库
$ git push -u origin masterThe authenticity of host 'github.com (...)' can't be established.RSA key fingerprint is ...Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.对象计数中: 10, 实现.Delta compression using up to 4 threads.压缩对象中: 100% (7/7), 实现.写入对象中: 100% (10/10), 845 bytes | 0 bytes/s, 实现.Total 10 (delta 2), reused 0 (delta 0)remote: Resolving deltas: 100% (2/2), done.To git@github.com:findmoon/newrepo.git * [new branch]      master -> master分支 master 设置为跟踪来自 origin 的近程分支 master。

git push命令实际上是把以后分支master推送到近程。

因为近程库是空的,咱们第一次推送master分支时,加上了-u参数,Git岂但会把本地的master分支内容推送到近程新的master分支,还会把本地的master分支和近程的master分支关联起来,在当前的推送或者拉取时就能够简化命令
  • 查看近程仓库曾经和本地一样

  • 当初,只有本地仓库提交后,就能够间接推送到近程
$ git push origin master

这样,一个分布式版本库就实现了。

SSH正告

在第一次连贯GitHub(clonepush),会有一个SSH的正告

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.RSA key fingerprint is xx.xx.xx.xx.xx.Are you sure you want to continue connecting (yes/no)?

这是因为SSH连贯在第一次验证GitHub服务器的key时,须要你确认GitHub的key的指纹信息是否真的来自GitHub服务器。
输出yes后,主机(你)就会把GitHub的key增加到本机的信赖列表外面。这个正告只会呈现一次。

从GitHub近程仓库克隆

开发时,可能会先创立近程库,而后从近程库克隆到本地

  • 登陆GitHub,创立一个新仓库remoteRepo(能够勾选Initialize this repository with a README,初始化readme文件)

  • 创立实现后,新仓库蕴含readme文件

  • 近程库曾经创立实现,下一步能够用git clone克隆到本地库。在仓库的两头左边,有一个Clone or download按钮,能够看到clone的地址
$ git clone git@github.com:findmoon/remoteRepo.git正克隆到 'remoteRepo'...Warning: Permanently added the RSA host key for IP address 'XXX' to the list of known hosts.remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0接管对象中: 100% (3/3), 实现.查看连贯... 实现。

clone实现后,近程仓库就被下载下来。能够进入目录查看

  • git clone克隆也反对https协定,然而https每次都须要输出口令,且速度较慢