文章目录
  1. 1. 目标
  2. 2. 注意
  3. 3. 主程篇
    1. 3.1. Step 0: 找到你的队友
    2. 3.2. Step 1: 主程邀请你的队友
    3. 3.3. Step 2: 协作之前,将最新分支merge到master
    4. 3.4. Step 3: 主程 merge 来自副程或自己的 pull request
    5. 3.5. Step 4: 解决冲突
    6. 3.6. Step 5: 在本地获取 merge 后最新的代码
  4. 4. 副程篇
    1. 4.1. Step 1: 接受主程邀请,成为协作者
    2. 4.2. Step 2: clone 主程的代码一起共同开发
    3. 4.3. Step 3: 发送 Pull Requset 给主程吧
  5. 5. 共同遵守篇(主程 + 副程都得这么做)
    1. 5.1. Step 1: 获取最新代码
    2. 5.2. Step 2: 开发项目
    3. 5.3. Step 3: 上传分支

原文链接:7-2 Github协作指南

目标

使用Github进行代码协作

注意

本篇指南区分为,「主程篇」「副程篇」以及「共同遵守篇」,除了共同遵守篇一定需要阅读,请针对自己在团队里的角色进行阅读就可以了,避免过多的资讯导致掉坑

主程篇

Step 0: 找到你的队友

两人一队,确定一位主程。

Step 1: 主程邀请你的队友

打开要进行协作的repo,点击 Settings -> Collaborators

在页面中间的搜索框中输入队友github的username,如果找到,框下面会跳出队友头像,点击头像,然后点击 Add collaborator,这样就邀请成功啦。

Step 2: 协作之前,将最新分支merge到master

如果master分支的更新时间不是最近,那么你需要做这一步

比如你的最新分支是story5,那么在终端 git checkout master,然后 git merge story5,再推到github git push origin master

Step 3: 主程 merge 来自副程或自己的 pull request

点击 Pull requests 可以看到所有 pull requests 记录

点开 pull request

如果显示 This branch has no conflicts with the base branch,这种情况可以直接merge,点击 Merge pull request,然后 Confirm merge 就可以了

merge完成

那么,什么情况不能直接merge呢?

显示 This branch has conflicts that must be resolved,这时 Merge pull request 按钮呈灰色,无法点击,必须先解决代码冲突才能继续。

Step 4: 解决冲突

如何解决冲突?

你可以选择不处理这个pull request,在本地修改后再上传一个新的pull request

或者按照github给出的指令处理冲突

点击 Resolve conflicts,左边显示出代码有冲突的所有文件,打开其中一个文件

可以看到,<<<<<<<>>>>>>> master 把代码有冲突的部分包了起来

======= 又把这部分分成了上下两半

上半部分是当前pull request中这个文件的写法

下半部分是当前master分支上这个文件的写法

接下来把多出的三行符号删掉,保留你需要的代码

比如

然后点击 Mark as resolved

冲突全部解决之后,会显示 Resolved all conflicts,点击 Commit changes

之后会跳转回当前pull request地址,显示 This branch has no conflicts with the base branch,点击 Merge pull request,然后 Confirm merge 就可以了

Step 5: 在本地获取 merge 后最新的代码

当最新的代码已经合进 master 分支里,主程只需要在本地的终端checkout回master分支,然后运行git fetch

那么主程就能够得到最新的代码了

副程篇

Step 1: 接受主程邀请,成为协作者

副程所使用的github注册邮箱会收到一封邀请邮件
点击 View invitation 后,跳转到github页面

点击 Accept invitation,会跳转到协作repo,同时收到一封确认邮件

协作repo如图:

Step 2: clone 主程的代码一起共同开发

第一次把代码下载到本地,使用 git clone 主程的repo地址

在终端运行cd xxx(专案名)

cp config/database.yml.example config/database.yml

bundle install

rake db:migrate

再打开rails s,才能在本地跑起来

如果有先写好的seed档案,也别忘记对数据库初始化,运行 rake db:seed 就可以了

这里请直接 clone 主程的专案到本机进行开发,自己的专案不需要在管。

可以在你 clone 下来的专案输入 git remote -v,检查当中的网址是否为主程的 github 帐号,如果不是,请注意你会无法发送开发功能给主程,请在此刻修正。

Step 3: 发送 Pull Requset 给主程吧

在本地终端切出一只分支,尝试修改某个文字之后进行 commit 存档,然后 push 这只分支到 github 吧!

接下来我们就能够发 pull request 给主程啰

点击「New pull request」,会转成以下画面。把base fork点选主程的repo(通常是第二笔)

可以看到页面跳转成如下。

① 确认已经转到主程的repo;
② base选择你想要merge的分支,可以选择「master」(一般正式协作会另外创建一个develop分支,把开发的进度放到develop,master一般于production环境);
③ compare选择副程的分支名;
④ 查看是否是「Able to merge」状态;
⑤ 写下你的comment。

确认以上五点后,点击「Create pull request」

点击「Merge pull request」

你就完成提交了功能开发的分支给主程啰,你的任务就是

「本地切分支开发功能」 -> 「开发完后 push 当前分支」 -> 「上 Github 开 pull request 给主程」

共同遵守篇(主程 + 副程都得这么做)

Step 1: 获取最新代码

每天于开发前执行 git fetch origin获取当前所有分支的讯息

获取最新代码时,先 git checkout master,然后 git pull origin master

Step 2: 开发项目

现在你在master分支上,对代码进行任何改动之前,一定要切换到一个新的分支,在新分支上进行修改

分支命名规则 git checkout -b name-feature (姓名-功能)

记住一个原则,请勿直接在 master 开发并直接推送到 github ,容易出现双方代码不对齐的情况,并且会不断发生冲突,请详记

Step 3: 上传分支

上传之前,一定要在本地进行测试,确认没有bug才可以上传

1
2
3
git add .
git commit -m "这个分支做的功能"
git push origin name-feature

代办:补充制作一个流程图。

文章目录
  1. 1. 目标
  2. 2. 注意
  3. 3. 主程篇
    1. 3.1. Step 0: 找到你的队友
    2. 3.2. Step 1: 主程邀请你的队友
    3. 3.3. Step 2: 协作之前,将最新分支merge到master
    4. 3.4. Step 3: 主程 merge 来自副程或自己的 pull request
    5. 3.5. Step 4: 解决冲突
    6. 3.6. Step 5: 在本地获取 merge 后最新的代码
  4. 4. 副程篇
    1. 4.1. Step 1: 接受主程邀请,成为协作者
    2. 4.2. Step 2: clone 主程的代码一起共同开发
    3. 4.3. Step 3: 发送 Pull Requset 给主程吧
  5. 5. 共同遵守篇(主程 + 副程都得这么做)
    1. 5.1. Step 1: 获取最新代码
    2. 5.2. Step 2: 开发项目
    3. 5.3. Step 3: 上传分支