`
langgufu
  • 浏览: 2308935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

git通过远程仓库多人协作开发(转载)

 
阅读更多

原文地址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

要查看远程库的信息,用git remote

$ git remote
origin

或者,用git remote -v显示更详细的信息:

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;

  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

<video controls="controls" height="434" width="648"></video>

抓取分支

多人协作时,大家都会往masterdev分支上推送各自的修改。

现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆:

$ git clone git@github.com:michaelliao/learngit.git
Cloning into 'learngit'...
remote: Counting objects: 46, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 46 (delta 16), reused 45 (delta 15)
Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.
Resolving deltas: 100% (16/16), done.

当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:

$ git branch
* master

现在,你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

$ git checkout -b dev origin/dev

现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程:

$ 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分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:

$ git add hello.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分支的链接,根据提示,设置devorigin/dev的链接:

$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.

再pull:

$ 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

 因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用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多人协作开发项目

    3. **Git服务器和远程仓库**:理解如何配置Git远程仓库至关重要,因为这使得团队协作成为可能。我们将讨论`git remote`命令的用法,添加、删除和管理远程仓库,以及推送 (`git push`) 和拉取 (`git pull`) 更新。 4...

    4.Git多人单分支集成协作1

    在多人协作中,通常情况下,每个开发者都有自己的本地 Git 仓库,他们可以在本地仓库中进行修改,并将修改推送到远程仓库中。在这种情况下,如何 garantiee 协作的顺畅? 答案是使用 Git 的分支机制。每个开发者...

    Git多人合作流程

    在多人合作开发中,首先需要初始化一个 Git 仓库。可以使用 `git init` 命令创建一个新的 Git 仓库,也可以使用 `git clone` 命令克隆一个已经存在的仓库。初始化仓库后,需要将仓库与远程服务器连接,以便与其他...

    使用github多人协作开发1

    本文将详细介绍使用 GitHub 进行多人协作开发的过程,包括登录 Git 账号、建立本机电脑和 GitHub 远程仓库的连接、fork 别人仓库、clone 到本地、通过 Git 修改编辑、更新内容、将本地仓库更新至远程仓库、发送 pull...

    Git基本命令、AS集成Git及多人协作指南

    ### Git基本命令、Android Studio集成Git及多人协作指南 ...通过以上步骤,我们可以有效地利用Git和Android Studio进行项目版本控制和多人协作开发。这种模式不仅提高了开发效率,还确保了代码的安全性和一致性。

    利用Git远程分支合并开发python项目

    " Git 远程分支合并开发 Python 项目" 本文档旨在为已经了解 Git 基本操作的开发者提供使用 Git 远程分支管理 Python 项目的方法。...通过使用 Git 远程分支,可以实现多人合作开发项目,提高开发效率和协作性。

    git客户端、服务端安装、代码上传和eclipse安装git插件

    git 服务端安装是在服务器端安装 Git 服务器,以便多人协作开发和版本控制。安装 Git 服务端需要 root 权限,可以使用 yum install git 命令安装。在安装完成后,需要创建 Git 用户和仓库,设置仓库的权限和路径。 ...

    git 分享ppt

    可以通过创建一个小项目,在本地使用Git进行版本控制,然后将其推送到GitHub这样的远程仓库中。通过这种方式,不仅可以熟练掌握Git的基本命令,还可以学会如何与他人协作。 总之,Git作为一种强大的分布式版本控制...

    Git入门和开发团队协作

    常用的远程仓库操作命令包括git push来推送本地的变更到远程仓库,git pull来拉取远程的更新到本地仓库,以及git clone来克隆一个远程仓库到本地进行工作。 总的来说,Git为软件开发提供了一套完整的版本控制解决...

    linux-从git仓库中删除远程合并的分支的简单有效方式

    在多人协作的项目中,通常会有一个分支策略,例如,一旦一个特性分支的开发完成并合并,就应该及时删除,以避免不必要的混乱。 在实际开发中,为了方便管理和跟踪,还可以使用一些辅助工具,比如`git-flow`,它提供...

    git使用教程,学会使用git以及github远程仓库操作

    Git使用教程,学会使用git以及github远程仓库操作 本资源提供了一个详细的Git使用教程,涵盖了Git的基本概念、安装、配置、创建本地仓库、关联远程分支、删除远程分支关联、删除分支、git stash、git reset、git ...

    git多人协作_动力节点Java学院整理

    Git 是一个分布式版本控制系统,广泛应用于软件开发中的多人协作。在Git中,多人协作的核心在于如何有效地管理和同步各自的工作进度,避免冲突并确保代码的稳定。以下是对标题和描述中涉及的知识点的详细解释: 1. ...

    git新建仓库.txt

    它能够帮助开发者们管理代码变更历史,实现多人协作开发,同时支持分支管理和合并等功能。通过Git进行版本控制,可以有效地提高开发效率和代码质量。 #### 二、Git新建仓库步骤 根据提供的内容,我们可以总结出...

    路飞学城Alex7小时快速学会GIT协作开发实战(完整版)课堂笔记PDF 路飞git实战课堂笔记pdf

    Git是分布式版本控制系统,它允许...以上是Git的基本操作和协作开发流程,通过熟练掌握这些命令,可以有效地进行团队合作,确保代码版本控制的高效和准确。在GitHub或GitLab等平台,这些技能是进行开源项目协作的基础。

    5.git远程chao

    1. **Git远程仓库的创建与连接** - **GitHub**:最流行的Git托管平台,用户可以免费创建公共仓库或付费创建私有仓库。 - **GitLab**:另一个广受欢迎的Git托管平台,功能类似GitHub,提供更多的企业级服务。 - **...

    git课程讲义文件存储

    - **团队开发**:在Git中,可以通过创建和切换分支进行多人协作。每个团队成员可以在自己的分支上独立工作,然后将更改合并到主分支,实现代码同步。 - **权限管理**:通过邀请成员并设置权限,可以控制团队成员对...

    git版本控制使用说明..

    Git 通过记录每次修改,使得开发者可以在任何时候回溯到项目的某个特定版本,同时支持多人协作开发,避免了不同开发者之间的代码冲突。 在使用 Git 时,首先要了解基本操作。例如,`git init` 命令用于在本地创建一...

    本地项目如何上传到码云远程仓库

    ### 本地项目如何上传到码云远程仓库 ...通过上述步骤,本地项目就可以成功地上传到码云远程仓库,并实现多人协作开发。这种方式不仅提高了开发效率,还能有效避免代码冲突,确保项目的顺利进行。

    Git Pro中文版--高清pdf

    Git仓库可以初始化、克隆现有仓库或拉取远程仓库的数据。日常的版本控制活动包括记录更新、查看状态、跟踪新文件、暂存文件、忽略文件、提交更新以及撤销操作等。 分支管理是Git的一个核心功能,它允许开发者创建...

    java+git使用教程+git新手教程+版本控制系统git

    git的安装 使用 每一步的详细步骤 git是一个分布式的版本控制系统 倡导多人协作开发代码 使用git可以很好的来把握代码的质量 git也可以去回退版本 若这次的提交不是很满意的话可以直接回退到上次的版本 git是分布式...

Global site tag (gtag.js) - Google Analytics