1.由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要先设置SSH
1. 创建SSH Key。在用户主目录(一般路径为C:\Users\用户名)下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),使用命令ssh-keygen -t rsa -C "youremail@example.com"
创建SSH Key。
ssh-keygen -t rsa -C "youremail@example.com"
- 把邮件地址换成自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码
- 创建成功后,可以在用户主目录里找到.ssh目录,里面有
id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
2.登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
-
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
-
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
-
最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到(但只有你自己才能改)。所以,不要把敏感信息放进去。
2.已创建本地仓库,需要添加远程仓库并与本地仓库建立连接,并进行远程同步
1.首先在github上创建一个远程仓库,在网站上创建即可,注意不要勾选Initialize this repository with a README(如果勾选了,按接下来的步骤会出错,后文有处理办法)
2.之后在本地的learngit仓库下运行命令git remote add origin git@github.com:michaelliao/learngit.git
注意需要把上面的michaelliao替换为自己的GitHub账户名与仓库名
git remote add origin git@github.com:michaelliao/learngit.git
- 没有输出代表正常
- 添加后,远程库的名字就是origin,这是Git默认的叫法,
3.将本地仓库的所有内容推送到远程库上,使用命令git push -u origin master
git push -u origin master
-
由于远程库是空的,我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令 -
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样
-
从现在起,只要本地作了提交,就可以通过命令:
git push origin master
,把本地master分支的最新修改推送至GitHub
git push origin master
3.其他情况
1. SSH警告
- 当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
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)?
-
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
-
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
2.如果在创建远程仓库时勾选创建了README文件,在使用pull命令时会报错:
fatal: refusing to merge unrelated histories
(拒绝合并不相关的历史)
问题原因:
- 出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。
解决办法:
- 可以在pull命令后紧接着使用
--allow-unrelated-history
选项来解决问题(该选项可以合并两个独立启动仓库的历史)。即命令:
git pull origin master --allow-unrelated-histories
解决方法参考:记Git报错-refusing to merge unrelated histories
4.小结
- 要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;
git remote add origin git@server-name:path/repo-name.git
- 关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;
git push -u origin master
- 此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;
git push origin master
参考:https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416