Git Step by Step – (6) Git远程仓库

前面文章中出现的所有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也是一种很常用的交换更新的方式。

时间: 2025-01-24 01:21:58

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

git笔记之eclipse使用github远程仓库进行版本管理

这里记录一下eclipse开发工具中git的使用说明. 环境:centOS,eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar.gz eclipse的使用需要依赖Java环境,这边CentOS系统里面已经安装好了JDK: 不能使用open-jdk,此版本会出现不明异常. 1.eclipse安装egit插件: eclipse里面,help --> Eclipse Marketplace 搜索egit 按照eclipse默认要求一步一步安装即可. 2.New Pr

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

https://blog.csdn.net/loner_fang/article/details/80488385 2018年05月28日 21:02:31 蒲公英上的尘埃 阅读数:697 因为最近在学习自动化测试,所以想要把自己的代码管理起来,于是就研究了github,查阅了很多资料,搞的时候也是一头雾水,第一次上传成功的时候都不知道自己是怎么传上去的,稀里糊涂的,然后又回过头去一步一步看,才知道了整个过程. 写下这篇博客是为了自己不知道的时候可以回头来看看,同时也是希望能给和我一样刚刚起步的

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

一.新建代码库注册好github登录后,首先先在网页上新建代码库. 点击右上角“+”→New repository 进入如下页面:按照要求填写完成后,点击按钮创建代码库创建成功. 接下来我们查看一下刚刚创建好的代码库,点击右上角的头像→Settings→左侧菜单栏Repositories菜单,可查看到刚刚新建好的代码库. 二.添加SSH公钥为了把本地的仓库传到github,还需要配置ssh key,说白了就是为了把本地的代码上传到github. 1.前置准备本地需要安装git:https://g

git 入门第二节 本地和远程仓库链接

第一步 去远程git仓库上找到仓库路径复制下来 第二步 在git里输入命令符 git clone 路径 这样 远程文件就添加到了你git找到的目录里  从远端-本地 第三步cd 回到你要上传的目录 把你想要上传到远程仓库的文件直接从本地复制进去 ls查看 文件名字为红色 说明这些没有同步到远程g仓库. 第四步 git add *  ls查看 文件名为绿色 说明已经添加 但只是缓存 没有提交到仓库 可以写注释表明修改具体信息 git commit -m "xxx" 第五步git push

git在本地项目中指定远程仓库地址并上传

其实可以有更简单的方法,就是在远程仓库建立仓库,然后用 git clone 仓库地址 命令来将远程仓库克隆到本地,然后再把我们之前的项目拷贝到该目录中,然后就是传统的git add git commit git push 等等. 这种情况很简单,但是个人觉得不是很专业,因为这样之后,我们本地可能又要重新import一次进入IDE(集成环境,但这都不是主要原因).更重要的是,我们直接clone下来,其实git的仓库环境都已经有了, 我们就不会再自己动手去匹配本地仓库和远程仓库的关系,然后久而久之,

小蚂蚁学习git(2)——Git撤销修改和删除,远程仓库的创建推送和克隆

接上篇(http://my.oschina.net/woshixiaomayi/blog/521265)继续写. 四.Git撤销修改和删除 1.撤销修改 场景:在readme.txt中添加了一段话"今天天气不错".在还未提交之前,发现这句话写的不对,那么有一下几种方式修改:1.直接动手删除掉那些错误的内容,然后再用add添加到暂存区,在commit提交到分支.2.按照上一篇所讲到的使用命令 git reset -hard  HEAD^ 回退到上一个版本.除了昨天说的这两个方法之外,还有

git和github -3 同步到远程仓库

Git命令 git remote — 查看远程仓库的名字 -v — 查看远程仓库对应的地址 -origin — 远程仓库的名字 git push 仓库名(默认是origin) 分支(master) — 同步到远程仓库 默认:git push origin master 添加新的协作人员 1. 点+New collaborator,然后Add collaborator 同步更新代码 && 多人协作解决冲突 git fetch — 从远程拉取数据进行对比,需要手动合并(建议) git diff

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

一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torvalds 当初开发git仅仅是为了辅助Linux内核的开发(管理源代码) git的现状 在国外已经非常普及,国内并未普及(在慢慢普及) 越来越多的开源项目已经转移到git CVS 最早的开源.免费的集中式版本控制工具 自身设计有问题,会造成提交文件不完整,版本库莫名其妙损坏的情况 SVN

Git初始化本地项目并提交远程仓库基础操作

首先将本地项目初始化 1 git init 然后添加一个远程仓库 1 git remote add origin https://gitee.com/yooeyeshot/woodafeng-admin.git 要先从远程库更新 1 git pull origin master 之后先标记,提交到本地仓库,再推送到远程仓库 git add . git commit . git push origin master 原文地址:https://www.cnblogs.com/woodafeng/p/

git 入门教程之本地和远程仓库的本质

本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当"中央服务器"的角色,因为它存在的最初目的只是方便大家交换彼此的提交记录而已! 所以本地仓库和远程仓库的基本行为应该是一致的,约定俗成的规定是远程仓库一般不直接参与日常开发工作,主要作为项目托管中心. 某些自动化持续集成环境中也可能会直接操作远程仓库,这时远程仓库就真的和本地仓库没什么区别了!