终于,受到了不做备份的惩罚。
最近在开发一个微信小程序,因为只是从一个 demo 做起,就偷懒只在本地使用了 git,但并没有将工作推送到 remote。于是该发生的终究还是发生了,因为微信开发者工具的一个 Bug,以及我的误操作,导致工作成果全部丢失。
当时微信开发者工具的项目目录中莫名的出现了一个 .
目录,类似这样。
(这个是我事后模拟的,建立文件夹时,文件夹可以命名为 .
并且不会报错,但删除后会删掉整个项目文件夹)
里面只有一个文件,当时脑子一抽,就把它删除了,然后就变成了下面这样。
整个目录都没有了!包括 .git
文件夹!我当时就凉了,虽然只是个 Demo,但是也实现了挺多的功能,重写一次肯定很难受。
趁着热乎,我尝试了一些恢复的方法。
首先是文件恢复工具
找了两款 Mac 下的文件恢复应用,都没有能够恢复这个文件夹
恢复工具无效,就只能找找看小程序编译的缓存了
但在微信开发者工具相关的目录找了个遍,也没有看到有用的东西。/Users/<username>/Library/Application Support/微信web开发者工具/WeappBuildCache
里面空空如也。在这篇文章提及的其它几个目录也找了下,依然未果。不甘心,在 /Users/<username>/Library/Application Support/微信web开发者工具
这个目录下再找找。
使用小程序的 id 查找相应的文件名
$ find . -name 'wxd359116e97dxxxx'
./WeappFileSystem/o6zAJszdNy5yHQ6C1PLiOyAxCUR8/wxd359116e97dxxxx
./WeappRemote/data/wxd359116e97dxxxx
./WeappRemote/temp/wxd359116e97dxxxx
./WeappRemote/wxd359116e97dxxxx
这几个文件夹都看过了,没有有价值的东西。
使用小程序的 id 查找文件内容
$ grep 'wxd359116e97dxxxx' . -r
Binary file ./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/0fe5cffdcd00df22_0 matches
Binary file ./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/ad78a46bfb6836da_0 matches
./WeappLocalData/localstorage.json:{
..............
}
这个方法能够检索到一些文本文件,但里面没有我想要的东西,都和源代码无关,虽然有几个二进制文件,但没有引起我的注意。
继续以代码中的某个方法名查找文件内容
$ grep 'renderGrid' . -r
grep: ./App Shim Socket: Operation not supported on socket
Binary file ./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/00d43b43c128d7e7_0 matches
Binary file ./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/6df5479a210eea9a_0 matches
./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/ba7a36476285a8ef_0 matches
前面的几个二进制文件又冒出来了,这引起了我的注意,查看一下,果然发现了代码的踪迹。
cat ./Default/Storage/ext/ikhdnebglabgeplgnhnjgldiemdflddf/09F1EBF3AF8D/Cache/ba7a36476285a8ef_0
似乎是微信开发工具的 js 编译或者调试记录,找到最新的代码,复制出来手工恢复。
然后,比较遗憾的是,这些文件里面只包含了 js 部分的代码,页面和样式的代码都缺失了。不过聊胜于无,总算挽回了一些损失。这次吸取了教训,以后无论如何,都要随时 push 代码。