cyycoish 发表于 2017-4-9 18:12:59

【VB6】本地版本控制

已经好久没有“威逼利诱”VB6地写过程序了。因为最近有了需求,所以用VB6实现了一个Windows UI的本地版本控制。

接下来我使用我的一个工程“GILIB https://www.0xaa55.com/forum.php?mod=viewthread&tid=1903&highlight=gilib ”做个示范。

首先在程序主界面上将“Project 工程”文件夹定位到当前工程。然后使用“Export Hash for Dir1”对当前工程进行导出散列记录的操作。(这个阶段在工程比较大、目录比较多的时候会有延迟。需要耐心等待。)
将添加散列记录后的工程复制到备份目录下进行备份。我选择了 “C:\Backup\” 这个目录作为备份目录。在使用时也可以将备份目录选择至其他外存。

然后我在当前工程目录下做了一些修改。修改后我又在程序主界面执行“Export Hash for Dir1”功能。确认我的修改。
后来我假设发现工程需要回滚,这时我将主界面下的“Dir2 Repository”目录定位到我的备份目录。定位到备份目录后,如果目录下存在散列记录,程序将自动读取记录文件。

这时候我使用主界面下的“Validate Changes 校验修改”功能比较我对工程做了那些修改。结果如下:

从上图中我们可以看出:自上一次备份后我做的修改如下:
添加了一个目录名叫“Test”,删除了src子目录下的6个文件。修改了文件“gilib_kernel.c”。在src目录下添加了文件“Test.c”。
(注意,图中的 <DIR_REMOVE> 表示“如果我执行回滚操作”,那么将要删除那些目录。那么 <FILE_ADD> 表示我自上一次备份后删除了某某文件,执行回滚后文件被添加了回来。而<FILE_CHANGE> 则表示自上一次备份后我修改过的文件。DIR_ADD, FILE_REMOVE 概念相似。)
选中需要进行的操作后,首先要考虑我是否还需要对当前版本进行备份。假如我还需要对当前版本进行备份,那么我需要在“Change Viewer 变更查看器”中选择:“Make a Backup for Dir1 为当前工程做个备份” 假设我要备份在“C:\Backup\New\”下:

执行备份后,程序会自动为备份做一次散列记录。如果为备份做的散列记录生成失败,程序会提示。那么用户需要手动生成散列记录。生成散列记录的方法就是将主界面下的Dir1 Project—当前工程目录手动设置到刚刚备份的新目录,然后点击“Export Hash For Dir1”。过后记得将当前工程目录修改回来。
回到“Change Viewer 变更查看器”中,我们执行已经选中的更改,把当前工程重置到第一次备份的时候。这时候我选择了执行所有的操作。点击“Execute changes 执行变更”。会弹出警告:“这个操作不能回滚,你要继续吗?”。所以在执行变更以前最好备份一下工程的当前状态。

点击“是”,以后,继续弹出警告:“当前的程序目录比备份库中的目录新,你要继续吗?” 这是因为我要做回滚操作,当然要覆盖掉较新的内容。如果我要将新版本覆盖掉老版本,则不会出现此类提示了。继续点击“是”。

片刻过后,程序提示操作完成。如果还有没有做完的操作剩下,“Change Viewer 变更查看器” 并不会自动退出。但是如果进行完了列表框内所有的操作程序会提示:“Done!完成!”。

完成了所有的操作,意味着此时的工程回到了我第一次备份时候的状态。这时再次点击“Validate Changes 校验修改”程序会提示:“找不到更改。(然而并没有更改)”:

然后我解释一下其他的几个附加功能。在“Change Viewer 变更查看器”中有个功能叫做“Export changes 导出更改”就是把列表框内的内容导出到文本文件中方便比较查看。还有个功能叫“View Record File Info 查看散列记录信息”就是查看散列记录信息,呸,就是检索散列记录的信息。反正就是那个意思啦。我们会看到如下窗体的弹出:

这个功能在主界面下的 Tools 菜单内也有。通过这个功能,你可以看到当前备份是什么时候做的(生成散列记录时的时间)。
“Change Viewer 变更查看器”中还有一些功能,比如“Open Content In Dir1 查看Dir1下的内容”、“View Properties In Dir2 在Dir2下查看文件属性”。注意要添加的文件/目录(有<DIR_ADD>、<FILE_ADD>标记的条目)是无法进行“Open Content In Dir1”和“View Properties In Dir1”的,要铲除的文件/目录是无法进行“Open Content In Dir2”和“View Properties In Dir3”的。请自己思索以上原因。还有,目录可以“查看内容”但是还不支持“查看属性”。

这个程序只能在两个目录之间进行操作,而且仅仅支持Windows 平台。程序不能将工程打包。
这里是关于能打包工程的帖子: https://www.0xaa55.com/forum.php?mod=viewthread&tid=1596

整个程序代码将近1000行。其实都是些交互逻辑处理。这里放出可执行文件:

源代码请回复后即可下载:
**** Hidden Message *****

cyycoish 发表于 2017-4-9 18:51:50

只要知道哪个文件被修改了以后,用一个合适的文件比较工具来查看修改了那些地方是非常容易的事情。
比如我的两个C文件:

这里我使用了 “Ultra Compare”

qytom 发表于 2017-4-21 17:50:52

新人学习一下。

cxx 发表于 2017-10-8 20:40:34

新人学习一下。

阿呆在上海 发表于 2017-10-23 17:48:06

现在学习,还来的及吗:'(

(⊙o⊙) 发表于 2017-11-7 08:06:27

好东西,收藏学习

eiphp 发表于 2018-8-29 09:46:13

看看看看看

搬砖工 发表于 2018-9-15 00:11:54

可能以后用得上

Ink_Hin_fifteen 发表于 2019-7-25 08:57:57

学习了。

Ink_Hin_fifteen 发表于 2019-7-25 09:00:51

不过想吐个槽,就是,界面看起来,并不好看。/笑哭

elfkid 发表于 2020-2-21 11:40:31

加上个事件监视?

elfkid 发表于 2020-2-21 13:12:37

测试发现有bug,问题出在计算md5的类模块里,会存在溢出

hxin123456 发表于 2020-4-3 21:01:48

看看学习下

大宝 发表于 2020-7-8 09:59:49

本帖最后由 china_shy_wzb 于 2020-7-20 13:36 编辑

散列记录最好的应用

xiongsx 发表于 2021-11-12 22:16:18

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

VB小白 发表于 2021-12-6 16:21:01

不错不错.收藏

imr2013 发表于 2022-11-23 21:24:07

niubility!

yokesee 发表于 2023-7-29 22:44:07

:)
页: [1]
查看完整版本: 【VB6】本地版本控制