Gitgraph:製作 Git 分支圖

news/2024/7/19 14:01:22 标签: js, git

Gitgraph:製作 Git 分支圖

文章目錄

  • Gitgraph:製作 Git 分支圖
    • 簡介
    • 參考
  • 正文
    • 1. Basic Usage 基礎使用
      • createGitgraph 繪圖上下文
      • branch 創建分支
      • commit 提交信息
      • merge 合併分支
      • tag 標籤
    • 2. Advanced Usage 進階用法
      • mode 模式
      • Event 事件
  • 結語

簡介

在一些項目管理活動中,git 活動紀錄也佔據了非常重要的一部分,版本控制決定了代碼開發的健壯性,保持穩定的基線才能正確地發布版本。本篇將要來介紹一個使用 JS 將 git 提交紀錄可視化的庫:gitgraph.js,我們就一起來看看吧。

參考

gitgraphhttps://gitgraphjs.com/
gitgraph-APIhttps://gitgraphjs.com/stories/

正文

接下來我們透過提供幾個版本的範例來說明這個庫的能力,我們將只會介紹幾個常見的基本能力,更詳細的用法可以到參考二的鏈接查詢。

1. Basic Usage 基礎使用

首先第一個例子我們先展示最基礎的使用

js">import {
  createGitgraph,
  templateExtend,
  TemplateName,
  Mode
} from '@gitgraph/js'
// 創建 gitgraph 容器
const graphContainer = document.getElementById('git-graph')
const gitgraph = createGitgraph(graphContainer, {
  /* options */
  template: templateExtend(TemplateName.Metro, {
    commit: {
      message: {
        displayAuthor: false
      }
    }
  })
})
// 初始化
const master = gitgraph.branch('master').commit('init repository')
const develop = gitgraph
  .branch('develop')
  .commit('dev commit 1')
  .commit('dev commit 2')

master.merge(develop, 'dev version 1 over')

const release = gitgraph.branch('release').commit('release test 1 fail')
const fix = gitgraph
  .branch({
    name: 'fix',
    from: release
  })
  .commit({ subject: 'init fix branch for release' })
  .commit('complete bug fix')

release.merge(fix, 'release test 2 success').tag('v1.0.0')
master.merge(release, 'production baseline for v1.0.0').tag('v1.0.0')

createGitgraph 繪圖上下文

createGitgraph 可以說是容器,也可以說是一個繪圖的上下文,就好像 canvas 的 getContext('2d') 一樣,也是這整個庫最重要的對象之一。我們可以選擇只傳入一個元素作為圖的容器

js">const graphContainer = document.getElementById('git-graph')
const gitgraph = createGitgraph(container)

也可以像上面一樣,額外傳入一個參數對象(options)

js">const graphContainer = document.getElementById('git-graph')
const gitgraph = createGitgraph(graphContainer, {
  /* options */
  template: templateExtend(TemplateName.Metro, {
    commit: {
      message: {
        displayAuthor: false
      }
    }
  })
})

template 表示模板類型,其他還有如 orientation 表示繪圖方向,mode 表示提交信息顯示模式(tooltip 等),reverseArrow 指定箭頭方向等,詳細可選值可以參考官方 storybook 範例

branch 創建分支

有了 gitgraph 上下文之後,在提交版本之前我們需要先創建分支,使用上下文的 branch 方法傳入分支名

js">const master = gitgraph.branch('master')
const develop = gitgraph.branch('develop')

我們也可以傳入一個配置對象

js">const fix = gitgraph.branch({
  name: 'fix',
  from: release
})

const feature = gitgraph.branch({
  name: 'feature',
  style: {
    label: {
      bgColor: '#ffce52',
      color: 'black',
      strokeColor: '#ce9b00',
      borderRadius: 0,
      font: 'italic 12pt serif'
    }
  }
})

commit 提交信息

再來就可以在對應的分支上提交版本了,注意這邊調用 commit 方法之後依舊會返回原分支,所以這邊可以使用鏈式調用

js">const master = gitgraph.branch('master').commit('init repository')
const develop = gitgraph
  .branch('develop')
  .commit('dev commit 1')
  .commit('dev commit 2')

我們也可以在提交分支的時候傳入一個配置對象,subject 將作為提交信息的主標題

js">const fix = gitgraph
  .branch({
    name: 'fix',
    from: release
  })
  .commit({ subject: 'init fix branch for release' })
  .commit('complete bug fix')

fix.commit({
  subject: 'main commit message',
  body: 'body message, put some detail here'
})

merge 合併分支

創建好分支,經過幾次提交之後,接下來就是合併分支的 merge 方法了

js">// 注意這邊第一個參數需要傳入一個分支對象,不能只有字符串
// 第二個方法為合併分之的 message
master.merge(develop, 'dev version 1 over')
release.merge(fix, 'release test 2 success')
master.merge(release, 'production baseline for v1.0.0')

當然,跟 branchcommit 一樣,也可以傳入一個配置對象

js">master.merge({ branch: release, fastForward: true })

tag 標籤

第一個例子用到的最後一個功能是標籤功能,主要可以拿來紀錄提交版本號,也可以拿來表示其他作用

js">// tag 方法跟在想要標示的 commit 紀錄後面調用
release.merge(fix, 'release test 2 success').tag('v1.0.0')
master.merge(release, 'production baseline for v1.0.0').tag('v1.0.0')

// 當然也可以傳入一個配置對象
gitgraph
  .branch('feat1')
  .commit()
  .tag({ name: 'mutation feature', style: customTagStyle })

2. Advanced Usage 進階用法

在簡單的情況下,基礎用法裡面的功能大概已經囊括了所有常用的方法,接下來的進階用法會加入點擊事件、懸浮提示框等方法

js">import {
  createGitgraph,
  templateExtend,
  TemplateName,
  Mode
} from '@gitgraph/js'
// 創建上下文
const graphContainer = document.getElementById('git-graph')
const gitgraph = createGitgraph(graphContainer, {
  /* options */
  mode: Mode.Compact, // compact 模式,在 tooltip 顯示提交信息
  template: templateExtend(TemplateName.Metro, {
    commit: {
      message: {
        displayAuthor: false
      }
    }
  })
})
// 相關事件定義
const onClick = function (commit) {
  console.log('click')
  console.log(commit)
}
const onMouseOver = function (commit) {
  console.log('mouse over')
  console.log(commit)
}

const master = gitgraph.branch('master').commit('init repository')
const feat1 = gitgraph
  .branch('feat1')
  .commit({ subject: 'feat1 commit 1', onClick }) // 單次提交附加相關事件
  .commit({ subject: 'feat1 commit 2', onMouseOver })
master.merge(feat1, 'merge feat 1 fast forward')

mode 模式

我們可以透過設置 mode: Mode.Compact 來將提交信息的顯示方式改為 tooltip,不過實測發現效果並不佳,不建議使用

js">const gitgraph = createGitgraph(graphContainer, {
  /* options */
  mode: Mode.Compact, // compact 模式,在 tooltip 顯示提交信息
  template: templateExtend(TemplateName.Metro, {
    commit: {
      message: {
        displayAuthor: false
      }
    }
  })
})

Event 事件

除了創建分支(branch)、提交(commit)、合併(merge)、標籤(tag)等方法操作靜態模板之外,我們還可以透過附加事件到單次提交(commit)上

js">const onClick = function (commit) {
  console.log('click')
  console.log(commit)
}
const onMouseOver = function (commit) {
  console.log('mouse over')
  console.log(commit)
}

const feat1 = gitgraph
  .branch('feat1')
  .commit({ subject: 'feat1 commit 1', onClick }) // 單次提交附加相關事件
  .commit({ subject: 'feat1 commit 2', onMouseOver })

結語

本篇就介紹這麼多啦,其實有些工具並不需要真的研究到每一個屬性都掌握,主要掌握到全局的架構以及一些重要或是常用的使用方式即可。像是這個 gitgraph 庫還提供了許多客製化模板的接口,然而從業務的角度來說其實並不需要做到高度客製化,還是要以業務需求為基準。


http://www.niftyadmin.cn/n/735575.html

相关文章

Pytorch学习笔记(三) 图像分类器数据并行处理

一、图像分类器 1.加载并处理输入数据 通常来说,处理图像、文本、语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数组格式,然后将这个数组转换成 torch.*Tensor。 图像: Pillow,OpenCV语音: scipy&#xff0…

李开复:我反对马斯克“AI末日论”,科幻跟科学是两码事

其实过去几个月,李开复和国内外AI专家、图灵奖国际得主就这个话题也有过不少交流,大家基本都同意扎克伯格、李开复的观点。 【编者按】本文转载自微信公众号量子位 十天前,硅谷钢铁侠、特斯拉CEO伊隆马斯克在几十位美国州长面前,…

Java基礎:Enum 枚舉

Java 基礎:Enum 枚舉 文章目錄Java 基礎:Enum 枚舉簡介參考正文常數定義Enum 枚舉Definition 定義name 方法ordinal 方法1. Basic Usage 基本用法values 方法valueOf 方法2. Properties 成員變量3. Implement 實現接口4. Singleton 單例模式結語簡介 本…

【AI科幻】地球陨落·平行世界

除了扩散“萨伊”病毒,两步走的周蒙还在寻求更多的帮手。 第二天,被周蒙移植了病毒,并随手清除了那一晚记忆的马特带着他“神清气爽”的乘着无人驾驶汽车去国家实验室上班。 在无人车内,周蒙向其问道:“马特&#xff…

Pytorch学习笔记(二) 自动微分神经网络

一、自动微分 autograd包是PyTorch中所有神经网络的核心,为 Tensors 上的所有操作提供自动微分。 注:可以不用Variable的表示方法了?不需要以下写法? from torch.autograd import Variable xVariable(torch.ones(1,3),requires_…

Java基礎:Lambda 表達式

Java 基礎:Lambda 表達式 文章目錄Java 基礎:Lambda 表達式簡介參考正文Lambda 表達式FunctionalInterfaceExampleCustomer Functional Interface 自定義函數式接口原始用法:匿名內部類實現使用 Lambda 顯示類型使用 Lambda 類型推導java.l…

html的reset按钮的作用简单介绍

本章节介绍reset按钮的作用,希望能够给初学者带来一定的帮助。 很多人认为reset按钮会将表单元素的值清空,情况真的是这样的吗,下面就做一下介绍。 reset翻译成汉语有"重置"的意思,并没有"清空"的意思&#x…

Pytorch学习笔记(一) 基础

PyTorch深度学习:60分钟入门 一、概述 实现强大的GPU加速、支持动态神经网络 两个高级功能: 具有强大的GPU加速的张量计算(如Numpy)包含自动求导系统的深度神经网络 缺点: 不支持快速傅里叶、沿维翻转张量和检查…