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进行源代码管理时的一套行为规范和简化 ...
随机推荐
- Linux 用Kazam 录有声音的视频
1.相关链接 https://launchpad.net/kazam 2.特性 录制视频的格式 : webm(vp8),mp4(h264),avi(raw),avi(huffyuv),avi(loss ...
- 使用try-with-resource遇到的问题
JDK1.7增加了try-with-source语法.在try中声明一个或者多个资源,在try块代码执行完成后自动关闭流,不用再写close()进行手动关闭. try(Resource res = x ...
- line-height详解
line-height详解 要说line-height就必须要知道这几个概念了: 顶线.中线.基线.底线. 这也就是在vertical-align中可能用到的top,middle,baseline和b ...
- twitter storm常用命令
1.提交Topologies命令格式:storm jar [jar路径] [拓扑包名.拓扑类名][stormIP地址][storm端口][拓扑名称][参数]eg:storm jar /home/sto ...
- 九度oj 1468 Sharing 2012年浙江大学计算机及软件工程研究生机试真题
题目1468:Sharing 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2687 解决:550 题目描述: To store English words, one method is ...
- 自定义控件如何给特殊类型的属性添加默认值 z(转)
自定义控件如何给特殊类型的属性添加默认值 z 定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚 标题有点那啥,但确实能表达我掌握此法后的心情. 写自定义控件时往往会有一个需求,就 ...
- QSS为Qt程序添加不一样的样式
添加 QSS 样式文件 在 Qt 项目中新建一个或使用已有的 Qt Resource File,在资源文件下面新建一个普通文件,命名为 Light.qss: 为 Light.qss 添加如下内容: 这 ...
- leetcode_173【二叉搜索树迭代器】
实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 示例: BSTIterator iterator = new BSTIte ...
- web渗透笔记
1.安装nmap记录:(1)下载:wget http://nmap.org/dist/nmap-6.46.tar.bz2(最新版)wget http://nmap.org/dist/nmap-6.00 ...
- WPF简单的数据库查询
做一个简单WPF连接数据库的 控件类型和名称:DataGrid:dataGrid Button1 :Button1 Button: Button2 ...