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

github_search.png

假设搜索 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

适用于不具备主干开发能力。有预定的发布周期,需要执行严格的发布流程。

git_flow.png

Github Flow

适用于不具备主干开发能力。随时集成随时发布:分支集成时经过代码评审和自动化测试,就可以立即发布。

github_flow.png

Gitlab Flow

适用于不具备主干开发能力。无法控制准确的发布时间,但又要求不停地集成。

gitlab_flow.png

选择合适的分支集成策略

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 里程碑

issues.png

create issues。

vue/.github/_.md,vue 提供了很多 issue 模板,可以参考使用。

使用 project 管理 issue

Projects - New Project - Create project (可以选择不同模板)

projects.png

项目内部实施 Code Review

Settings - Branches - Branch protection rules 、add rule

branch_rule.png

建立一个 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。

ci_config.png

ci_secret.png

配置完毕,重新构建即可。

travis ci 前端工程化

项目增加指导文档

Github Wiki 功能,可以用 markdown 编写。Wiki 其实也是一个仓库。

vue wiki https://github.com/vuejs/vue/wiki。