Git是分布式版本控制系统,同一个Git仓库,能够分布到不一样的机器上,但确定有一台机器有着最原始的版本库,而后别的机器来克隆这个原始版本库,这样子就没有主次之分!所以,不少时候,咱们会找一台电脑来充当服务器的角色,天天24小时开机,便于其余人从这个“服务器”仓库克隆到本身的电脑上,而且各自把各自的提交推送到服务器仓库,也从服务器仓库中拉取别人的提交。git
"GitHub是一群有趣的人在作的有趣的事,若是只把GitHub当作一个Git服务器,实在暴殄天物。"github
GitHub是一个面向开源及私有软件项目的托管平台,由于支持Git做为惟一的版本库格式进行托管,故名为GitHub。安全
Git的吉祥物是由小章鱼和小猫组合而成,名字叫作Octocat(章鱼猫)。服务器
在用户主目录下,看看有没有.ssh
目录,若是有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,若是已经有了,可直接跳到下一步。若是没有,打开Shell
(Window下打开Git Bash
),建立SSH Key:网络
$ ssh-keygen -t rsa "youremail@example.com"
ssh
而后一路回车,使用默认值便可,密码可不用设置。分布式
成功:可在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是 SSH Key 的密钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,能够放心地告诉任何人。网站
登录GitHub,打开Account settings
-> SSH Keys
页面:点Add SSH Key
,填上任意Title,在Key文本框里粘贴 id_rsa.pub 文件的内容。保存便可。this
由于GitHub须要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,因此,GitHub只要知道了你的公钥,就能够确认只有你本身才能推送。spa
固然,GitHub容许你添加多个Key。假定你有若干电脑,你一下子在公司提交,一下子在家里提交,只要把每台电脑的Key都添加到GitHub,就能够在每台电脑上往GitHub推送了。
提示 :在GitHub上免费托管的Git仓库,任何人均可以看到(但只有你本身才能修改)。因此,建议不要把敏感信息放进去。
若是你不想让别人看到Git库,有两个办法,一个是付费,让GitHub把公开的仓库变成私有的,这样别人看不见(不可读更不可写)。另外一个办法是本身动手,搭一个Git服务器,由于是你本身的Git服务器,因此别人也是看不见(公司内部开发利器)。
本地有一个Git仓库 -> 在GitHub建立一个仓库 -> 让这两个仓库进行远程同步
(这样,GitHub上的仓库既能够做为备份,又可让其余人经过该仓库来协做。)
肯定好本地上要远程添加的仓库myrepo
,登录GitHub,而后在右上角找到Create a new repo
按钮,建立一个新的仓库:
在建立新仓库页面在 Repository name 填入myrepo
,其余保持默认设置,点击下面的绿色按钮Create repository
,就成功建立了一个新的Git仓库:
在上图中,GitHub告诉咱们,能够从这个仓库克隆出新的仓库,也能够把一个已有的本地仓库与之关联,而后,把本地仓库的内容推送到GitHub仓库。
因而,根据GitHub的提示,在本地的myrepo
仓库下运行命令:
$ git remote add origin git@github.com:dopppler/myrepo.git
提示 :注意替换成你的名字,不然关联的个人远程库,关联没有问题,可是你之后是推送不上去的,由于你的SSH Key公钥不在个人帐号列表中。
把本地库的全部内容推送到远程库上:
把本地库的内容推送到远程,用git push
命令。
其实是把当前分支
master
推送到远程。
因为远程库是空的,咱们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在之后的推送或者拉取时就能够简化命令。
推送成功后,就能够在GitHub页面中看到远程库的内容已经和本地同样了:
从如今起,只要本地做了提交,就能够经过命令: $ git push origin master
把本地
master
分支的最新修改推送至GitHub,至此,你就拥有了真正的分布式版本库!
提示:第一次使用Git的clone
或者push
命令链接GitHub时,会获得一个警告,这是由于Git使用SSH链接,而SSH链接在第一次验证GitHub服务器的Key时,须要确认GitHub的Key指纹是否真的来自GitHub的服务器,输入yes
回车便可。随后,Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表中,后面的操做不会再出现警告了。
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
关联后,使用命令git push -u origin master
第一次推送master分支的全部内容。
此后,每次本地提交后,只要有必要,就可使用命令git push origin master
推送最新修改。
分布式版本系统的最大好处之一 :在本地工做彻底不须要考虑远程库的存在,也就是有没有联网均可以正常工做,而SVN在没有联网的时候是拒绝干活的。当有网络的时候,再把本地提交推送一下就完成了同步,太方便了。
当咱们从零开发时,通常会这样作:先建立远程库 -> 从远程库克隆到本地
在GitHub建立一个新的仓库。
注:勾选下面的选项
Initialze this repository with a README
,GitHub就会自动为咱们建立一个README.md文件。
用命令git clone
克隆一个本地库。
$ git clone git@github.com:dopppler/hellogithub.git
提示:注意把Git的地址换成本身的。
若是是多人协做开发,那么每一个人各自从远程克隆一份就能够了。
也许你还注意到,GitHub给出的地址不止一个,还能够用https://github.com/dopppler/hellogithub.git
这样的地址。实际上,Git支持多种协议,默认的git://
使用 ssh,但也可使用 https 等其它协议。
使用 https 除了速度慢之外,还有个最大的麻烦是每次推送都必须输入口令,可是在某些只开放 http 端口的公司内部就没法使用 ssh协议而只能用 https。
要克隆一个仓库,首先必须知道仓库的地址,而后使用 git clone
命令去克隆。
Git支持多种协议,包括 https ,但经过 ssh 支持的原生git协议速度最快。
详细教程请戳这里:Git教程 - 廖雪峰的官方网站
参考资料
github - 百度百科
ssh(安全外壳协议)- 百度百科
What are GitHub's SSH key fingerprints? - GitHub
GitHub 吉祥物章鱼猫(Octocat)的来历是什么? - 知乎