Git团队协作

转载 2017年03月03日 17:12:27

创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
mkdirlearngit cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

第二步,通过git init命令把这个目录变成Git可以管理的仓库:
gitinitInitializedemptyGitrepositoryin/Users/michael/learngit/.git/ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

=========================================
http://www.liaoxuefeng.com/
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)

推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
gitpushoriginmasterdev git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

抓取分支
多人协作时,大家都会往master和dev分支上推送各自的修改。
现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆:
gitclonegit@github.com:michaelliao/learngit.gitCloningintolearngitremote:Countingobjects:46,done.remote:Compressingobjects:100remote:Total46(delta16),reused45(delta15)Receivingobjects:100Resolvingdeltas:100clonemastergitbranch git branch
* master
现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
gitcheckoutbdevorigin/devdevdevpush git commit -m “add /usr/bin/env”
[dev 291bea8] add /usr/bin/env
1 file changed, 1 insertion(+)
$ git push origin dev
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 349 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
fc38031..291bea8 dev -> dev

异常处理
你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:
gitaddhello.py git commit -m “add coding: utf-8”
[dev bd6ae48] add coding: utf-8
1 file changed, 1 insertion(+)
$ git push origin dev
To git@github.com:michaelliao/learngit.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to ‘git@github.com:michaelliao/learngit.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull’)
hint: before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.

推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
fc38031..291bea8 dev -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream dev origin/<branch>

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

gitbranchsetupstreamdevorigin/devBranchdevsetuptotrackremotebranchdevfromorigin. git pull
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.
这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

git commit -m “merge & fix hello.py”  
[dev adca45d] merge & fix hello.py
git push origin dev
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 747 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
291bea8..adca45d dev -> dev

因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
小结
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

git是什么?如何使用git进行团队协作?

本文是一篇介绍性入门的文章,对于很多已经了解git的朋友可以忽略此文,不喜勿碰。 git简介 公司新招聘来的同事,大多数都没有用过版本控制工具(有些还是直接使用U盘做拷贝,你敢信),少部分简单的使...
  • yzzst
  • yzzst
  • 2016年06月18日 18:50
  • 18729

使用Git实现团队协作开发提高效率

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds  为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控...
  • hj7jay
  • hj7jay
  • 2016年12月06日 09:42
  • 1649

Git简单教程(四)--团队协作,组织和分支

团队协作 组织 分支 team
  • ying422
  • ying422
  • 2015年04月19日 17:55
  • 3365

Git教程之一个团队如何在github上协作开发

前面我记录了如何上传自己的项目到个人github账户上,当团队协作的时候,该如何运用git来进行版本控制呢?1. 在项目的发起者或者Leader上传自己的代码到github上 (不清楚怎么上传自己...
  • Gpwner
  • Gpwner
  • 2016年11月12日 13:18
  • 8608

Git团队协作工作流程

以github的仓库为例,假定已经配置git并有了自己的github账号。 1,通过github,把团队代码仓库(Fork源)Fork一份到自己的github仓库; 2,从自己的github仓库clo...
  • sgs595595
  • sgs595595
  • 2017年02月07日 18:04
  • 273

盘点:10款适合创业团队使用的团队协作工具

中小创业团队要想提高团队工作效率,借助一些适合自己的团队协作类工具是非常必要的。然而有些团队协作工具生来就是为大公司服务的,并不适合中小团队。如果你身在中小团队中,究竟该选择哪款团队协作工具呢?在深度...
  • leedaning
  • leedaning
  • 2015年12月02日 09:21
  • 853

创业公司必备的5款团队协作工具

现在的企业级应用如火如荼,一时间内各个巨头或者创业者都推出了自己家的OA系统。那么这些协同办公软件真的适合所有公司吗?我看未必。企业千千万,每一种 企业对协同办公软件的要求都是不一样的,市面上的OA并...
  • c1782746138
  • c1782746138
  • 2016年03月23日 10:04
  • 1124

效率为王!11款最高效的团队协作工具

 效率为王!11款最高效的团队协作工具 2015/08/18阅读 5.1k 评论 5收藏 124 再不改变,你就老了。用加薪后的2天薪资来投资自己,做个优秀的产品经理 开始改变! ...
  • BM_Uranus
  • BM_Uranus
  • 2016年10月07日 08:32
  • 1717

开源TMS团队协作web系统

TMS是开源的团队协作(沟通,博文,国际化翻译)web开源系统(响应式界面设计,移动端适配). 试玩: http://tms000.sh1.newtouch.com/page/index.html 账...
  • Technique_Asker
  • Technique_Asker
  • 2017年05月15日 16:02
  • 325

在团队协作中,该如何提交一份干净、可靠的代码给队友?

在团队协作中,该如何提交一份干净、可靠的代码给队友?首先对Android Studio的工程目录中的文件做个介绍: 当我们新建一个Android Studio工程后,调整为Project视图后,工程...
  • watermusicyes
  • watermusicyes
  • 2015年12月18日 07:03
  • 3868
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git团队协作
举报原因:
原因补充:

(最多只允许输入30个字)