git历史图形可视化工具

githistorian的Python项目详细描述


GitHistorian

Git日志的可选布局——Graph,灵感来自 此gist线程

依赖关系

  • 二叉树2.0.1

用法

<;command>;[选项][目标…]

显示目标历史记录。如果没有指定目标,则选择头部。每个 按指定顺序为目标分配其自己的列

选项

  • -v,--verbose:在显示历史记录之前打印一些统计信息
  • -n<;n>;,--limit=<;n>;:在n次提交时剪切历史记录
  • -p<;format>;,--pretty=<;format>;:格式字符串,传递到git log--pretty
  • -a,--all,--heads:将所有本地分支追加到目标列表
  • -t,--标记:将所有标记追加到目标列表
  • -r,--remotes:将所有远程分支追加到目标列表
  • -f<;名称>;,--文件<;名称>;:从<;名称>;
  • 加载首选项

首选项

首选项从.githhistorian文件(或从指定的文件)加载 如果有的话。此文件可以包含选项和参数,每个 线。命令行参数将覆盖写入文件的参数。

调用

由于0.0-j,githhistorian是一个合适的python模块,因此它可以作为

	python -m githistorian

一旦安装到系统上。您可以在安装前通过

	PYTHONPATH=src python -m githistorian

或者直接在此目录中调用make。

概念

该项目的长期目标是为git log--graph提供一个可选的布局;短期目标是显示git回购的历史 代表长寿枝的直线。用户可以指定 分支是有序的,因此在特定的列上有特定的分支。

存在性证明

整个项目的存在只是为了证明一个不同的,更可读的布局 因为回购的图表是可能的,而且我实际上可以写出来。它是 现在相当实用,但比调用git本身慢得多,它是一个 独立应用程序。

实施

它是一个python脚本,它查询git repo的所有历史记录(commit (关系)并对其进行处理以构建一个图,然后在 将所有数据网格化并转储到终端上。

垂直扩展

每一行只能包含一个提交。在其之前不能显示任何提交 子(ren),并且在其父(s)之后不能显示提交;提交时不显示 关系(拥有完全独立的历史片段的头部)出现在 按规定订购。

水平排列

头部按指定顺序显示,或默认按字母顺序显示。 同一分支中的提交只要没有 与箭头重叠。

提交之间的关系可能是:

  • 隐含的,当父母和孩子是一对一,在同一 列和连续两行;
  • 当父级和cihld直接在一个以上时,用垂直线突出显示 另一个,但中间有一行或多行;
  • 用箭头突出显示,从 父对象,直到它到达子对象的列,以直角弯曲并移动 直到它到达孩子身上

显示

每次提交都显示为白色项目符号""(\u2022)。箭取 目的列的颜色,并用Unicode方框字符绘制。

当每个合并提交从底部接收其所有传入箭头时, 没有显示父母的原始顺序。你不能推断哪个父母 合并到其中,因为每个父级的相对行和列依赖于 整个布局。

在行尾,每个提交都会重新发送其等效的git show-s--pretty='<;f或输出。您可以使用选项指定格式字符串-p,--pretty,否则将使用我自己的默认值。

由于在n次提交时剪切,某些合并提交可能会丢失一些子级。到 防止绘图丢失这些关系,剪切提交将替换为 占位符。这些假节点没有子节点,它们不显示 他们没有标签。一个特殊的"[…]标记出现在 子弹,

测试

为了测试,我用了一堆回购协议。首先,这个;另外,我建立了一个 一系列具有不同历史的人工回购,以检查 八达通合并,交叉分支,多个头,多个基,一个 Git流示例图像。

我用我的其他一些项目测试了它,也用git repo测试了它。 本身(提交96db324a73fdada6fbe7b63221986f8f18cc63b0):花费了将近600万 渲染146m的文本,包含约37k行和632列,但成功了。版本0.1 用了5毫秒27.876秒来完成相同的操作。

待办事项

显示选项:布局可以垂直镜像,也可以 在水平方向上,字符集可能不同(对于那些终端/字体 如果没有完全的Unicode支持),颜色可以是可选的,可以有更多 颜色(使用淡入和粗体模式,或如果支持,使用全256色),仅映射 显示模式可以忽略任何非合并/非分叉提交…

效率:布局计算没有中间步骤,没有 检查站,什么都没有。即使回购协议没有变化,每次调用都必须 读取整个历史记录,重新生成图表并为每个 承诺。我不确定如何将图形保存在内存(或文件)中并添加 一次提交(或箭头),无需从头开始。

独立的:由于许多原因,无法与Git集成。

  • git集成很难。我已经使用git很多年了,但是我没有 体验其来源、内部结构和社区。我采取 一看图表的源代码,我就跑了;
  • 我不知道我想要什么,也不知道人们想要什么;要点是 作为灵感被提到给了我一些想法,但是更多的细节需要 在项目"变得严肃"之前建立;
  • 生成的布局需要非常大的空间来显示,远远超过 默认的git图;在 很长的历史,或者有很多开放的分支;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于java的原因,maven无法运行代码。lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge   Android项目中的java Creative SDK图像编辑器UI   java如何在Android Studio中使用DataOutputStream上传文件并将其他参数传递到web服务器   java倒计时服务打开时崩溃   java将RubyonRails项目转换为JRubyonRails项目   java我的图库意图是不显示图像?为什么?   java如何在春季启动时跳过mongodb/   java@Autowired在Spring中是如何实现的   甲骨文Akka java。util。同时发生的timeoutexception线程池频繁超时   java maven依赖项对spring启动应用程序有何影响?   java Firestore执行复合查询,未截获事件“已修改”   java ItemStreamException:未能初始化读取器,原因是:IllegalStateException:流已初始化。重新开放前关闭   java将空标记解组到集合的新实例中   使用AspectJ的java新手:无法调用aspect   java查找棋类游戏的所有组合   你为什么要这样做and==与Java中的equals方法不一样吗?   如何对使用JavaUUID的代码进行单元测试?