12/08/2018, 14:39

Giới thiệu thư viện gitgraphjs - vẽ git workflows với js

Git là một công cụ phải nói là awesome. Đơn giản vì nó được nhiều người dùng. Có một hôm mình thắc mắc, cái commit tree (repos trên github thì vào phần graph/network) thì vẽ nó như thế nào, liệu có filter được không? Rồi sau này mà muốn làm một trang quản lý source mà base trên git thì vẽ kiểu ...

Git là một công cụ phải nói là awesome. Đơn giản vì nó được nhiều người dùng.

Có một hôm mình thắc mắc, cái commit tree (repos trên github thì vào phần graph/network) thì vẽ nó như thế nào, liệu có filter được không? Rồi sau này mà muốn làm một trang quản lý source mà base trên git thì vẽ kiểu gì?

Cuối cùng là mình tìm ra cái này http://gitgraphjs.com/

Gitgraphjs là một thư viện js phục vụ cho mục đích show sơ đồ branch cũng như các commit một cách dễ dàng. Vì sao dễ dàng thì vì nó rất quen thuộc với các developers. Nó đơn giản là gộp các command như ở dưới local thôi.

Ngoài ra thư viện này dùng canvas, nên không cần phải dùng PS hay cái gì cao siêu để vẽ. Chỉ là code mà thôi.

1. Làm sao để dùng thư viện

1.1 Download gitgraph.js

Có nhiều cách để download:

Dùng git :

git clone http://github.com/nicoespeon/gitgraph.js.git

Dùng Bower:

bower install gitgraph.js

Dùng npm :

npm install --save gitgraph.js

1.2 Xử lý trên HTML

Load thư viện:

<script src="js/gitgraph.min.js"></script>

Thêm stylesheet:

<link rel="stylesheet" type="text/css" href="css/gitgraph.css" />

Cuối cùng thêm canvas:

<canvas id="gitGraph"></canvas>

Yay! Như vậy là chuẩn bị xong rồi. Bước vào code có chút là show ra cái cây mong muốn.

2. Coding

2.1 Khởi tạo

Tạo graph default không có config gì:

var gitGraph = new GitGraph();

Tạo graph default với config:

var config = {
  template: "metro" ,
  orientation: "horizontal",
  mode: "compact",
  author: "thaott@gmail.com"
};
var gitGraph = new GitGraph(config);

Như vậy là có thành quả như thế này rồi

2.2 Bắt đầu vẽ

Tạo branch master

var master = gitgraph.branch("master");

Commit đầu tiên

gitGraph.commit("Initial commit");

Commit thứ hai, add một branch mới

gitGraph.commit("My second commit").commit("Add awesome feature");

Tạo branch "dev" từ branch "master"

var dev = gitGraph.branch("develop");
dev.commit("develop detected");

Commit một lần nữa trên "master"

master.commit("I'm the master !");

Tạo một Advanced commit với style và author:

var commitConfig = {
  dotColor: "white",
  dotSize: 10,
  dotStrokeWidth: 10,
  messageHashDisplay: false,
  messageAuthorDisplay: true,
  message: "commit config",
  author: "Me <truong.thi.thao@framgia.com>"
};
gitGraph.commit(commitConfig);

Tới đây, hình vẽ của chúng ta nó đã được hiển thị như thế này

Vậy thì, nó đơn giản như chúng ta sử dụng command line thôi nhỉ?

Một số câu lệnh khác như sau:

// checkout
master.checkout();

// merge
dev.merge();

// merge với custom message
dev.merge(master, "Custom merge commit message");

// merge với tag, message
dev.merge(master, {
  message: "New release",
  tag: "v1.0.0"
});

// tương tác với commit 
dev.commit({
  message: "Commit with console log message",
  onClick: function(commit) {
    console.log("Message when clicked my commit", commit);
  }
});

Thật quá đơn giản và dễ sử dụng ^^

3. Thông tin thêm

Khi mà bạn biết cách sử dụng thư viện này rồi thì hãy thử dùng cái này:

https://github.com/opengl-8080/gitgraphwrapper.js

Kết luận thì gitgraphwrapper sử dụng còn đơn giản hơn gitgraph, nhưng nó hoạt động dựa trên gitgraph. Thế nên nói gitgraph trước thì hơn. Để vẽ một graph với gitgraph thì chúng ta có thể làm thế này:

// gitgraph.js
var gitGraph = new GitGraph();

var master = gitGraph.branch('master');
master.commit().tag('v0.0.0');

var topic = master.branch('topic');
topic.commit().commit().merge(master);

master.tag('v1.0.0');

Nhưng, với gitgraphwrapper, code trông sẽ sáng sủa hơn nhiều:

// GitGraphWrapper
new GitGraphWrapper()
    .branch('master')
    .checkout('master')
    .commit()
    .tag('v0.0.0')

    .branch('topic')
    .checkout('topic')
    .commit()
    .commit()

    .checkout('master')
    .merge('topic')
    .tag('v1.0.0')
;

Và nó lại càng giống command line hơn cả gitgraph. Thế nên là hãy dùng thử nhé. ~

4. References

http://gitgraphjs.com/ https://github.com/opengl-8080/gitgraphwrapper.js https://jsfiddle.net/potherca/6bd4esws/

0