Git新手教程-远程仓库(九)

前言

在前面的文章中,咱们一直介绍的在本地Git的仓库相关知识点。而在实际的项目开发中,大多数状况下,咱们每每须要和他人进行合做。所以学习如何与他人协做开发项目使咱们必需要学习与掌握的知识点。在接下的的文章中,咱们将讲解什么是远程仓库,以及如何运用远程仓库。在本文中将介绍以下命令:git

  • git remote:管理远程仓库。
  • git push :将修改推送到远程仓库上。
  • git pull :将从远程仓库上获取更新,并合并。
  • git fetch :将从远程仓库上获取更新

远程仓库

当使用 Git 来管理咱们的项目时,这对本地项目来讲很是方便,可是若是须要与他人共享这些本地仓库,咱们就须要依托其余工具,好比 GitLabGitHub、等其余用于托管版本控制仓库的服务,来建立远程仓库。那什么是远程仓库呢?github

Git 是用于管理仓库的工具,主要在命令行上使用,Git lab or GitHub 是托管服务,咱们一般会在浏览器中与其进行交互。浏览器

什么是远程仓库

咱们都知道 Git 是一个分布式版本控制系统,那么这就意味着,使用 Git 是不存在主仓库的概念的,所以每一个开发者都是使用的都是仓库的一个副本,那么也就是说,远程仓库实际上是咱们本地仓库的副本,只是它们位于其余地方。好比位于 GitLab 或者 GitHub 上,以下所示:bash

远程仓库1.jpg

须要注意的是,咱们并不限于使用一个远程仓库,咱们能够根据咱们本身的需求建立多个远程仓库。ssh

当咱们建立远程仓库后,咱们就能够和他人进行协同开发了,好比你能够将本地仓库的更改推送到远程仓库,而后其余同事能够从远程仓库中拉取更改到他们的本地仓库中。以下所示:分布式

远程仓库2.jpg

添加远程仓库

在上文中,咱们说过远程仓库须要依托于其余工具,这里咱们将咱们的远程仓库放在 GitHub 上进行托管,这里再次强调一下:ide

  • Git 是版本控制工具
  • GitHub or GitLab 是托管 Git 项目的服务。

那接下来,咱们将在GitHub上建立一个仓库,若是你尚未帐户,那么快去官网整一个帐号吧~~~ 当咱们建立好帐号并登陆后,将位于以下主页:工具

GitHub_建立仓库.png

这里咱们点击右侧的 + 符号,选择 New Repostiry ,那么接下来咱们将跳转到建立仓库界面:post

GitHub_建立仓库2.png

  • Repostiry name :这里须要填写仓库的名称(通常状况下,咱们都是使用项目名称做为仓库的名称,不用纠结一个完美的名称,仓库的名称能够随时更改)
  • Description :这里须要填写仓库的描述,该选项是选填项。
  • Public/Private :这里须要填写仓库的模式 ,Public 表示公开,意味着任何人均可以查看该仓库中的全部代码,Private 表示私有,意味着只有仓库拥有者,才有权查看该仓库中的代码。在 GitHub 中容许咱们建立必定数量的私有仓库。
  • Initialize this repository with the README:表示是否在建立仓库时建立 README 文件,若是勾选,表示建立,反之不建立。

在建立完成仓库后,咱们会获得以下界面:学习

GitHub_建立仓库3.png

在 GitHub 中也提供了两种 URL 方式,第一种HTTPS 方式,第二种 SSH 方式。这里咱们采用 HTTPS 的方式。同时 GitHub 中有三种方式来处理远程仓库与本地仓库的关联:

关于 GitHub 提供的 SSH 方式,能够参看 GitHub-SSH

  • 第一种,在本地建立的仓库并与远程仓库关联。
  • 第二种,将已有的本地仓库中的内容推送到如今的 GitHub 新建的远程仓库中。
  • 第三种,从已有的仓库中导入代码,使用这种模式须要咱们提供相应的URL。

在上图 GitHub 中已经提供了关联远程仓库的相关指令,你们能够根据实际的需求来选择不一样的方式来关联远程仓库。

本地仓库如何与远程仓库关联

在上述文章中,咱们只介绍了如何建立远程仓库,并无实际将本地仓库与远程仓库进行关联。那下面咱们将本地已有的仓库与远程仓库进行关联。

由于我已经建立了本地仓库 GitTestProject ,那么根据以前 GitHub 中给咱们的提示,咱们须要使用命令:

git remote add origin https://github.com/AndyJennifer/GitTestProject.git
复制代码

使用上述命令,就能够将本地仓库与远程仓库创建链接了。对于该命令,咱们几点须要注意:

  • 该命令格式为 git remote add 远程仓库别名 远程仓库地址
  • origin 这个单词只是指代远程仓库,你能够当作它是远程仓库的别名,通常状况下都是使用 origin 来指代远程仓库,固然你能够将它修改成其余名称,好比 haha ,那么咱们须要修改命令为:
git remote add haha https://github.com/AndyJennifer/GitTestProject.git
复制代码
  • 远程仓库的地址须要填写完整的URL。

git remote 命令介绍

那么接下来,咱们就去咱们的本地仓库中关联这个远程仓库吧,以下所示:

git_remote.png

注意 git remote add 命令,须要在你本地的仓库中使用。若是你不当心关联错了远程仓库,可使用 git remote remove <name> 命令将关联关系删除,关于更多命令的使用,能够查看官网中 git remote中的介绍。

眼尖的小伙伴确定看见了红色方框中的 git remote命令,该命令能够查看本地仓库与远程仓库的关联关系,当本地仓库没有与任何远程仓库进行关联时,不会显示任何远程仓库别名。反之,将会显示全部关联的远程仓库别名。

git remote -v 命令介绍

固然若是咱们想查看远程仓库中的完整路径,咱们也可使用 git remote -v 命令,使用该命令后,咱们能获得以下输出:

git remote -v
origin git@github.com:AndyJennifer/GitTestProject.git (fetch)
origin git@github.com:AndyJennifer/GitTestProject.git (push)
复制代码

上述输出代表,当咱们在使用 origin 别名时,实际使用的路径为:

https://github.com/GoogleChrome/lighthouse.git
复制代码

可能你也发现了,如今有两个远程仓库,都是 "origin" 且连接到相同的 URL。惟一的区别在结尾处: (fetch) 部分和 (push) 部分,咱们将在接下来的文章中详细说明。

将更改推送到远程仓库

若是咱们本地仓库已有以下提交,咱们须要将本地仓库中的内容推送到刚才在 GitHub 中建立的远程仓库,咱们须要使用命令 git push ,使用该命令会将本地仓库中全部的提交都推送到远程仓库中,以下所示:

推送到远程仓库.jpg

在推送到远程仓库以前,咱们先看看一下本地仓库的提交:

本地仓库commit.png

如今开始推送吧!要将本地仓库中的 commit 推送到远程仓库,咱们须要使用 git push 命令,固然不是简单的调用该命令就好了,咱们还须要提供远程仓库别名,以及容纳所提交的 commit 的分支名。以下所示:

git push <remote name> <branch>
复制代码

这里咱们的远程仓库别名为 origin,而且我想推送的 commit 位于 master 分支上。那么,我要使用如下命令将个人 commit 推送到 GitHub 上的远程仓库:

git push origin master
复制代码

推送到远程仓库2.png

有几点须要注意:

  • 你可能须要输入用户名和密码,这取决于你如何配置 GitHub 的以及使用的远程 URL 。
  • 若是你使用的是 HTTP 版本(而不是 ssh 版本)的远程仓库,就须要提供用户名和密码。
    • 若是你配置 GitHub 使用 SSH 协议,并提供过 SSH 密匙,就不须要执行上一步。若是你对使用 SSH 链接 GitHub 感兴趣,请参阅使用 SSH 链接 GitHub 文档(GitHub-SSH)。
    • 若是你要输入用户名和密码,用户名会在输入后显示出来,但密码不会显示。只需继续输入密码,完成后按 Enter 键便可。
  • 若是你的密码出错,不用担忧,它会让你从新输入
  • Git 会压缩文件使之变小,而后将其推送至远程仓库
  • 这里建立了一个新分支,在页面底部可看到[new branch],后面是 master -> master

当咱们将本地仓库中的内容推送到 GitHub 中的远程仓库后,咱们查看 GitHub 中咱们以前建立的项目:

推送到远程仓库3.png

在 GitHub 中显示了仓库中有三个提交以及一个分支和一个贡献者。

在推送到远程仓库以后,咱们来查看咱们的本地仓库发生了什么变化吧~ 使用以下命令:

git log --oneline
复制代码

由于本地仓库没有其余分支,因此我这里直接使用 git log --oneline ,若是你的项目有其余分支,那么可使用 git log --oneline --graph --all

在咱们的本地仓库中使用了以下命令后,咱们能获得下图:

推送到远程仓库4.png

在上述红框中,origin/master 实际上是一个跟踪分支(跟踪分支是与远程分支有直接关系的本地分支),该分支告诉咱们,当前本地仓库关联了一个远程仓库,该远程仓库的别名为 origin,同时该远程仓库有一个 master 分支。而且该仓库的 master 分支指向 commit f4d7e04 ,也就是说远程仓库拥有并包含全部 f4d7e04 下的 commit 。

须要注意的一点是,这个 origin/master 跟踪分支并不能实时表现被跟踪分支在远程仓库上的位置。若是咱们以外的其余人对远程仓库作了更改,咱们本地仓库中的 origin/master 跟踪分支不会移动。咱们必须告诉它检查更新,它才会移动。

从远程仓库中拉取修改

咱们已经学会了如何将本地仓库中的 commit 推送到远程仓库,如今咱们试想另外一种状况,远程仓库中存在一些 commit ,可是咱们的本地仓库中没有这些 commit ,这种状况出现的缘由有多个,好比咱们是团队协做开发一个项目,有一名同事将更新推送到了远程仓库,或者你在不一样的电脑上开展同一个项目,好比你在公司的电脑上向远程仓库推送了更新,可是你的我的电脑中的本地仓库没有这些更新。

git pull

如何将远程仓库中的更新拉取到本地仓库呢?咱们看下面的这个例子:

从远程仓库中拉取修改1.jpg

在咱们的本地仓库中有五个提交,可是远程仓库中有六个提交,本地的 master 指向提交 H ,而远程仓库中的 master 指向 H 以后的提交 J, 因为两个仓库处于不一样步的状态,咱们须要将远程仓库中的更改同步到本地仓库中。这个时候咱们可使用 git pull + 远程仓库别名 + 拉取分支,在本示例中咱们可使用以下命令:

git pull origin master
复制代码

从远程仓库中拉取修改2.jpg

使用该命令后,会将远程仓库中的更改拉取到本地仓库,并与本地仓库进行合并(merge),并更新。

实际操做例子

咱们已经知道 git pull 命令的使用方式,如今结合咱们以前的项目咱们来实战一下,找到咱们以前在 GitHub 中建立的项目,点击 Add a README,咱们建立一个 README.md 文件,以下所示:

从远程仓库拉取修改3.png

选择会跳转到一个新的编辑界面,这里咱们不对该文件进行编辑,咱们直接填写以下界面:

从远程仓库拉取修改4.png

在上图中,咱们能够选择填写相关信息。这里我就不填写了,直接点击Commit new file。当点击后,咱们再查看项目,咱们会发现多了一个 README.md文件与一个 commit 以下所示:

从远程仓库拉取修改5.png

由于咱们以前本地仓库中只有 3 个提交,这个时候与远程仓库不一样步,那么如今咱们可使用命令:

git pull origin master
复制代码

使用该命令后,咱们能获得下图:

从远程仓库拉取修改6.png

经过上述操做,就能将远程仓库中的内容拉取到本地仓库了。可是咱们须要注意,使用 git pull 命令会自动将本地分支与跟踪分支进行合并(merge),若是你不须要,可使用另外一个命令 git fetch

git fetch

git fetch 主要用于从远程仓库中拉取 commit , 可是不会在拉取到 commit 后自动的将本地分支与远程的分支进行合并(merge)。什么意思呢?先不急,咱们先看 git fetch 命令的使用方式, git fetchgit pull 使用方式基本相同,也是 远程仓库别名 + 拉取分支,以下所示:

git fetch origin master
复制代码

了解了该命令的使用方式后,咱们来看看使用 git fetchgit pull 命令的区别:

在下图中,咱们本地仓库只有 D、E、F、G、H 五个提交,而远程仓库拥有本地仓库中没有的提交 J

从远程仓库中拉取修改7.jpg

根据上图,你们应该会发现几点

  • git fetchgit pull 命令都会将远程分支上的 commit 拉取到本地仓库。
  • git fetchgit pull 命令都会将本地跟踪分支(上图中 origin/master)将会移动到最新的 commit 。
  • git fetch 不会将本地分支(上图中 master)指向拉取的最新 commit(上图中 J commit) 。

也就是说使用 git fetch 命令并无使本地分支进行移动,若是咱们但愿本地 master 具备 origin/master 分支上的 commit。则咱们须要合并(merge),假如咱们已经在本地仓库的 master分支上,咱们须要使用命令,

git merge origin/master
复制代码

简单的来说,git fetch 至关于 git pull 的一半的操做,剩下的一半是合并(merge)。

git fetch 主要使用场景

git fetch 的主要使用场景是当你的远程仓库与本地仓库都有对方没有的 commit 时。请看以下场景:

从远程仓库中拉取修改8.jpg

在上图中,本地仓库与远程仓库在 H 提交以前状态一直是同步的,可是后续的过程当中,本地仓库增长了一个提交 8,远程仓库也增长了一个提交 J ,若是这个时候,你想从远程仓库中拉取更改到本地,你可能会想使用命令 git pull origin master ,可是你会发现并无任何做用,在如上状况下,咱们须要使用 git fetch origin master ,使用该命令后,会使跟踪分支(origin/master) 指向最新的 commit ,以下所示:

从远程仓库中拉取修改9.jpg

若是咱们想将跟踪分支(origin/master) 的 commit 应用到本地 master 分支上 ,咱们须要在 master 分支上使用命令 git merge origin/master , 那接下来咱们能获得下图:

从远程仓库中拉取修改10.jpg

由于合并(merge)后会产生一个合并提交 4,又由于远程仓库中中并无本地仓库中的 8,因此若是咱们须要远程仓库也拥有这些提交,那么咱们可使用命令 git push origin master,使用该命令后,咱们能获得下图:

从远程仓库中拉取修改11.jpg

在上图中,使用 git push origin master命令后,远程仓库会拉取本地仓库的更改,同时会将本地的 跟踪分支(origin/master)指向本地最新的提交 4

IntelliJ IDEA or Android Sutdio 图形化界面的使用

在上述文章中,咱们讲解了相关指令,如今咱们来看看相关指令在 IDEA 中的使用。

建立 GitHub 远程仓库

建立远程仓库有多种方式,这里咱们仍是以在 GitHub 中建立远程仓库为例, 要想在 IDEA 中建立 GitHub 中的远程仓库,咱们须要在配置界面(在 Mac 中为 Preferences,Windows 为 Settings )中找到 Version Control -> GitHub选项 ,而后添加本身的 GitHub帐号,以下所示:

idea_1.png

在添加完毕帐号后,找到工具栏中的 VCS -> Import into Version Control -> Share project on Github。 以下所示:

idea_2.png

选择后会让咱们填写,远程仓库的名称,及远程仓库的别名,及对远程仓库的描述信息等,以下图所示:

idea_3.png

填写相关信息后,咱们就能够点击 Share 按钮 建立远程仓库啦。

pull push fetch

当咱们建立远程仓库后,咱们能够经过点击鼠标右键,依次选择 Git -> Repositiry,而后选择使用 git pullgit push 仍是 git fetch 。 以下所示:

idea_4.png

上图中红色方框所包括的蓝色左下箭头git pull,也就是从远程仓库拉取更新。

固然若是你要使用 git push 命令,也能够直接使用快捷键 Alt+ ` (Windows)option + ` (Mac) 的方式。以下所示:

idea_5.png
相关文章
相关标签/搜索