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团队协作 高清.pdf版

  • 2017年09月04日 20:57
  • 11.62MB
  • 下载

Git团队协作.pdf

  • 2017年11月28日 21:21
  • 11.78MB
  • 下载

git团队协作

  • 2017年11月06日 23:52
  • 11.62MB
  • 下载

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

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

图灵书籍(精通Git(第二版) 英文版.pdf+Git团队协作.pdf)

  • 2017年12月07日 10:03
  • 16.43MB
  • 下载

Git团队协作工作流程

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

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

团队协作 组织 分支 team
  • ying422
  • ying422
  • 2015-04-19 17:55:05
  • 3713

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

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

Git团队协作 文字pdf 完整全本 Git for Teams 童仲毅 Emma Jane Hogbin Westby

  • 2018年03月25日 00:50
  • 11.62MB
  • 下载
收藏助手
不良信息举报
您举报文章:Git团队协作
举报原因:
原因补充:

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