项目背景
kit,一个用于管理工作文档版本的工具。项目地址:https://github.com/tsingkk/kit。
编写这个工具的目的有两个:
自学练习 Python 编程;
学以致用,试图解决自身工作中,文件和版本过多导致分不清文件版本的问题。
勘察设计行业的工作成果为设计文件,以 Word 文档和 CAD 图纸这类二进制文件为主,有别于 IT 行业常用文本文件。git 并不适合用于管理二进制文件,但非常喜欢 git 对版本的管理流程,因此就参考 git 的一般操作流程,写了 kit。对,名字也是模仿的。对 git 的模仿也仅限于操作流程和名字,原因是作为非专业人员看不懂 git 的代码和算法。对版本的管理流程也根据自己工作需要做了简化。
目前 kit 属于自己练手项目,功能有限,bug 估计很多。打算先以一个个单独 Python 脚本完成不同功能,后续尝试编写成命令行工具。
功能
目前实现了以下 5 个功能,后续会添加其他功能。
以下功能只对当前目录下的 1工作 目录中的文件起作用。
init.py:对工作目录进行初始化,生成.kit目录和相关的配制文件;status.py:查看当前目录下的1工作目录中的文件的变化;add.py:将1工作目录中有变化的文件全部添加到暂存区;commit.py:将暂存区文件提交至版本库;release.py:选择版本发布文件。
安装
一个很土的安装方法
下载脚本,然后将脚本放在本地合适目录里,再给终端模拟器添加 aliases。用 Cmder 举例,添加自定义 aliases 如下:
以上代码中 kitstatus 是我自己定义的快捷命令名称,可按喜好随意命名。
一个更土的安装方法
不用安装,直接把脚本下载拷贝到工作目录中,在工作目录中运行脚本。
依赖
Python 运行环境
os、json、time、filecmp、shutil这 5 个 Python 内置包这几个脚本有相互依赖关系,需要放在一个目录中
使用
再次注意,以下功能只对当前目录下的 1工作 目录中的文件起作用。 也就是说,当前目录下的 1工作 目录相当于 git 中的工作区。
首先需要在当前目录中,创建两个新目录 1工作 和 2发布 。1工作 目录中存放要编辑的文件,这些文件会被进行版本管理。2发布 目录用来存放编辑完成需要发布的文件包。
目前设置中,1工作 目录必须包含以下 5 个子目录。
1专业成稿编辑2提出条件编辑3过程控制文件编辑4工艺计算5校核
以上子目录对应 5 种文件包类型,发布文件包时可供选择。
然后运行 init.py 对当前目录进行初始化,会生成 .kit 目录,用来存放所有提交的历史版本的文件,以及配制文件。
如果当前目录曾经被初始化过,运行 init.py 则不会重新创建 .kit 目录和配置文件,而是使用原有的。
初始化后,在 1工作 目录中添加、修改、删除文件后,运行 status.py 查看工作区中文件变更。
如果要忽略对某一类型文件的变更查看和版本管理,可以将文件类型的扩展名写入 .kit/ign.json 中。比如忽略对 AutoCAD 自动生成的 bak 和 lsp 格式文件的版本管理,.kit/ign.json 中添加如下:
接着运行 add.py,将工作区中的文件变更添加至暂存区。(目前只能将变更一次性全部添加,无法指定文件添加。)
将暂存区文件提交至版本库中,使用 commit.py。
运行脚本后会提示输入本次提交的变更说明。提交说明会存储在 .kit/log.json 中,同时会生成 .kit/log.mdmarkdown 格式文件方便查看提交说明。
当需要将某一版文件成套发布时,运行 release.py,会提示可选择的版本号以及文件包类型,然后输入发布文件包的版本名称。
接着会生成要发布的文件包并保存在 2发布/[选择的文件包类型]/[版本名称] 目录中。该目录中同时会生成本次发布的 更新说明. md 文件,内容为本次发布的更新说明与之前历次发布的更新说明。本次发布的更新说明为合并的本次发布版本号与上一次发布版本号之间所有的提交说明。