前面文章中出现的所有Git操作都是基于本地仓库的,但是日常工作中需要多人合作,不可能一直都在自己的代码仓库工作。所以,这里我们就开始介绍Git远程仓库。

在Git系统中,用户可以通过push/pull命令来推送/获取别的开发人员的更新,当时对于一个工作组来说,这种方式会效率比较低。所以,在一个Git系统中,都会有一个中心服务器,大家都通过中心服务器来推送/获取更新。

为了方便本篇例子的进行,我就使用多个目录来模拟多个用户以及中心服务器,这样就不用搭建Git服务器了。

  • 中心服务器:C:\VM\CentralRepo
  • 用户wilber:C:\VM\wilberWorkSpace
  • 用户will:C:\VM\willWorkSpace

Git远程仓库命令

建立中心服务器

通过前面的文章我们知道可以通过"git init"来建立一个Git仓库,这里,我们使用"git init --bare"来建立中心仓库,注意"--bare"参数,后面进行介绍。

到这里,一个空的中心服务器就建好了。

Clone一个仓库

在Git中,我们有两种方式建立Git仓库:一个是通过"git init"建立一个新的仓库,另一个是通过"git clone"命令clone一个已有的Git仓库。

既然中心服务器,用户will就可以通过clone命令来复制一个Git仓库。

从上面的clone操作可以看到,在clone命令中需要给出目标仓库的地址,Git支持http、ssh以及git原生协议来进行clone。这里为了演示,我们就使用本地目录。

这时,用户will就从中心服务器clone了一个空的仓库,接下来will就可以在这个本地仓库工作了。

更新的push和pull

现在will在本地仓库中添加了一个"calc.py"的文件,并且提交到了本地仓库。

为了是其他用户可以得到这个更新,will需要把这个更新push到中心服务器上。

现在用户wilber通过clone方式获得了中心服务器上的仓库副本,通过"git log"will的更新已经自动被clone了下来。

现在,wilber提交了一个新的更新,那么will就可以通过pull的方式从中心服务器得到这个更新。

--bare

现在我们看看建立中心服务器时候用到的"--bare"选项。

"git init --bare"方法创建的是一个裸仓库,之所以叫裸仓库是因为这个仓库只保存Git历史提交的版本信息,而不允许用户在上面进行各种git操作。

之所以有裸仓库,是因为用"git init"初始化的版本库,用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。在这种情况下,最好就是使用"--bare"选项建立一个裸仓库。

上游仓库(upstream repository)

在Git系统中,通常用"origin" 来表示上有仓库。我们可以通过 "git branch -r"命令查看上游仓库里所有的分支,再用 origin/name-of-upstream-branch 的名字来抓取(fetch)远程追踪分支里的内容。

从上面可以看出,对于wilber的仓库,master分支的上游分支是中心服务器的master分支。

通过上一篇文章的内容,我们可以在中心服务器上建立两个新的"release-1.0"和"release-1.1"分支,通过pull命令,用户wilber就看到了这些上游分支。

--set-upstream-to

当我们相当然的按照前一篇文章在本地仓库建立一个branch的时候,我们的pull操作会遇到以下问题,提示我们这个branch没有任何的跟踪信息。仔细想想也是,我们应该把本地仓库中的分支与上游分支关联起来。这时,我们就可以根据Git的提示,使用"--set-upstream-to"命令进行关联了。

当然,在Git中我们可以直接通过"git checkout -b localBranchName origin/remoteBranchName"来创建关联分支。建议一般把"localBranchName"名称跟"remoteBranchName"名称设置成一样。

牛叉的patch

在Git中patch绝对是一个很有用的东西。假设在一个没有网络的环境中,wilber和will还要继续工作,这时wilber有一个更新,will需要基于这个更新进行下一步的工作。如果是集中式的代码版本工具,这种情况就没有办法工作了,但是在Git中,我们就可以通过patch的方式,把wilber的更新拷贝给will。

在Git中有两种patch的方式:一是通过"git diff"生成一个标准的patch,另一个是通过"git format-patch"生成一个Git专用的patch。

基于"git diff"的patch

假设现在wilber更新"calc.py"文件并且通过"git diff"生成了一个patch。

下面,我们把wilberPatch这个文件拷贝到will的工作目录中,然后通过"git apply"应用这个patch,从而得到wilber的更新。

基于"git format-patch"的patch

同样使用上面的例子,这次我们使用"git format-patch"来生成patch。

注意"git format-patch"命令的参数"origin/master",这个参数的含义是,找出当前master跟origin/master之间的差别,然后生成一个patch。

把patch文件拷贝到will的工作目录,则此我们通过"git am"命令来应用这个patch。

两种patch方式的比较

下面简单看看两种patch方式的比较。

  • patch兼容性:"git diff"生成的patch兼容性强。也就是说,如果别人的代码版本库不是Git,那么必须使用git diff生成的patch才能被别的版本控制系统接受。
  • patch合并提示:对于"git diff"生成的patch,你可以用git apply --check 查看patch是否能够干净顺利地应用到当前分支中;如果"git format-patch" 生成的patch不能打到当前分支,git am会给出提示,帮你解决冲突,两者都有较好的提示功能。
  • patch信息管理:通过"git format-patch"生成的patch中有很多信息,比如开发者的名字,因此在应用patch时,这个名字会被记录进版本库,这样做是比较合理的。

总结

通过这篇文章,我们了解了远程仓库的命令以及操作。其实,这才是Git中最常见的工作方式,大家都通过中心服务器来交换跟新。

同时,我们见识到了Git的patch工具,patch也是一种很常用的交换更新的方式。

Git Step by Step – (6) Git远程仓库的更多相关文章

  1. Git版本控制工具(三)----远程仓库GitHub的使用

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. 初次使用git上传代码到github远程仓库

    https://blog.csdn.net/loner_fang/article/details/80488385 2018年05月28日 21:02:31 蒲公英上的尘埃 阅读数:697 因为最近在 ...

  3. Git推送到多个远程仓库

    Git推送到多个远程仓库 Grey 原文地址 准备工作 在码云和Github上分别新建两个不包括任何文件的空仓库(若是两个已经有文件的仓库,请参见关联已经存在的项目) https://github.c ...

  4. 一、Git的一些命令操作----创建版本库、增加文件到Git库、时光机穿梭、远程仓库

    具体详细教程请链接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 我这里只是记录 ...

  5. 使用git上传代码到github远程仓库

    一.新建代码库注册好github登录后,首先先在网页上新建代码库. 点击右上角"+"→New repository 进入如下页面:按照要求填写完成后,点击按钮创建代码库创建成功. ...

  6. Git 系列教程(8)- 远程仓库的使用

    查看远程仓库 如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令,它会列出你指定的每一个远程服务器的名称 如果是刚 clone 下来的自己的库,能看到 origin,这是 Gi ...

  7. iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )

    一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的   git的起源 作者是Linux之父:Linus Bened ...

  8. git——学习笔记(二)远程仓库

    GIT杀手锏之一——远程仓库 拥有远程仓库的两个办法 1:搭一个Git服务器  2:在GitHub上免费托管的Git仓库 本地仓库   远程仓库 一.在GitHub上免费托管的Git仓库 电脑: 1. ...

  9. Git ~ 大杀器之一 远程仓库 ~ Git

    一般情况ixashi找一台电脑作为服务器的角色 , 每天24小时开机 , 其他扥每个人都从这个 “服务器” 仓库里面克隆一份到自己的电脑上面 并且将各自的提交推送到服务器仓库中 , 也可以从服务器仓库 ...

  10. Git实现从本地加入项目到远程仓库

    Git是如今最流行的版本号控制系统之中的一个了,今天也试试了.成功了上传了远程仓库,接下来看看我是怎么做的. 1.首先,要有git的账号.点击查看怎么注冊? 2.注冊成功之后.登陆GitHub.然后, ...

随机推荐

  1. 在windows下实时监控、接受文件变化小工具

    在windows下实时监控文件变化小工具   在测试的时候,我们可能想实时监控系统打出的log信息,在unix系统上我们可以用"tail -f"实现,在windows下一般就无法做 ...

  2. Android studio 配置file encoding 无效,中文乱码解决办法

    通过配置Android studio 配置file encoding 无效,中文乱码,问题出现在java编译的时候jack采用了默认编码(中文windows默认的GBK编码)而乱码,所以不管更改bui ...

  3. SparkR(R on Spark)编程指南 含 dataframe操作 2.0

    SparkR(R on Spark)编程指南 Spark  2015-06-09 28155  1评论 下载为PDF    为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...

  4. [maven] 项目不同环境自动打包

    应用背景 项目需要发布到本地环境,测试环境和生产环境甚至不同的生产环境上.这时候配置文件的一些参数需要被频繁的修改来修改去.为了解决这样的繁琐工作,就得使用maven profile特性. 步骤 1. ...

  5. UDP丢包原因

    一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种情况可以修改接收 ...

  6. oozie 入门

    转自:http://blackproof.iteye.com/blog/1928122 oozie概述:oozie能干什么 oozie格式:怎么用oozie oozie执行:怎么运行oozie ooz ...

  7. IDEA 创建git 分支 拉取分支

        此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库          分支已创建,其它成员此时就可以从git拉分支

  8. ResNets和Inception的理解

    ResNets和Inception的理解 ResNet解析

  9. Ogre2.0 全新功能打造新3D引擎

    不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识 ...

  10. OpenGL透明与混色效果

    一.理论讲解 在OpenGL中,物体透明技术通常被叫做混合(Blending). 透明是物体(或物体的一部分)非纯色而是混合色,这种颜色来自于不同浓度的自身颜色和它后面的物体颜色. 一个有色玻璃窗就是 ...