Github多人协作
最近有门课程需要几个人一起开发一个项目,此前我们基本都是单干的,多人合作意味着需要及时将我们每个人的代码进行合并,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多人协作相关推荐
- github 多人协作
github 多人协作 1.先下载文件 git clone https://github.com/xxxxxxxxxxx 指定分支 git clone -b +分支 + 地址 (或推送本地到远程仓库 ...
- github多人协作开发项目教程,2021新版。
文章目录 github多人协作开发项目教程 文章目录 文章目录 一. 必要理论知识 二. 进行实操 1. 管理者方面 2. 成员方面 三. 总结 一. 必要理论知识 github合作开发,在实操之前, ...
- GitHub多人协作简明教程
本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学. 为了简单起见,这里假设只有两个开发人员,HuanianLi 和 DaxiangLi.他们在GitHub ...
- Unity+GitHub多人协作开发
前期准备 首先我用我的GitHub账号,新建了一个仓库(repository),之后用来存放我们的Unity项目.需要合作者的账号,添加为该项目的合作者(collaborators). GitHub官 ...
- 郝健: github多人协作项目开发实操笔记
作者简介: 郝健(Artist),目前就职于赛尔网络CERNET技术开发部,研发项目经理:以前在天融信Topsec软件平台部做防火墙核心系统开发. 本文简介: 这是网友Artist在看完王玉成老师的g ...
- Android github 快速实现多人协作
前言:最近要做github多人协作,也就是多人开发.搜索了一些资料,千篇一律,而且操作麻烦.今天就整理一下,github多人协作的简单实现方法. 下面的教程不会出现:公钥.组织.team.pull r ...
- Github上多人协作方式之一
Github上多人协作方式之一 @(Github学习笔记) A拥有一个仓库RepoA, B看着不错,想着自己可以为这个仓库贡献一点东西,于是Fork这个仓库到自己账户上来. 这时候仓库还是在远程仓库里 ...
- Github远程多人协作
Github远程多人协作 目的:将本地项目代码保存在github网站上,多台主机可以协同修改代码. 别人写的文章很详细了,没有必要重新造一遍,强烈推荐下面文章. 先参考这个文章:https://www ...
- Github多人合作用法
目录 一.克隆对方仓库 二.与仓库建立连接 三.创建自己的分支 四.修改本地代码后提交 五.请求合并 六.错误回滚和删除文件 就是篇Github的个人笔记.以防自己以后忘记. 场景:多人协作,需要互相 ...
- 群晖 root_群晖多人协作开发
群晖多人协作开发 1.导语 最近回到学校,需要把群晖的git server整一下,顺便自己记录一下.具体如下: 使用群晖NAS搭建一个git server,其实搭建git server还是贼简单,那在 ...
最新文章
- antd 表单提交,文件和表单内容一起提交,表单校验
- 枚举方式的线程安全的单例
- linux mariadb 乱码,配置mariadb远程访问权限,解决数据库乱码问题
- 2017-05-12-Linux文件操作
- 内存不足而没有OutOfMemoryError
- 阅读react-redux源码(六) - selectorFactory处理store更新
- 系统防止绕过程序直接数据库修改数据(金额等敏感数据)
- 九九乘法表下半三角(C语言)
- 开源linux_15本书(适合(希望)喜欢Linux和开源的孩子)
- 网红手工耿造了辆电动汽车 罗永浩点赞 网友喊话雷军投资
- C/C++语言开发环境的搭建
- java常见类型的转化以及风险
- java供应商管理系统项目简介,基于jsp的供应商管理系统-JavaEE实现供应商管理系统 - java项目源码...
- AXD 调试使用经验及问题
- 系统无法联系dhcp服务器,Win10专业版解决无法联系DHCP服务器错误[Ipconfig / Renew]方法...
- 什么是和包(NFC)业务
- win2016开启ntp_WindowsServer2016NTP服务端和客户端配置【NTP时间同步服务器】
- php版本降级,wamp技巧之–升级降级PHP版本 | SDT技术网
- 阿里区块链“新路线” |链捕手
- JAVA面向对象的思维导图
热门文章
- 谈谈软件人的职业规划
- 用markdownpad2导出的pdf字体太小的解决办法
- 如何改变iTunes默认备份文件目录
- python|jupyter notebook|绘制散点图、折线图
- Webpack(上)
- 行业寒冬,Android程序员前景一片灰暗?
- SQL SERVER “指定的网络名不再可用”
- Nodejs http request 报错 “ETIMEDOUT“,“ECONNRESET“ , “ENOTFOUND“,“ECONNREFUSED”,“EHOSTUNREACH“
- npm ERR code ETIMEDOUT npm ERR syscall connect npm ERR errno ETIMEDOUT npm ERR network reques...
- NiCad克隆检测工具