最近微软收购了Github,同时,微软推出了免费使用私有仓库的服务,对于开发者来说是一个巨大的福音,尤其是对于小型开发团队,即三人左右的开发团队。
一、环境配置及多人协作
1.1 EGit环境配置
EGit插件地址:http://download.eclipse.org/egit/updates,安装后记得重启Eclipse。
1.2 Github多人协作
1.2.1 Collaborators:
使用场景:
Collaborators适用于一个Team之间的团队开发。比如张三有一个项目,Repo地址为ZhangSan/RepoA,这时张三就可以邀请自己的项目组成员或小伙伴一起开发这个项目了。
怎样邀请:
进入Repo,点击Settings-> Collaborators-> Add collaborator 即可邀请。
输入协作者的github名称或邮箱进行添加,此时协作者就可以成功访问啦。
clone及push代码:
被邀请的开发者clone地址为:https://github.com/ZhangSan/RepoA,开发者修改代码(branch、commit、merge、push),push后会更新ZhangSan/RepoA。
第一次push代码时需要输入自己的账号密码进行验证,如果账号在Collaborators中,就可以push成功。
对于小型的开发团队,这些已经足够了。
1.2.2 Fork & Pull request
使用场景:
Fork & Pull request方式适用于开源项目。比如张三有一个很牛的开源项目,Repo地址为ZhangSan/RepoA。李四看着不错想做点贡献,就Fork一个到自己的Repo中,地址为LiSi/RepoA。
clone及push代码:
李四clone地址为:https://github.com/LiSi/RepoA,李四可以任意修改该仓库的代码(branch、commit、merge、push),push后只会更新LiSi/RepoA,任何操作都不会影响ZhangSan/RepoA。
化学反应:
有一天,李四开发了一个不错的功能,想推荐给张三,就可以在自己Fork的仓库LiSi/RepoA里发一个pull request,问问张三要不要。
提交后张三的仓库ZhangSan/RepoA将会收到一个pull request。张三如果觉得不错,就可以将LiSi/RepoA Merge ZhangSan/RepoA,如果觉得有问题,也可以用comment讨论。(ZhangSan/RepoA 所有的Collaborators都可以处理)
详情请移步:浅谈Github多人合作开发
二、eclipse中项目上传
最后点击finis如下图,登录github查看是否上传成功。出现如下截图表示上传成功。
三、忽略上传文件
3.1 未上传之前忽略
在我们的工程项目中,有些文件是不需要上传到服务器上的,比如.classes文件,上传时,我们可以将其过滤掉。
方案一:我们将这些文件添加到.gitignore文件中,然后做代码提交的时候,eclipse就会忽略掉这些配置的文件,就不需要逐个挑选那些不需要上传的信息。但是这些仅仅是对未上传的文件生效。
*/target/
*/bin/
*.settings/
*.classpath
*.gitignore
*.project
方案二:在eclipse中配置,具体步骤为:Window——>Preferences——>Team——>Ignore Resources
如果不生效,可以删除.gitignore文件,重新生成。详情请移步至:eclipse下使用git提交代码时,设置忽略不需要提交的文件
3.2 已上传文件
那么那些已经上传,并且在各自环境需要修改,并且不需要上传的,比如 mysql.properties 文件,每个人自己下载后,各自的数据库密码不一致,需要修改,而又不需要上传到服务器上。通过eclipse提供的命令可以很容易解决这种问题。
方法:
右击文件需要忽略的文件-->team-->advanced-->assume unchanged,选择后,就可以了。当我们再次需要修改这个配置,同样的操作,选择-->team-->advanced-->no assume unchanged 就可以了。详情请移步至:git 在eclipse中忽略上传文件。
对于commit的文件,不同的标记符号表示不同的状态。
- "+":新建的文件
- "×":删除的文件
- "*":修改的文件
四、github删除远程文件或文件夹
有时候我们可能会将一些不需要跟踪的文件上传到远程仓库中,例如配置文件等等。为了不影响其他开发者使用git上的代码,我们需要删除已经传到远程仓库中的错误文件,补救误提交的敏感文件。假设我们删除误提交的classes文件夹,在当前项目路径上打开bash(前提是你已经安装并配置好了Git)。
输入以下的指令:
git pull origin master #拉取最近的更新
git rm --cached WebRoot\\WEB-INF\\classes -r #删除误提交的文件夹(缓存区)
git commit -m '删除classed' #提交删除更改到本地仓库
git push #提交删除更改到远程仓库
五、eclipse项目下载
打开eclipse的window -> show view -> git -> Git Repositiories,效果如下:
点击Clone a Git Repository
在弹出的窗口中输入URI,即Github的地址。
等待下载完成之后,就会出现一个新的git本地仓库
可以看到结束后,项目已经自动导入了,Project Explorer中出现了如下项目。下面的项目导入后出错了,主要是因为jar包路径问题,需要重新找到对应的jar包并添加到build path中。
注意,如果你项目中之前存在着一个同名的项目,就会报莫名其妙的错误,一定要先将其彻底删除再导入项目。笔者在此栽了很大的坑,尝试了网上很多的解决方法,都没能解决。
六、创建分支
右键点击项目,依次找到Team -> switch to -> new branch,输入分支名称(例如这里的rose),点击Finish即可。
注意,这里分支还只是在本地创建,如果要提交分支,依次找到 team -> push branch ‘分支名称(这里是rose)’,更新github上的代码。
点击Finish即可。
下面是提交成功时的结果显示。
一般来说,可以以v+日期的形式命名分支。
七、分支开发好的代码合并到主干上
通常,我们在开发分支上进行开发,开发完成测试通过后把代码merge到master分支进行打包上线。如果线上系统出现bug时我们要从master分支上切除hotfix分支进行bug修复,修复好以后在merge到master进行打包上线。分支合并到主干上的方式如下:
- 先把分支上修改的提交到本地
- 然后再Team -> switch to -> master,切换回主干上
- 在主干上Merge我们刚刚分支上写的代码合并即可
在弹出的Merge框中选择要合并的分支 -> Merge;
如果无冲突,则push即可。
八、代码冲突解决
当我们在多人协作时,经常会遇到代码冲突的情况:Push报rejected – non-fast-forward,我们应该怎么解决冲突呢?
方案一:如果你确定github上的代码已经无用,那么,也可以使用下面的方法强制提交代码到github上。
注意:尽量不要点强推,很容易覆盖代码
方案二:右键项目 -> team -> synchronize Workspace,会出现如下界面:
此时,右键项目 -> Merge Tool,就会打开下面所示的代码对比界面,其中左边为本地代码,右边为远程代码。