Git 与 Github
Github 初识
GIt 通过引入 fork 概念使得开源项目的合作变得容易,但是 Git 仍有局限性。
Git 无法帮助开发人员寻找开源项目,许多程序员开发了优秀的开源项目,也很难被别人发现。
Github 核心功能
- Code Review
- comment
- Project management 项目管理
- issue
- cards board
- Integrations 项目集成
- provided by a third companies
- Team management 团队管理
- Social coding 开源
- follow projects
- explore your intersets
- share your achievement
- Documentation 文档、静态站点、wikis
- Github Pages
- Wikis 说明手册
- Code hosting
- 代码托管
高效搜索项目
Advanced search 高级搜索。
https://github.com/search?q=&type=Repositories
假设搜索 Git 相关内容:
// 如果直接输入名称关键字,查询的只是仓库名称和描述信息。
git 学习资料
// 可以指定查询范围
git 学习资料 in:readme
git 学习资料 in:readme stars:>1000
根据高级搜索面板可以自己组合关键字。
Github 支持 code 和 repository options 同时搜索
如何保证开源项目质量
Pull Request,可以给开源项目提交申请,也可以审查别人的申请。
Code Review。
为何需要组织类型的仓库
settings - organizations,可以创建组织。
存在以下功能:
- Repositories
- People manage
- Teams:对仓库进行精细化的管控
- Projects
- Settings
可以对团队成员进行权限管控,组织成员可以看到所有仓库(无权限时)以及所有团队,可以自主申请加入团队。
Github 与 Git 简单同步
配置 SSH 公私钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 一直回车即可
cat ~/.ssh/id_rsa.pub # 查看公钥,粘贴到 Github(SSH and GPG Keys)
本地仓库同步到 Github
create repository,将本地代码同步到远端仓库。
首次创建仓库
git remote add [custom_name] [remote_ssh_url] # 添加远程仓库地址
git remote -v # 查看远端地址
git pull # 如果远端仓库已存在内容,需要先拉取代码 git pull => git fetch + merge
git push --set-upstream origin master
拉取分支合并
git remote -v # 查看远程版本库信息
git remote add githup <url> # 添加githup远程版本库
git fetch githup # 拉取远程版本库
git merge -h # 查看合并帮助信息
git merge --allow-unrelated-histories githup/master # 合并githup上的master分支(两分支不是父子关系,所以合并需要添加 --allow-unrelated-histories)
git push githup # 推送同步到githup仓库
rebase 情况,不使用 merge
1)先把远端的分支 fetch到本地,然后,再执行 rebase 2)直接 git pull --rebase
Github 团队协作
创建团队项目
Create a new repository - Owner(select organization)- private type ,其他选择可以任意。
settings - Collaborators & teams,角色权限控制,可以建一个组织进行测试。
选择适合团队的工作流
需要考虑的因素
- 团队人员的组成
- 研发设计能力
- 输出产品的特征
- 项目难易程度
主干开发
适用于开发团队系统设计和开发能力强。有一套有效的特性切换的实施机制,保证上线后无需修改代码就能修改系统行为。
适用于组件开发的团队,成员能力强,人员少,沟通顺畅。用户升级组件成本低的环境。
适用范围比较少。
Git Flow
适用于不具备主干开发能力。有预定的发布周期,需要执行严格的发布流程。
Github Flow
适用于不具备主干开发能力。随时集成随时发布:分支集成时经过代码评审和自动化测试,就可以立即发布。
Gitlab Flow
适用于不具备主干开发能力。无法控制准确的发布时间,但又要求不停地集成。
选择合适的分支集成策略
Insigts - Network 可以查看分支情况
Settings - MergeButton
- Allow merge commits:
- Allow squash merging:
- Allow rebase merging :允许线性的合并、期望历史记录就是一条线
Pull requests - new pull request
=> compare -> base
=> create pull request
=> merge pull request,select merge way
- create a merge commit
- squash and merge
- rebase and merge
启用 issue 跟踪需求和任务
Issues 面板
- label 标签
- milestones 里程碑
create issues。
vue/.github/_.md,vue 提供了很多 issue 模板,可以参考使用。
使用 project 管理 issue
Projects - New Project - Create project (可以选择不同模板)
项目内部实施 Code Review
Settings - Branches - Branch protection rules 、add rule
建立一个 Pull Request,可选中 Reviewers 人员,被添加人员会受到邮件通知。Review 通过后,也会通知开源人员。
如何保证集成质量
项目做好工程化配置,做好代码检查和提交信息审核。
Settings - Branches - Branch protection rules,配置 codereview 集成检查、CI 要求。
Marketplace 中提供了很多第三方服务,如 Travis CI、Codecov 、jenkins 等。
Settings - Integrations & services - Installed Github Apps 可以查看已安装服务。
发布产品包 release
需要借助 CI 工具,打包完毕自动添加到 releases 中。
以 Travis CI 为例。
deploy:
provider: releases
api_key: $github_oauth_token
file: xxx
skip_cleanup: true
on:
branch: master
Settings - Installed Github Apps - Travis CI - Configure。
配置完毕,重新构建即可。
项目增加指导文档
Github Wiki 功能,可以用 markdown 编写。Wiki 其实也是一个仓库。
vue wiki https://github.com/vuejs/vue/wiki。