备注:
本文参考于廖雪峰老师的博客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_rsa
和id_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(clone
或push
),会有一个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每次都须要输出口令,且速度较慢