经过前几节的学习,大家应该对 Git 有一个初步的了解了,那么我向大家提一个问题,远程仓库到底是什么?

有同学就要说了,这不很简单吗?远程仓库不就是放在网络上的一个版本库吗?我们本地可以向它推送数据,也可以拉取数据到本地。

对,没错。认识算是到位,但是概括的还不够全面。远程仓库其实是一个概念,你可以理解成为网络上的一个仓库,但绝不仅限于此。广义上来讲,远程仓库指的是其他位置的仓库,这个其他位置,甚至可以在你本地,我这样说够清楚吗?只不过使用这个库时的推送和拉取等操作与你意识中的在网络上的远程仓库用法是一样的,它们是同一套标准。换句话讲,凡是使用了这套标准的都可以认为是远程仓库,而不仅仅局限于网络上的其他位置。

好了,以上是对远程仓库的概念做了一个分析说明。接下来我们就可以步入正题,开始学习怎么去使用远程仓库或者远程仓库的一些基本操作。

1. 查看本地关联的远程仓库

还记得上节课讲如何初始化一个本地 git 仓库的时候,我们用到了从远程仓库拉取到本地的那种方式吗?忘记了的可以回去翻看下上一节内容,就是这个命令,还记得吗?

$ git clone 远程仓库URL

当我们从远程仓库与本地同步后,那么本地即与远程仓库进行了关联操作。我们就可以通过如下命令查看关联的远程仓库:

$ git remote

或者是查看更详细的信息:

$ git remote -v

具体操作步骤如下:
图片描述

2. 添加远程仓库

上节课我们知道,使用 “git clone” 命令可以添加远程仓库到本地。另外,我们还可以手动添加远程仓库并且为远程仓库起一个简短的别名,之后获取数据操作时就很方便了。接下来一起看下具体怎么做呢?

a. 首先,我们可以在一个与远程仓库进行关联过的目录下使用如下命令查看关联的仓库情况:

git remote -v

b. 如果还要添加一个远程仓库地址,并为这个地址起一个简短的别名,比如叫做 “testGitAdd”,可以使用如下命令进行操作:

git remote add testGitAdd https://github.com/javaDreame/testGitAdd.git

c. 操作完成后,重复步骤 a,查看是不是多了关联的仓库。

d. 成功后,就可以使用 “git fetch” 命令进行拉取数据,命令如下:

git fetch testGitAdd

整个过程的视频流程演示如下:

3. 从远程仓库拉取数据

上面讲述关联添加远程仓库的时候已经提到了获取数据的操作,即 “git fetch” 操作。

git fetch 支持 URL 和别名两种方式获取数据,比如:

$ git fetch testGitAdd
$ git fetch https://github.com/javaDreame/testGitAdd.git

这两条命令是等价的。

需要说明的是,该命令会从该远程项目中拉下来你本地还没有的所有数据。完成此操作后,就具有对该远程站点上所有分支的引用,可以随时合并或检查这些分支(分支的概念后续会讲,先理解为就是一个远程库上的内容)。

注意:这个命令仅将数据下载到本地存储库中,仅仅是存在库中了,它不会自动将其与你的任何工作目录合并或修改你当前正在处理的内容。通俗地讲,就是不会直接改变你目录里的文件内容,你看不到有变化。你需要手动合并到工作目录中。

4. 推送内容到远程仓库

当我们共享项目时,必须将本地修改推送到远程。使用命令:git push ”。如果想将本地 master 分支推送到 origin 服务器那么可以运行下面的命令将已完成的所有提交推送回服务器(关于分支的概念后续会讲,此处先理解成本地库):

$ git push origin master

注意:
(1)本地执行 “push” 推送之前,必须先使用 “git add” 和 “git commit” 命令提交。关于这两个命令,后续会系统讲解。
(2)只有当从服务器克隆下来后并且此期间没有人推送时,推送命令才有效。如果同事也克隆了一份到他们本地,并且他们修改后又推送到服务器,那么你的推送将被拒绝。必须先使用 "git pull" 命令获取他们的修改,然后将其合并到你的工作仓库中,最后才能进行推送。

关于这部分说明,同学们可能还会有些地方存在疑惑,很正常。因为我们有些细节还没讲到,后续慢慢就明白了。

这部分操作视频如下:

5. 查看远程仓库基本信息

有时候我们需要查看远程仓库的更多信息,可以使用 “git remote show” 命令。同样支持 URL 和别名:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/javaDreame/testGit.git
  Push  URL: https://github.com/javaDreame/testGit.git
  HEAD branch: master
  Remote branches:
    dev    tracked
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

这部分内容展示了远程存储库 origin 对应的的 URL,以及已追踪(tracked)到的分支信息。还有,如果在 master 分支上并运行 git pull,它将在 master 获取所有远程引用后自动合并到远程的分支中(这是它与 git fetch 的区别),还列出了已拉取到的的所有远程引用。

6. 远程仓库的重命名和删除

Git 很贴心地为我们提供了重命名远程仓库的操作,万一你起了个别名又嫌不合适了咋办!接下来就看下怎么重命名:

例如,testGitAdd 这个名字又臭又长,我要将 testGitAdd 重命名为 testAdd,则可以使用 git remote rename

$ git remote rename testGitAdd testAdd

图片描述

那么,我直接不想要了,想删除呢?也很简单:

$ git remote remove testAdd

图片描述

说明:以这种方式删除对远程的引用后,与该远程关联的所有远程跟踪分支和配置设置也将被删除。

7. 总结

这节课知识点相对比较多,可能涉及到的有些操作一时不理解,之后我们还会专门系统地提到,大家不要担心,只需要先按我说的去理解下就可以。那么我们来回顾下本节课知识点:

  • 查看远程仓库:git remote 或 git remote -v
  • 添加远程仓库:git remote add 仓库名称 远程仓库地址
  • 远程仓库拉取数据:git fetch 仓库名称或 URL
  • 推送内容到远程仓库:git push origin master
  • 查看远程仓库基本信息:git remote show origin
  • 远程仓库重命名:git remote rename 旧名字 新名字
  • 远程仓库删除:git remote remove 仓库名