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简单教程(四)--团队协作,组织和分支

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

Git团队协作使用规范 以及一些常用命令详解

Git 使用规范 特别提醒: 使用Git过程中,必须通过创建分支进行开发,坚决禁止在主干分支上直接开发。review的同事有责任检查其他同事是否遵循分支规范。 在Git中,默认是不会提交空目...
  • self001
  • self001
  • 2012年03月08日 15:34
  • 11371

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

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

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

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

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

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

《团队协作的五大障碍》读后感

一个现代企业最根本的竞争优势来自它的团队,团队建设具有重要意义。书中分析了团队建设过程中容易产生的五种机能障碍及其危害性,同时提出了克服并解决这五种机能障碍的指导方法。结合自己的理解,下面谈谈我对这五...
  • pingwyc
  • pingwyc
  • 2011年09月10日 11:40
  • 10670

Git学习笔记(二)--团队协作

同步git remotegit remote列出所有的远程连接 git remote -v列出所有的远程连接及其网址 git remote add 创建一个新的远程连接,之后就可以在git命令中...
  • timshinlee
  • timshinlee
  • 2017年07月19日 13:34
  • 61

GIT 团队协作快速入门使用

GIT 团队协作基本入门使用教程
  • Newbie006
  • Newbie006
  • 2017年10月21日 15:27
  • 144

Git团队协作使用规范

转载自:http://blog.csdn.net/self001/article/details/7333096Git 使用规范特别提醒: 使用Git过程中,必须通过创建分支进行开发,坚决禁止在主干分...
  • u011077672
  • u011077672
  • 2017年12月16日 12:56
  • 75

Git教程 团队协作开发流程

git协作开发
  • u010697394
  • u010697394
  • 2017年02月08日 10:06
  • 265
收藏助手
不良信息举报
您举报文章:Git团队协作
举报原因:
原因补充:

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