11
10
2016
14

数据让 git 给吃了!

本文来自依云's Blog,转载请注明。

之前一直觉得 git 是很安全的,除非用户显式指定(比如 --force 啦,reset --hard 啦,checkout xxxx 啦),git 在用户会失去数据时都会停下来,让不小心的用户有机会处理被遗忘的修改。直到有一天,我们有个文件让 git 给吃了!

嗯,是「我们」,不是「我」。这是我们的代码部署服务器上出的事。这仓库不是我使用的,整个操作流程我也没有参与设计与评估。实际上我只是作为 troubleshooter 参与到这次神秘事件之中的。

要让 git 愉快地吃掉数据,只要这样就可以了:

  • 提交 A 不包含文件 f
  • 提交 B 包含文件 f
  • 当前工作区为提交 A,并且包含一份未被 git 管理的文件 f,并且 f 被 gitignore 忽略掉了

然后做如下操作,未被管理的那份 f 就会消失不见了:

  • 将工作区切换到提交 B。因为 f 被忽略,所以 git 不会报错(代码
  • 将工作区再切换回 A。因为 A 不包含 f,所以 f 被删掉了

正在吃 f 的 git:主人遗弃了的 f 就交给我好了~

要避免出现这种问题,当然是在 git 工作区会有修改的时候,不要依靠 git 来在多个版本间切换啦~btrfs 或者 zfs 的快照多好!如果文件系统不支持快照的话,那就用多个目录吧。

Category: 版本控制 | Tags: linux Git | Read Count: 10605
毅凡 说:
Nov 10, 2016 05:06:20 PM

为什么不把命令贴出来呢?这样看着好乱

scateu 说:
Nov 10, 2016 05:18:15 PM

摸摸... 以后再也不鄙视用两个目录的人了....

Avatar_small
依云 说:
Nov 10, 2016 06:22:46 PM

因为测试过程没有记录,所以这部分就交给读者去补充啦~
(又不是很麻烦

Avatar_small
依云 说:
Nov 10, 2016 06:23:08 PM

呃,用户是机器不是人的说~

mapleray 说:
Nov 11, 2016 09:52:47 AM

之前遇到过这个情况。这个算是设计未考虑周全吗?

Avatar_small
依云 说:
Nov 11, 2016 10:10:51 AM

我觉得还好。被排除的文件注定是短命的。

Avatar_small
依云 说:
Nov 18, 2016 10:40:09 AM

MySQL: 咦这是什么字符,怎么有四个字节啦?吃掉吃掉~

Haowu Ge 说:
Nov 23, 2016 07:29:52 AM

雾草,仙酱这个是自定义域名啊。。

Chronos 说:
Nov 23, 2016 02:07:35 PM

我也碰到过类似的问题,之前把 config.py 这个自定义的配置文件不小心存到了git里面,然后删掉后同步到服务器上,结果把服务器的config.py也给弄没了。

TaoBeier 说:
Nov 25, 2016 12:40:48 PM

刚试了下, 果然如此。。 试图去找被抹掉得文件.. 无果, 应该是直接覆盖了, 没留下任何记录

tangzx 说:
Dec 09, 2016 02:00:12 AM

之前也被坑过,记录见:http://tangzx.qiniudn.com/koans.html#git-%E4%BD%A0%E4%B9%9F%E5%9D%91%E6%88%91

checkout 的时候会提醒你,但如果你是 checkout 到一个新的分支(orphan)……不提醒。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com