https://www.atlassian.com/git/tutorials/syncing/git-fetch

Syncing

svn使用单个中央库来作为开发者之间沟通的桥梁,而协同合作是通过在开发者和中央库之间传递changeset来实现的。这种情况对于GIT的协同模型是有区别的,在git下每一个开发者都拥有他们自己的整库copy。取而代之于从working copy来提交变更集到一个中央库中,git允许你在不同的repo之间分享整个分支。

下面的命令允许你管理你和其他repo之间的连接,通过push 一个分支到其他的repo你实现发布本地history,通过pull一个branch到你自己的repo来获取他人的contribution.

Git remote

git remote命令允许你来create,view和delete和其他repo的connections. Remote connections可以这样来理解: 他们更像是bookmarks,而不是其他repo的直接连接。

例如,下面的图显示两个remote connections,一个是从你的repo到central repo,而另一个则是你和John的repo的连接

常用命令: git remote -v/git remote add <name> <url>/git remote rm <name>/git remote rename <old-name> <new-name>

注意:

git设计的目标是它会给每一个开发者一个完全独立的开发环境。这意味着信息并不会自动地在repo之间自动流转。相反地,开发人员需要手工的pull upstream commits来获取到local repo中,或者手工地push local commits到central repo.这个git remote命令实际上仅仅是一种传递URL的方便方法到这些sharing目的的commands.

Origin Remote

当你通过git clone来clone一个repo时,git会自动地创建一个被称为origin的remote connection指向到被cloned的repo.这对于开发者创建central repo的一份拷贝是非常方便的,因为这为开发者提供一种便捷pull upstream changes或者publish local commits的方法。这种行为也是为什么大多数git-based项目称他们的中央库为origin的原因。

Repository URLs

Git提供很多种方法去引用一个remote repo.两种最简单的方式是HTTP或者SSH.

HTTP方法是一种非常简单的允许匿名只读访问repo的方式,比如

http://host/path/to/repo.git

但是,通常是不允许push commit到一个http地址url上面的。需要读写一个repo,你必须使用ssh方式:

ssh://user@host/path/to/repo.git

你必须要有一个在host machine上的合法ssh帐号。

除了origin,创建一个连接到你的同事的repo上去的连接也是非常必要和方便的。比如,如果你的搭档John,维护了一个可以公开访问的repo在dev.example.com/john.git这个url的话,你可以通过过下面的命令增加一个connection

git remote add john http://dev.example.com/john.git

有了上面这种访问其他开发者的repo的简单方式后,这就允许人们绕开central repo来私下协同。这种模式对于小团队做大项目时是非常有用和高效的!!

git fetch

git fetch这个命令从一个remote repo来向你的local repo导入commits。这些commits导入后的结果是他们被保存在一个remote branch,而不是local branch上。这种模式就让你在集成remote commit之前来评审这些变更有了机会!

git fetch <remote> <branch>

Fetching这个动作完成的是当你希望查看其他人的工作时需要做的工作。既然被fetched的content是以一个remote branch来呈现的,那么这个动作对于你的local dev是没有任何影响的。这也就是说fetching是一个在外部变更落地前来review评审的安全的方法。

Remote branch

Remote branch和local branch是类似的,不过remote branch是代表着是来自于其他人的repo的commit。你可以像checkout一个local branch一样来checkout一个remote branch,但是这样做你将被置入detached HEAD state(就像checkout一个old commit一样的效果)。你可以把他们想象成一个read-only的分支。要想查看有哪些remote branches,只需要git branch -r命令参数即可。remote branch总是冠之以remote connection name,所以你永远不会和本地branch搞混淆。比如,下面的代码片段展示了remote branch的情况:

git branch -r
# origin/master
# origin/develop
# origin/some-feature

你可以通过git checkout origin/develop;git log来查看这些remote分支上有了哪些commit改动。如果你确认这些commit可以进到你的local branch上的话,你只需要git merge即可。

所以,对于git来说,你需要本地和远程的remo同步的话,你需要有两步:1.fetch,2.merge

而git pull则一步完成了上面的两个工作。

git下的团队合作模型及git基础知识汇集的更多相关文章

  1. 使用git 高效多人合作

    复习一下... 附加学习链接: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) ...

  2. vs推送git失败,修改git下config的Log

    一开始写完程序套推送到Git中,然后就来了一下,下面的异常: 异常1 发布到远程存储库时遇到错误: Git failed with a fatal error. fatal: HttpRequestE ...

  3. GIT团队合作探讨之四--不同工作流优缺辨析

    由于git非常强大,它可以支持非常多的协作模式,而可能正因为选择太多反而有时候对于我们如何开始开展团队协作无从下手.本文试图阐述企业团队中应用最为广泛的git 工作流,为大家理清思路,最大限度发挥gi ...

  4. GIT团队合作探讨之二--Pull Request

    pull request是github/bitbucket给开发人员实现便利合作提供的一个feature.他们提供一个用户友好的web界面在进代码之前来讨论这些变更. 简单说,pull request ...

  5. GIT团队合作探讨之一-保持工作同步的概念和实践

    感谢英文原文作者,这是我看到的关于git协同工作写的最清晰简洁的文章了: https://www.atlassian.com/git/tutorials/syncing/git-push SVN使用一 ...

  6. GIT团队合作探讨之三--使用分支

    这篇文章是一个作为对git branch的综合介绍.首先,我们会看看创建branch,这有点像是请求一个新的项目历史.然后,我们看看git checkout是如何能够被用来选择一个branch,最后看 ...

  7. 版本管理·玩转git(团队合作)

    如果你想让一位叫"伙夫"的程序员,和你一起开发,首先你得在你的代码仓库把伙夫添加到此项目中来,让其成为开发者. 具体步骤: 项目->管理->项目成员管理->开发者 ...

  8. 如何使用Git提高研发团队工作效率?

    为什么使用Git 随着互联网时代的来临与发展,尤其分布式开发的大力引入,对于开发工程师来说,代码管理变成了头等难题.10多个人或者更多的成员的研发团队如何管理同一份代码,异地办公如何跟同事有效的维护同 ...

  9. git flow开发分支管理模型

    Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化 ...

随机推荐

  1. Oracle触发器简单使用记录

    在ORACLE系统里,触发器类似函数和过程.1.触发器类型:(一般为:语句级触发器和行级触发器.) 1).DML触发器: 创建在表上,由DML事件引发 2).instead of触发器: 创建在视图上 ...

  2. axios简单介绍

    axios的配置,get,post,axiso的同步问题解决 一.缘由 vue-resoure不更新维护,vue团队建议使用axios. 二.axios安装 1.利用npm安装npm install ...

  3. selenium+Python(Js处理日历控件)

    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...

  4. idea 下 启动maven项目,mybatis报错 Error parsing SQL Mapper Configuration. Cause: java.io.IOException。。。。。

    我的具体报错日志是   Error parsing SQL Mapper Configuration. Cause: java.io.IOException  Could not find resou ...

  5. Python基础(8) - 模块

    Python 模块的物理形式就是文件:一个文件对应一个模块.文件名就是模块名+.py 模块定义了自己独有的命名空间.在其定义的属性,函数,类都隶属于该空间. 通过import关键字我们可以导入模块: ...

  6. C++ 隐含的this 指针

    c++primer   页数:376-379 备份, 很有嚼头 #include <iostream> #include <string> #include <fstre ...

  7. hosts文件配置参数介绍

    hosts文件配置参数介绍 1, ansible_ssh_host : 指定主机别名对应的真实 IP,如:100 ansible_ssh_host=192.168.1.100,随后连接该主机无须指定完 ...

  8. telnet 命令使用方法详解

    参考自:这里 什么是telnet? 简单来说,可以把telnet当作一种通信协议.但对于入侵者来说,telnet只是一种远程登陆的工具.一旦入侵者与远程主机建立了telnet链接,入侵者便可以使用目标 ...

  9. 推荐几款基于Bootstrap的响应式后台管理模板

    1.Admin LTE 该模版开源免费. AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3的框架.高度可定制的,易于使用.支持很多的屏幕分辨率适合从小型移动设备到大型台式机. ...

  10. Ubuntu17.10下编译Openjdk8u

    一开始笔者用的系统和软件版本都是最新的,导致编译了好几次都失败,最后找到解决的办法,现在记录一下编译及解决的方法 避免以后忘记 所用操作系统 Ubuntu17.10 所用软件及版本 make 3.8. ...