git下的团队合作模型及git基础知识汇集
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基础知识汇集的更多相关文章
- 使用git 高效多人合作
复习一下... 附加学习链接: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) ...
- vs推送git失败,修改git下config的Log
一开始写完程序套推送到Git中,然后就来了一下,下面的异常: 异常1 发布到远程存储库时遇到错误: Git failed with a fatal error. fatal: HttpRequestE ...
- GIT团队合作探讨之四--不同工作流优缺辨析
由于git非常强大,它可以支持非常多的协作模式,而可能正因为选择太多反而有时候对于我们如何开始开展团队协作无从下手.本文试图阐述企业团队中应用最为广泛的git 工作流,为大家理清思路,最大限度发挥gi ...
- GIT团队合作探讨之二--Pull Request
pull request是github/bitbucket给开发人员实现便利合作提供的一个feature.他们提供一个用户友好的web界面在进代码之前来讨论这些变更. 简单说,pull request ...
- GIT团队合作探讨之一-保持工作同步的概念和实践
感谢英文原文作者,这是我看到的关于git协同工作写的最清晰简洁的文章了: https://www.atlassian.com/git/tutorials/syncing/git-push SVN使用一 ...
- GIT团队合作探讨之三--使用分支
这篇文章是一个作为对git branch的综合介绍.首先,我们会看看创建branch,这有点像是请求一个新的项目历史.然后,我们看看git checkout是如何能够被用来选择一个branch,最后看 ...
- 版本管理·玩转git(团队合作)
如果你想让一位叫"伙夫"的程序员,和你一起开发,首先你得在你的代码仓库把伙夫添加到此项目中来,让其成为开发者. 具体步骤: 项目->管理->项目成员管理->开发者 ...
- 如何使用Git提高研发团队工作效率?
为什么使用Git 随着互联网时代的来临与发展,尤其分布式开发的大力引入,对于开发工程师来说,代码管理变成了头等难题.10多个人或者更多的成员的研发团队如何管理同一份代码,异地办公如何跟同事有效的维护同 ...
- git flow开发分支管理模型
Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化 ...
随机推荐
- ASP.NET Core中Middleware的使用
https://www.cnblogs.com/shenba/p/6361311.html ASP.NET 5中Middleware的基本用法 在ASP.NET 5里面引入了OWIN的概念,大致意 ...
- mysql 设置默认时间为now()
TIMESTAMP的变体1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录和修改现有记录的时候都对这个数据列 ...
- 【DB2】普通用户最小查询权限分配
1. 通过实例用户或者有dbadm权限的用户连接数据库 db2 connect to <db-name> 2. 分配普通用户连接权限db2 "grant connect on d ...
- Docker安装及常用操作
Docker简介: Docker是一个轻量级容器技术,类似于虚拟机技术,但性能远远高于虚拟机,Docker支持将软件编译成一个镜像(image),在这个镜像中做好对软件的各种配置,然后可以运行这个镜像 ...
- md5码加密(Python)
import hashlib import hmac m = input('输入要加密内容:') md = hashlib.md5()#生成md5 hash对象 md.update(m.encode( ...
- 权重平等分布局And TableRow布局误区
开头语: 本人最近在自学Android,虽然本人有2年Java Web的开发经验.但是发现Android的自学之路并不是那么平坦,我没有Android真机.但是有一个window phone的手机.开 ...
- JVM Run-Time Data Areas--reference
http://www.programcreek.com/2013/04/jvm-run-time-data-areas/ This is my note of reading JVM specific ...
- 架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)
接下来我们将整合mybatisplus+Oracle,实现一个简单的查询.(期间踩了很多坑,遇到一些问题,还好慢慢解决了.现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实 ...
- wcf datetime json format
wcf 内置的json序列化工具,有时需要替换,或者特殊情况的处理,需要修改. 我也遇到了Dto属性类型是datetime,json的反序列化 和 序列号不友好. 这是国外网站的一个方案:Replac ...
- AJAX控件——多层弹出Accordion
<asp:Accordion ID="Accordion1" runat="server" ContentCssClass="content&q ...