git原理之三:远程仓库

1. 基本概念

远程仓库,简单来说就是本地仓库的云备份。当本地仓库需要备份的时候,就会把修改后的内容,分支,日志等信息发送给远程仓库,远程仓库同步数据,保证信息的一致。

远程仓库和本地仓库的关系,先上一张复杂的图:

由于几乎大多数项目的远程仓库都只有一个,远程仓库几乎不引起我们的注意。

但当我们查看git pull命令是,会发现其基本格式为:

git pull <远程仓库名> <远程仓库分支名>:<本地仓库分支名>

我们也会常常会发现类似如下的语法:

git pull origin master

或者会发现

git push -u origin

相信大多数的友猿人都会有所疑问:这个origin到底是什么?翻开度娘,不少资料会告诉你,这个是远程主机名。什么叫远程主机名?相信众友猿人和我曾经一度迷茫,今天我们就来把这个问题好好剖析以下

2. 远程仓库URL

首先说一下远程仓库URL, 远程仓库既然叫远程,肯定是保存在网络的某台云服务器上,有一个可访问的URL地址,这就是所谓的远程仓库URL

这个地址是什么格式的呢?我们随便打开一个github项目,在clone看到的地址就是它:

https://github.com/angular/angular-cli.git

3. 切换远程仓库玩玩

我们在实际中几乎不需要管理远程仓库。但我们这儿来玩玩

以前面的gittest项目为例,做一个实验,把gittest项目,同时提交到两个远程仓库中去,彻底讲明远程仓库的问题

当然,首先得准备两个远程仓库,我选择了github和bitbucket, 在上面分别创建了repository, 地址分别如下:

git@github.com:xixisese/gittest.git

git@bitbucket.org:lisuxiaoqi/gittest.git

3.1 添加远程仓库到本地

现在远程仓库有了,我怎么告诉本地的git呢?

通过以下指令:

git remote add <远程仓库名字> <远程仓库URL>

指令的意思是,把远程仓库的URL保存到本地,并且取个名字后续好用,毕竟URL往往都很长

运行一下:

git remote add github git@github.com:xixisese/gittest.git

git remote add bitbucket git@bitbucket.org:lisuxiaoqi/gittest.git

通过以下指令可以查看远程仓库信息

git remote -v

3.2 提交代码到远程仓库中去

远程仓库的地址有了,账号也提前准备好了,就可以开始提交了

github和bitbucket隶属于不同公司,使用不同的账号,在实验过程中,还涉及到账号切换的问题,后续文章会讲述git中多账号的使用方法

很简单,使用以下指令

$ git push <远程仓库名字> <本地分支名>:<远程分支名>

在我们例子中就是:

git push github master:master

git push bitbucket master:master

怎么样,简单吧,打开github和bitbucket的网站,会看到项目都提交上来了

知道为啥git push, git pull的基本格式那么复杂了吗?主要是为了描述使用哪个远程仓库的哪个分支

回到前面的问题, origin指的是什么?其实就是远程仓库名字。由于人们往往不会去手动指定远程仓库名字,git替你取了一个,叫做origin。

所谓的远程主机名呢?就是远程仓库名,为啥很多资料都翻译成远程主机?天晓得

4. 指令简化

我们不怎么关心远程仓库的原因,因为几乎只使用光秃秃的指令,就可以达到效果

git push

git pull

为什么呢?这是因为有种东西叫做默认,git使用者可以提前设置好本地的分支,对应上远程的主机和分支

通过以下指令实现:

git branch -u <远程分支> <本地branch> 

或者在git push时设置,只需要设置一次即可

git push -u <远程分支>

本地分支和远程分支对应好后,那直接光秃秃的指令就完事了

但一旦git不知所措,不知道选择哪个分支或者主机时,通过本文介绍,众友猿人也应该临危不乱了

索引

~~~异次元传送门



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825