进入我的博客阅读体验更好哦!博客文章链接:GitHub换源Gitee (lxq.icu)

为何需要更换远程仓库源?

  • GitHub被墙,连接极其不稳定

    就拿我个人的博客来说,博客的源代码是部署在云服务器上的,每一次维护或者更改博客源代码的时候都需要碰运气,若是GitHub一直连接不上那么代码也就无法同步到云服务器。如今博客项目稳定还好说,但若是博客在测试阶段,每一次前端修改,每一次数据库更改都需要几分钟,对于项目来说实在是不算友好。换个角度理解,若是Git的优势(精简而迅速)被网络连接所限制,那么我为什么还使用Git呢?相比之下,Gitee的连接状态在国内就非常友好了,下面这张访问速度对比图很好地说明了这一点:

    image-20220314232349631
  • GitHub是但也只是一个基于Git的开源代码托管平台

    首先需要说明的是,GitHub作为代码托管平台的地位是无可替代的,无论是其代码存量还是其社区活跃度都是世界上首屈一指的。如果你想要检索和分享代码,GitHub无疑是首选。但是,若是在工作、日常的使用中,GitHub就绝不是不可替代的了。Git毫无疑问是如今非常优秀的版本控制工具,若想充分的使用Git那么远程仓库就是必不可少的。Gitee等一众平台作为GitHub的竞品在此方面的表现是毫不逊色的,灵活地使用工具而不为工具所束缚是必要的。

本地换源——本地维护版本库(git push)

我把Git管理的项目分为两类:本地维护和服务器克隆。本地的项目拥有更改权限,主要负责维护代码并向远程仓库推送(git push);服务器的项目则是通过克隆获得源码,当本地的项目更新后从远程仓库拉取(git pull)以同步。

以我之前的项目举例,首先打开git bash使用remote -v查看如今的远程源:

$ git remote -v
origin  https://github.com/fucn569/weather_django.git (fetch)
origin  https://github.com/fucn569/weather_django.git (push)
#origin为此项目的远程源名称

可以看到项目如今的远程源是在GitHub上的。接下来我们使用remote rm删除远程仓库源:

$ git remote rm origin
#再使用git remote -v无输出信息,则成功删除

之后我们使用remote add添加新的远程仓库源:

$ git remote add origin git@gitee.com:longxiaqiu/weather_django.git
#origin为远程源名称,git@gitee.com:longxiaqiu/weather_django.git为ssh链接

此处我添加的是ssh链接,相较于我之前的https链接,ssh对于本地项目来说更好。两者的区别是https通过账户、密码来认证,而ssh通过git生成的复杂密钥来认证。密钥存储在电脑中,安全且不需要输入账户、密码,更加迅速和便捷。

此时再查看远程源,已经关联到新的链接:

$ git remote -v
origin  git@gitee.com:longxiaqiu/weather_django.git (fetch)
origin  git@gitee.com:longxiaqiu/weather_django.git (push)

接下来我们创建一个新文件测试下是否成功:

$ touch 1.txt
$ git add 1.txt
$ git commit -m 'test'
[main 27eca60] test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 1.txt
$ git push
fatal: The current branch main has no upstream branch.
To push the current branch and set the remote as upstream, use
    git push --set-upstream origin main

可以看到,前几个操作都成功了,但是最后的git push报错了,根据提示,我们使用git push --set-upstream origin main关联本地与远程的分支:

$ git push --set-upstream origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 225 bytes | 225.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:longxiaqiu/weather_django.git
   d516191..27eca60  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

操作成功。

之后无需添加参数,使用git push即可。

需要注意的是我之前已经通过Gitee一键转移了GitHub仓库,即仓库与本地都是有源码的,所以最后一步才需要合并分支(即使分支名字相同,但地址不同,所以实际仍然是两个分支)。如果是新建的仓库,那么可以将最后一步改为:

git push -u origin "main"
#main为分支名称

关于分支名称,下图中,括号的名称即为分支名称

image-20220315002244959

或者可以使用git branch查看分支:

$ git branch
* main

服务器换源——克隆版本库(git pull)

对于通过远程克隆的项目来说,情况就稍简单一些。

假设现在的情况是这样:我此时在服务器端的项目是克隆自GitHub,也就是说如果使用git remote -v查询远程源,bash终端显示的是GitHub相关的地址:

$ git remote -v
origin  https://github.com/fucn569/weather_django.git (fetch)
origin  https://github.com/fucn569/weather_django.git (push)

但是随着本地库迁移到了Gitee,服务器端也需要将远程源迁移到Gitee以获取后续的更新。还是以同一个项目举例,操作如下:

首先与本地换源类似的,先删除原有的远程源并添加新的远程源:

$ git remote rm origin
$ git remote add origin git@gitee.com:longxiaqiu/weather_django.git

之后使用git pull操作获取更新:

$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 203 bytes | 50.00 KiB/s, done.
From gitee.com:longxiaqiu/weather_django
   992bb31..6254ad5  main       -> origin/main
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
    git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
    git branch --set-upstream-to=origin/<branch> main

与本地换源类似的,操作其实没有成功。根据提示我们知道虽然分支名称相同(main -> origin/main)但地址不同(992bb31…6254ad5),所以按照提示使用git branch --set-upstream-to=origin/<branch> main(注意<branch>是本地分支名称,此处为main)合并分支:

$ git branch --set-upstream-to=origin/main main
Branch 'main' set up to track remote branch 'main' from 'origin'.

再进行git pull:

$ git pull
Updating d516191..6254ad5
Fast-forward
 1.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 1.txt

操作成功!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐