GitGitHub标签03标签04标签05
说明:
- 将本地仓储库上传到远程仓储库
- 将远程仓储库克隆到本地仓储库
添加远程仓库
首先在Github上建立一个空的仓储库;
其次,本地的Git要与远程的Github连接,需要通过ssh认证;
创建 SSH Key。在用户主目录下,看看有没有.ssh
目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开 Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
**是公钥**,可以放心地告诉任何人。
然后登录GitHub(或者其它Git代码托管平台),打开Account settings
,SSH Keys
页面,点Add SSH Key
,填上任意Title
,在Key
文本框里粘贴**id_rsa.pub
**文件的内容。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
与远程仓库进行连接
git remote add origin git@github.com:ProjectsInLearning/studyGit.git
:::tips 特别提示:
- 这里的origin是指给这个远程仓储库起的一个别名,并且同一个别名只能连接一个远程仓储库;
- 假如我们现在需要把这个仓储库推送到Gitee,Git push origin gitee@xxxxx 由于origin已经与Github远程绑定了,我们可以通过git remote -v查看,如果还是需要把这个origin推送到Gitee可以把这个origin删除掉,git remote rm origin后,然后重新绑定到Gitee;
- 当然啦,你也可以一个本地仓储库,同时关联两个远程仓储库,只需要把名字起的不一样,做区分即可.
-
最后,认证通过,将本地的仓储库提交到远程的仓储库;
git push -u origin master
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.
这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes
前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。小结
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;从远程仓库克隆
首先,在Github找到任意一个仓储库,比如刚刚从本地上传到远程仓储库的studyGit:
- 然后键入
git clone ssh连接
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但ssh
协议速度最快。解决git连接github超时问题
此时,出现如下的问题:ssh -T git@github.com 或者 ssh -V git@github.com
ssh 阻塞了22端口。解决方案也很简单,修改 ssh 的配置文件。
关于修改配置,存在两种解决方法,
一种是 /etc/ssh/ssh_config 中修改全局配置,把如下内容复制到ssh_config文件的末尾处:并记得保存
一种是在用户主目录下.ssh/中添加配置文件,这里选择的后者。Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
cd ~/.ssh/
touch config
Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port
特别提示的补充
我们在本地库上使用命令git remote add
把它和Gitee的远程库关联: ```git git remote add origin git@gitee.com:practive-oraganization/study-git.git
之后,就可以正常地用`git push`和`git pull`推送了!<br />如果在使用命令`git remote add`时报错:
```git
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
fatal: remote origin already exists.
这说明本地库已经关联了一个名叫origin
的远程库,此时,可以先用git remote -v
查看远程库信息:
git remote -v
Origin git@github.com:ProjectsInLearning/studyGit.git (fetch)
Origin git@github.com:ProjectsInLearning/studyGit.git (push)
可以看到,本地库已经关联了origin
的远程库,并且,该远程库指向GitHub。
我们可以删除已有的GitHub远程库:
git remote rm origin
再关联Gitee的远程库(注意路径中需要填写正确的用户名):
$ git remote add Gitee git@gitee.com:practive-oraganization/study-git.git
此时,我们再查看远程库信息:
git remote -v
Gitee git@gitee.com:practive-oraganization/study-git.git (fetch)
Gitee git@gitee.com:practive-oraganization/study-git.git (push)
现在可以看到,origin已经被关联到Gitee的远程库了。通过git push
命令就可以把本地库推送到Gitee上。
有的小伙伴又要问了,一个本地库能不能既关联GitHub,又关联Gitee呢?
答案是肯定的,因为git本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。
使用多个远程库时,我们要注意,git给远程库起的默认名称是origin
,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。
仍然以learngit
本地库为例,我们先删除已关联的名为origin
的远程库:
git remote rm origin
然后,先关联GitHub的远程库:
git remote add github git@github.com:ProjectsInLearning/studyGit.git
注意,远程库的名称叫github
,不叫origin
了。
接着,再关联Gitee的远程库:
git remote add gitee git@gitee.com:practive-oraganization/study-git.git
同样注意,远程库的名称叫gitee
,不叫origin
。
现在,我们用git remote -v
查看远程库信息,可以看到两个远程库:
git remote -v
Gitee git@gitee.com:practive-oraganization/study-git.git (fetch)
Gitee git@gitee.com:practive-oraganization/study-git.git (push)
Github git@github.com:ProjectsInLearning/studyGit.git (fetch)
Github git@github.com:ProjectsInLearning/studyGit.git (push)
如果要推送到GitHub,使用命令:
git push github master
如果要推送到Gitee,使用命令:
git push gitee master
这样一来,我们的本地库就可以同时与多个远程库互相同步:
┌─────────┐ ┌─────────┐
│ GitHub │ │ Gitee │
└─────────┘ └─────────┘
▲ ▲
└─────┬─────┘
│
┌─────────────┐
│ Local Repo │
└─────────────┘
- 本文作者:GeekPower - Felix Sun
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!