最近有门课程需要几个人一起开发一个项目,此前我们基本都是单干的,多人合作意味着需要及时将我们每个人的代码进行合并,U盘传文件这种方式太慢了,效率不行,而且没法解决两个人同时修改一个文件的问题,这次我们就尝试使用Github来协助开发。下面就来记录一下这次开发遇到的一些问题和解决的方法。

1 前期准备

1.1 Git的安装

从官网下载最新版按照默认安装即可。

此处不多加说明。

1.2 Git常用命令

在此放上一张别人的图。


Git的详细教程可以参考:廖雪峰的Git教程

2 使用Github进行多人协作

Github的官网:https://github.com

2.1 建立远程仓库


在Repository Name填上仓库名字。
Description填上这个仓库存的啥,想填就填,不填也行。

这里重点提一下我们在开发的时候遇到的一个坑。

在创建仓库的时候可以看到下面有个 Add .gitignore 按钮。
起初我们并不了解这个文件是做什么用的,所以没留意,默认就是 None 。后面经过了解,该文件的作用就是指示Git忽略项目中的一些文件,比如Android的App开发中,项目文件夹中编译生成的apk,一些跟个人配置相关的文件等等。

血与泪的教训:一开始我们没有添加 .gitignore 文件,将项目中的所有文件全部跟踪了,几个人push了几次以后,pull下来各种冲突。那时候还不知道冲突怎么解决,最后重新建仓库添加 .gitignore 文件。

点开以后就会发现里面有许多语言可以选择,选择自己的开发语言即可。

建仓库的时候没有选择添加 .gitignore 文件怎么办?

https://github.com/github/gitignore

这个项目里面有全部的 .gitignore 文件,下载下来添加进去自己的项目中即可。

最后总结:多人协作一定要用 .gitignore 把不需要跟踪的文件筛掉。

PS:想创建一个没有名字的 .gitignore 文件直接输入.gitignore是不行的,会提示要输入文件名,在后面再加个.就可以了,即.gitignore.

PPS:要让 .gitignore 文件生效好像还要一条命令,但是我现在想不起来了。

2.2 添加合作者

为了能够一起开发,必须要赋予每个参与本项目的开发者push的权限。

在仓库Settings页面的Collaborators处,可以根据用户名搜索,添加合作者。

在自己这边点击了Add collaborator以后,Github会给对方发一份邮件到注册的那个邮箱,对方要在邮件中确认以后才算是添加成功。

PS:一开始看了好多教程,都没看到哪个教程有说要确认邮件的,然后我又没有打开邮件提醒,最后在看到官方的文档才发现有邮件这回事。就因为这个废了一下午o(╥﹏╥)o

下面再扯一点摸索过程中了解到的东西。

多人协作其实是分两种的:

  • 第一种是上面提到的,将其他人添加到合作者当中,这样每个人都可以对仓库内容进行修改。适用于一个团队进行开发。
  • 第二种是不需要添加合作者,其他人fork你的仓库,然后他们完成某个功能以后向你提交pull request,你确认以后将其他人的修改合并到自己仓库内。这种情况其他人是无法对你的仓库进行修改的。

最开始我找到的多人协作方式就是第二种,仔细想了想,发现这种方式并不适用于我这种几个人一起现场开发的场景。假如B和C都fork了A的仓库,经过一番修改以后,B向A提交pull request,A确认了以后合并到自己的仓库中,但是Cfork的仓库并不会跟着修改,如果C要进行的操作依赖于B的修改,那C要怎么拿到B的修改呢?我只想到了重新fork A仓库这个方法(有其他方法可以告诉我一下)。那样整个开发过程就需要大量fork操作,这不科学啊,所以这肯定不是我要的方式。这种方式我觉得应该是适用于那种 外部 的合作者来开发某一个功能,就像那些大的开源项目,有人发现个bug,然后fork下来,修了一下,提交pull request,仓库拥有者审核一下,确认没问题就合并,应该就是用于这种场景。

PS:我记得我好像研究这第二种方式研究了一上午,然后发现不对劲。一上午加一下午,对!我一天都在废在这里面了!

2.3 合并冲突

多人协作的重头戏就在这里了。

我不信你们几个人能够一直自动合并而不产生冲突,除非你们团队有十分明确的分工(具体到哪个文件哪个人负责,其他人不许碰)、看见别人多敲了个空格不会去删掉、看见别人单词拼错不会去纠正、看见多余的空行不会去删(好吧,后面三条都是因为我有强迫症)。

冲突怎么产生的?

Git其实是有自动合并功能的,比如A修改了a文件,B修改了b文件,这两个修改互不相干,是可以自动合并的。但是A和B同时修改a文件,两人修改的地方不相同的话有些时候也是能自动合并,如果连修改的地方都相同,那程序就无能为力了,只能够由人来确定到底应该保留谁的修改,这就是冲突。

怎么知道有没有冲突?

看见出现conflict这个词就是有冲突了。没截图,遇到再补上吧。

怎么解决冲突?
找到产生冲突的文件修改即可。

在本地仓库根目录中调出Git Bash界面,输入命令git status,就可以看到哪些文件是被同时修改了。(图略,待补)

至于修改方法,Git Bash那种vim方式我用不惯。我借助了VS Code,用VS Code打开仓库的文件夹,然后你就会惊奇的发现,产生冲突的文件都用紫色标记出来了(在我这个暗主题是紫色的),点开冲突文件以后更是发现冲突的部分还高亮显示出来了,上面还有四个选项:

  • “保留当前更改”:字面意思
  • “保留传入更改”:字面意思(PS:当前更改和传入更改要保留哪个是不固定的,要看你实际情况,比如有a和b分支,a合并到b,a就是传入,b就是当前;b合并到a,b就是传入,a就是当前,最后合并的结果是一样的)
  • “保留双方更改”:有些情况双方的修改也要保留
  • “还有个忘记了”:

(图略,待补)

PS:一开始用VS Code打开冲突文件的瞬间我真的被震惊了,原来VS Code对Git的支持这么友好,有那么一瞬间我想一直遇到冲突2333

3 后记

这次多人合作开发经历在Github这边主要的东西就这么多了,主要就是记录一下踩坑的地方,以后想起再补吧。

Github多人协作相关推荐

  1. github 多人协作

    github 多人协作 1.先下载文件 git clone https://github.com/xxxxxxxxxxx 指定分支 git clone -b +分支 + 地址 (或推送本地到远程仓库 ...

  2. github多人协作开发项目教程,2021新版。

    文章目录 github多人协作开发项目教程 文章目录 文章目录 一. 必要理论知识 二. 进行实操 1. 管理者方面 2. 成员方面 三. 总结 一. 必要理论知识 github合作开发,在实操之前, ...

  3. GitHub多人协作简明教程

    本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学. 为了简单起见,这里假设只有两个开发人员,HuanianLi 和 DaxiangLi.他们在GitHub ...

  4. Unity+GitHub多人协作开发

    前期准备 首先我用我的GitHub账号,新建了一个仓库(repository),之后用来存放我们的Unity项目.需要合作者的账号,添加为该项目的合作者(collaborators). GitHub官 ...

  5. 郝健: github多人协作项目开发实操笔记

    作者简介: 郝健(Artist),目前就职于赛尔网络CERNET技术开发部,研发项目经理:以前在天融信Topsec软件平台部做防火墙核心系统开发. 本文简介: 这是网友Artist在看完王玉成老师的g ...

  6. Android github 快速实现多人协作

    前言:最近要做github多人协作,也就是多人开发.搜索了一些资料,千篇一律,而且操作麻烦.今天就整理一下,github多人协作的简单实现方法. 下面的教程不会出现:公钥.组织.team.pull r ...

  7. Github上多人协作方式之一

    Github上多人协作方式之一 @(Github学习笔记) A拥有一个仓库RepoA, B看着不错,想着自己可以为这个仓库贡献一点东西,于是Fork这个仓库到自己账户上来. 这时候仓库还是在远程仓库里 ...

  8. Github远程多人协作

    Github远程多人协作 目的:将本地项目代码保存在github网站上,多台主机可以协同修改代码. 别人写的文章很详细了,没有必要重新造一遍,强烈推荐下面文章. 先参考这个文章:https://www ...

  9. Github多人合作用法

    目录 一.克隆对方仓库 二.与仓库建立连接 三.创建自己的分支 四.修改本地代码后提交 五.请求合并 六.错误回滚和删除文件 就是篇Github的个人笔记.以防自己以后忘记. 场景:多人协作,需要互相 ...

  10. 群晖 root_群晖多人协作开发

    群晖多人协作开发 1.导语 最近回到学校,需要把群晖的git server整一下,顺便自己记录一下.具体如下: 使用群晖NAS搭建一个git server,其实搭建git server还是贼简单,那在 ...

最新文章

  1. antd 表单提交,文件和表单内容一起提交,表单校验
  2. 枚举方式的线程安全的单例
  3. linux mariadb 乱码,配置mariadb远程访问权限,解决数据库乱码问题
  4. 2017-05-12-Linux文件操作
  5. 内存不足而没有OutOfMemoryError
  6. 阅读react-redux源码(六) - selectorFactory处理store更新
  7. 系统防止绕过程序直接数据库修改数据(金额等敏感数据)
  8. 九九乘法表下半三角(C语言)
  9. 开源linux_15本书(适合(希望)喜欢Linux和开源的孩子)
  10. 网红手工耿造了辆电动汽车 罗永浩点赞 网友喊话雷军投资
  11. C/C++语言开发环境的搭建
  12. java常见类型的转化以及风险
  13. java供应商管理系统项目简介,基于jsp的供应商管理系统-JavaEE实现供应商管理系统 - java项目源码...
  14. AXD 调试使用经验及问题
  15. 系统无法联系dhcp服务器,Win10专业版解决无法联系DHCP服务器错误[Ipconfig / Renew]方法...
  16. 什么是和包(NFC)业务
  17. win2016开启ntp_WindowsServer2016NTP服务端和客户端配置【NTP时间同步服务器】
  18. php版本降级,wamp技巧之–升级降级PHP版本 | SDT技术网
  19. 阿里区块链“新路线” |链捕手
  20. JAVA面向对象的思维导图

热门文章

  1. 谈谈软件人的职业规划
  2. 用markdownpad2导出的pdf字体太小的解决办法
  3. 如何改变iTunes默认备份文件目录
  4. python|jupyter notebook|绘制散点图、折线图
  5. Webpack(上)
  6. 行业寒冬,Android程序员前景一片灰暗?
  7. SQL SERVER “指定的网络名不再可用”
  8. Nodejs http request 报错 “ETIMEDOUT“,“ECONNRESET“ , “ENOTFOUND“,“ECONNREFUSED”,“EHOSTUNREACH“
  9. npm ERR code ETIMEDOUT npm ERR syscall connect npm ERR errno ETIMEDOUT npm ERR network reques...
  10. NiCad克隆检测工具