GitGitHub标签03标签04标签05

说明:

  • 将本地仓储库上传到远程仓储库
  • 将远程仓储库克隆到本地仓储库

添加远程仓库

首先在Github上建立一个空的仓储库;

这里就不多废话了,自己上网查!

其次,本地的Git要与远程的Github连接,需要通过ssh认证;

创建 SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开 Shell(Windows下打开Git Bash),创建SSH Key:

  1. ssh-keygen -t rsa -C "youremail@example.com"

image.png
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub**是公钥**,可以放心地告诉任何人。

然后登录GitHub(或者其它Git代码托管平台),打开Account settingsSSH Keys页面,点Add SSH Key,填上任意Title,在Key文本框里粘贴**id_rsa.pub**文件的内容

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

与远程仓库进行连接

  1. 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;
  • 当然啦,你也可以一个本地仓储库,同时关联两个远程仓储库,只需要把名字起的不一样,做区分即可.
  • 详情可以参考文末的特别提示的补充 :::

    image.png

    最后,认证通过,将本地的仓储库提交到远程的仓储库;

    1. git push -u origin master

    image.png
    image.png

    SSH警告

    当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

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

    这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
    Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

    1. 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:

image.png

  • 然后键入
    1. git clone ssh连接
    image.png
    要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
    Git支持多种协议,包括https,但ssh协议速度最快。

    解决git连接github超时问题

    1. ssh -T git@github.com 或者 ssh -V git@github.com
    此时,出现如下的问题:
    image.png
    ssh 阻塞了22端口。解决方案也很简单,修改 ssh 的配置文件。
    关于修改配置,存在两种解决方法,
    一种是 /etc/ssh/ssh_config 中修改全局配置,把如下内容复制到ssh_config文件的末尾处:并记得保存
    1. Host github.com
    2. User git
    3. Hostname ssh.github.com
    4. PreferredAuthentications publickey
    5. IdentityFile ~/.ssh/id_rsa
    6. Port 443
    一种是在用户主目录下.ssh/中添加配置文件,这里选择的后者。
    1. cd ~/.ssh/
    2. touch config
    1. Host github.com
    2. User git
    3. Hostname ssh.github.com
    4. PreferredAuthentications publickey
    5. IdentityFile ~/.ssh/id_rsa
    6. Port

    特别提示的补充

    我们在本地库上使用命令git remote add把它和Gitee的远程库关联: ```git git remote add origin git@gitee.com:practive-oraganization/study-git.git
  1. 之后,就可以正常地用`git push``git pull`推送了!<br />如果在使用命令`git remote add`时报错:
  2. ```git
  3. git remote add origin git@gitee.com:liaoxuefeng/learngit.git
  4. fatal: remote origin already exists.

这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:

  1. git remote -v
  2. Origin git@github.com:ProjectsInLearning/studyGit.git (fetch)
  3. Origin git@github.com:ProjectsInLearning/studyGit.git (push)

可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub。
我们可以删除已有的GitHub远程库:

  1. git remote rm origin

再关联Gitee的远程库(注意路径中需要填写正确的用户名):

  1. $ git remote add Gitee git@gitee.com:practive-oraganization/study-git.git

此时,我们再查看远程库信息:

  1. git remote -v
  2. Gitee git@gitee.com:practive-oraganization/study-git.git (fetch)
  3. Gitee git@gitee.com:practive-oraganization/study-git.git (push)

现在可以看到,origin已经被关联到Gitee的远程库了。通过git push命令就可以把本地库推送到Gitee上。
有的小伙伴又要问了,一个本地库能不能既关联GitHub,又关联Gitee呢?
答案是肯定的,因为git本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。
使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。
仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:

  1. git remote rm origin

然后,先关联GitHub的远程库:

  1. git remote add github git@github.com:ProjectsInLearning/studyGit.git

注意,远程库的名称叫github,不叫origin了。
接着,再关联Gitee的远程库:

  1. git remote add gitee git@gitee.com:practive-oraganization/study-git.git

同样注意,远程库的名称叫gitee,不叫origin
现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

  1. git remote -v
  2. Gitee git@gitee.com:practive-oraganization/study-git.git (fetch)
  3. Gitee git@gitee.com:practive-oraganization/study-git.git (push)
  4. Github git@github.com:ProjectsInLearning/studyGit.git (fetch)
  5. Github git@github.com:ProjectsInLearning/studyGit.git (push)

如果要推送到GitHub,使用命令:

  1. git push github master

如果要推送到Gitee,使用命令:

  1. git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

  1. ┌─────────┐ ┌─────────┐
  2. GitHub Gitee
  3. └─────────┘ └─────────┘
  4. └─────┬─────┘
  5. ┌─────────────┐
  6. Local Repo
  7. └─────────────┘

  • 本文作者:GeekPower - Felix Sun
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!