在前面的文章中,咱们一直介绍的在本地Git的仓库相关知识点。而在实际的项目开发中,大多数状况下,咱们每每须要和他人进行合做。所以学习如何与他人协做开发项目使咱们必需要学习与掌握的知识点。在接下的的文章中,咱们将讲解什么是远程仓库,以及如何运用远程仓库。在本文中将介绍以下命令:git
当使用 Git 来管理咱们的项目时,这对本地项目来讲很是方便,可是若是须要与他人共享这些本地仓库,咱们就须要依托其余工具,好比 GitLab
、GitHub
、等其余用于托管版本控制仓库的服务,来建立远程仓库。那什么是远程仓库呢?github
Git 是用于管理仓库的工具,主要在命令行上使用,
Git lab
orGitHub
是托管服务,咱们一般会在浏览器中与其进行交互。浏览器
咱们都知道 Git 是一个分布式版本控制系统,那么这就意味着,使用 Git 是不存在主仓库的概念的,所以每一个开发者都是使用的都是仓库的一个副本,那么也就是说,远程仓库实际上是咱们本地仓库的副本
,只是它们位于其余地方。好比位于 GitLab
或者 GitHub
上,以下所示:bash
须要注意的是,咱们并不限于使用一个远程仓库,咱们能够根据咱们本身的需求建立多个远程仓库。ssh
当咱们建立远程仓库后,咱们就能够和他人进行协同开发了,好比你能够将本地仓库的更改推送到远程仓库,而后其余同事能够从远程仓库中拉取更改到他们的本地仓库中。以下所示:分布式
在上文中,咱们说过远程仓库须要依托于其余工具,这里咱们将咱们的远程仓库放在 GitHub 上进行托管,这里再次强调一下:ide
那接下来,咱们将在GitHub上建立一个仓库,若是你尚未帐户,那么快去官网整一个帐号吧~~~ 当咱们建立好帐号并登陆后,将位于以下主页:工具
这里咱们点击右侧的 +
符号,选择 New Repostiry
,那么接下来咱们将跳转到建立仓库界面:post
Repostiry name
:这里须要填写仓库的名称(通常状况下,咱们都是使用项目名称做为仓库的名称,不用纠结一个完美的名称,仓库的名称能够随时更改)Description
:这里须要填写仓库的描述,该选项是选填项。Public/Private
:这里须要填写仓库的模式 ,Public
表示公开,意味着任何人均可以查看该仓库中的全部代码,Private
表示私有,意味着只有仓库拥有者,才有权查看该仓库中的代码。在 GitHub 中容许咱们建立必定数量的私有仓库。Initialize this repository with the README
:表示是否在建立仓库时建立 README 文件,若是勾选,表示建立,反之不建立。在建立完成仓库后,咱们会获得以下界面:学习
在 GitHub 中也提供了两种 URL 方式,第一种HTTPS
方式,第二种 SSH
方式。这里咱们采用 HTTPS 的方式。同时 GitHub 中有三种方式来处理远程仓库与本地仓库的关联:
关于 GitHub 提供的 SSH 方式,能够参看 GitHub-SSH
新
的仓库并与远程仓库关联。已有
的本地仓库中的内容推送到如今的 GitHub 新建的远程仓库中。在上图 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
复制代码
那么接下来,咱们就去咱们的本地仓库中关联这个远程仓库吧,以下所示:
注意
git remote add
命令,须要在你本地的仓库中使用。若是你不当心关联错了远程仓库,可使用git remote remove <name>
命令将关联关系删除,关于更多命令的使用,能够查看官网中 git remote中的介绍。
眼尖的小伙伴确定看见了红色
方框中的 git remote
命令,该命令能够查看本地仓库与远程仓库的关联关系,当本地仓库没有与任何远程仓库进行关联时,不会显示任何远程仓库别名。反之,将会显示全部关联的远程仓库别名。
固然若是咱们想查看远程仓库中的完整路径,咱们也可使用 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
,使用该命令会将本地仓库中全部的提交都推送到远程仓库中,以下所示:
在推送到远程仓库以前,咱们先看看一下本地仓库的提交:
如今开始推送吧!要将本地仓库中的 commit 推送到远程仓库,咱们须要使用 git push
命令,固然不是简单的调用该命令就好了,咱们还须要提供远程仓库别名
,以及容纳所提交的 commit 的分支名
。以下所示:
git push <remote name> <branch>
复制代码
这里咱们的远程仓库别名为 origin
,而且我想推送的 commit 位于 master
分支上。那么,我要使用如下命令将个人 commit 推送到 GitHub 上的远程仓库:
git push origin master
复制代码
有几点须要注意:
当咱们将本地仓库中的内容推送到 GitHub 中的远程仓库后,咱们查看 GitHub 中咱们以前建立的项目:
在 GitHub 中显示了仓库中有三个提交以及一个分支和一个贡献者。
在推送到远程仓库以后,咱们来查看咱们的本地仓库发生了什么变化吧~ 使用以下命令:
git log --oneline
复制代码
由于本地仓库没有其余分支,因此我这里直接使用
git log --oneline
,若是你的项目有其余分支,那么可使用git log --oneline --graph --all
。
在咱们的本地仓库中使用了以下命令后,咱们能获得下图:
在上述红框中,origin/master
实际上是一个跟踪分支(跟踪分支是与远程分支有直接关系的本地分支),该分支告诉咱们,当前本地仓库关联了一个远程仓库,该远程仓库的别名为 origin
,同时该远程仓库有一个 master
分支。而且该仓库的 master
分支指向 commit f4d7e04
,也就是说远程仓库拥有并包含全部 f4d7e04
下的 commit 。
须要注意的一点是,这个
origin/master
跟踪分支并不能实时表现被跟踪分支在远程仓库上的位置。若是咱们以外的其余人对远程仓库作了更改,咱们本地仓库中的origin/master
跟踪分支不会移动。咱们必须告诉它检查更新,它才会移动。
咱们已经学会了如何将本地仓库中的 commit 推送到远程仓库,如今咱们试想另外一种状况,远程仓库中存在一些 commit ,可是咱们的本地仓库中没有这些 commit ,这种状况出现的缘由有多个,好比咱们是团队协做开发一个项目,有一名同事将更新推送到了远程仓库,或者你在不一样的电脑上开展同一个项目,好比你在公司的电脑上向远程仓库推送了更新,可是你的我的电脑中的本地仓库没有这些更新。
如何将远程仓库中的更新拉取到本地仓库呢?咱们看下面的这个例子:
在咱们的本地仓库中有五个提交,可是远程仓库中有六个提交,本地的 master
指向提交 H
,而远程仓库中的 master
指向 H
以后的提交 J
, 因为两个仓库处于不一样步的状态,咱们须要将远程仓库中的更改同步到本地仓库中。这个时候咱们可使用 git pull + 远程仓库别名 + 拉取分支
,在本示例中咱们可使用以下命令:
git pull origin master
复制代码
使用该命令后,会将远程仓库中的更改拉取到本地仓库,并与本地仓库进行合并(merge)
,并更新。
咱们已经知道 git pull
命令的使用方式,如今结合咱们以前的项目咱们来实战一下,找到咱们以前在 GitHub 中建立的项目,点击 Add a README
,咱们建立一个 README.md
文件,以下所示:
选择会跳转到一个新的编辑界面,这里咱们不对该文件进行编辑,咱们直接填写以下界面:
在上图中,咱们能够选择填写相关信息。这里我就不填写了,直接点击Commit new file
。当点击后,咱们再查看项目,咱们会发现多了一个 README.md
文件与一个 commit
以下所示:
由于咱们以前本地仓库中只有 3
个提交,这个时候与远程仓库不一样步,那么如今咱们可使用命令:
git pull origin master
复制代码
使用该命令后,咱们能获得下图:
经过上述操做,就能将远程仓库中的内容拉取到本地仓库了。可是咱们须要注意,使用 git pull
命令会自动
将本地分支与跟踪分支进行合并(merge)
,若是你不须要,可使用另外一个命令 git fetch
。
git fetch
主要用于从远程仓库中拉取 commit , 可是不会
在拉取到 commit 后自动的将本地分支与远程的分支进行合并(merge)。什么意思呢?先不急,咱们先看 git fetch
命令的使用方式, git fetch
与 git pull
使用方式基本相同,也是 远程仓库别名 + 拉取分支
,以下所示:
git fetch origin master
复制代码
了解了该命令的使用方式后,咱们来看看使用 git fetch
与 git pull
命令的区别:
在下图中,咱们本地仓库只有
D、E、F、G、H
五个提交,而远程仓库拥有本地仓库中没有的提交J
。
根据上图,你们应该会发现几点
git fetch
与 git pull
命令都会将远程分支上的 commit 拉取到本地仓库。git fetch
与 git 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
的主要使用场景是当你的远程仓库与本地仓库都有对方没有的 commit 时。请看以下场景:
在上图中,本地仓库与远程仓库在 H
提交以前状态一直是同步的,可是后续的过程当中,本地仓库增长了一个提交 8
,远程仓库也增长了一个提交 J
,若是这个时候,你想从远程仓库中拉取更改到本地,你可能会想使用命令 git pull origin master
,可是你会发现并无任何做用,在如上状况下,咱们须要使用 git fetch origin master
,使用该命令后,会使跟踪分支(origin/master) 指向最新的 commit ,以下所示:
若是咱们想将跟踪分支(origin/master) 的 commit 应用到本地 master
分支上 ,咱们须要在 master
分支上使用命令 git merge origin/master
, 那接下来咱们能获得下图:
由于合并(merge)后会产生一个合并提交 4
,又由于远程仓库中中并无本地仓库中的 8
,因此若是咱们须要远程仓库也拥有这些提交,那么咱们可使用命令 git push origin master
,使用该命令后,咱们能获得下图:
在上图中,使用 git push origin master
命令后,远程仓库会拉取本地仓库的更改,同时会将本地的 跟踪分支(origin/master)
指向本地最新的提交 4
。
在上述文章中,咱们讲解了相关指令,如今咱们来看看相关指令在 IDEA 中的使用。
建立远程仓库有多种方式,这里咱们仍是以在 GitHub 中建立远程仓库为例, 要想在 IDEA 中建立 GitHub 中的远程仓库,咱们须要在配置界面(在 Mac 中为 Preferences,Windows 为 Settings )中找到 Version Control
-> GitHub
选项 ,而后添加本身的 GitHub帐号,以下所示:
在添加完毕帐号后,找到工具栏中的 VCS
-> Import into Version Control
-> Share project on Github
。 以下所示:
选择后会让咱们填写,远程仓库的名称,及远程仓库的别名,及对远程仓库的描述信息等,以下图所示:
填写相关信息后,咱们就能够点击 Share
按钮 建立远程仓库啦。
当咱们建立远程仓库后,咱们能够经过点击鼠标右键
,依次选择 Git
-> Repositiry
,而后选择使用 git pull
、git push
仍是 git fetch
。 以下所示:
上图中红色方框所包括的
蓝色左下箭头
为git pull
,也就是从远程仓库拉取更新。
固然若是你要使用 git push
命令,也能够直接使用快捷键 Alt+ ` (Windows)
或 option + ` (Mac)
的方式。以下所示: