最近有门课程需要几个人一起开发一个项目,此前我们基本都是单干的,多人合作意味着需要及时将我们每个人的代码进行合并,U盘传文件这种方式太慢了,效率不行,而且没法解决两个人同时修改一个文件的问题,这次我们就尝试使用Github来协助开发。下面就来记录一下这次开发遇到的一些问题和解决的方法。
从官网下载最新版按照默认安装即可。
此处不多加说明。
在此放上一张别人的图。
Github的官网:https://github.com
在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 文件生效好像还要一条命令,但是我现在想不起来了。
为了能够一起开发,必须要赋予每个参与本项目的开发者push的权限。
在仓库Settings页面的Collaborators处,可以根据用户名搜索,添加合作者。
在自己这边点击了Add collaborator以后,Github会给对方发一份邮件到注册的那个邮箱,对方要在邮件中确认以后才算是添加成功。
PS:一开始看了好多教程,都没看到哪个教程有说要确认邮件的,然后我又没有打开邮件提醒,最后在看到官方的文档才发现有邮件这回事。就因为这个废了一下午o(╥﹏╥)o
下面再扯一点摸索过程中了解到的东西。
多人协作其实是分两种的:
最开始我找到的多人协作方式就是第二种,仔细想了想,发现这种方式并不适用于我这种几个人一起现场开发的场景。假如B和C都fork了A的仓库,经过一番修改以后,B向A提交pull request,A确认了以后合并到自己的仓库中,但是Cfork的仓库并不会跟着修改,如果C要进行的操作依赖于B的修改,那C要怎么拿到B的修改呢?我只想到了重新fork A仓库这个方法(有其他方法可以告诉我一下)。那样整个开发过程就需要大量fork操作,这不科学啊,所以这肯定不是我要的方式。这种方式我觉得应该是适用于那种 外部 的合作者来开发某一个功能,就像那些大的开源项目,有人发现个bug,然后fork下来,修了一下,提交pull request,仓库拥有者审核一下,确认没问题就合并,应该就是用于这种场景。
PS:我记得我好像研究这第二种方式研究了一上午,然后发现不对劲。一上午加一下午,对!我一天都在废在这里面了!
多人协作的重头戏就在这里了。
我不信你们几个人能够一直自动合并而不产生冲突,除非你们团队有十分明确的分工(具体到哪个文件哪个人负责,其他人不许碰)、看见别人多敲了个空格不会去删掉、看见别人单词拼错不会去纠正、看见多余的空行不会去删(好吧,后面三条都是因为我有强迫症)。
冲突怎么产生的?
Git其实是有自动合并功能的,比如A修改了a文件,B修改了b文件,这两个修改互不相干,是可以自动合并的。但是A和B同时修改a文件,两人修改的地方不相同的话有些时候也是能自动合并,如果连修改的地方都相同,那程序就无能为力了,只能够由人来确定到底应该保留谁的修改,这就是冲突。
怎么知道有没有冲突?
看见出现conflict这个词就是有冲突了。没截图,遇到再补上吧。
怎么解决冲突?
找到产生冲突的文件修改即可。
在本地仓库根目录中调出Git Bash界面,输入命令git status
,就可以看到哪些文件是被同时修改了。(图略,待补)
至于修改方法,Git Bash那种vim方式我用不惯。我借助了VS Code,用VS Code打开仓库的文件夹,然后你就会惊奇的发现,产生冲突的文件都用紫色标记出来了(在我这个暗主题是紫色的),点开冲突文件以后更是发现冲突的部分还高亮显示出来了,上面还有四个选项:
(图略,待补)
PS:一开始用VS Code打开冲突文件的瞬间我真的被震惊了,原来VS Code对Git的支持这么友好,有那么一瞬间我想一直遇到冲突2333
这次多人合作开发经历在Github这边主要的东西就这么多了,主要就是记录一下踩坑的地方,以后想起再补吧。