【问题标题】:Is there anyway to prevent for git to completely delete the contents of a file?有没有办法阻止 git 完全删除文件的内容?
【发布时间】:2021-04-11 04:17:26
【问题描述】:

我不知道主要原因,但偶尔git 会在提交未成功完成时完全删除我正在处理的缓冲区/文件中的内容。

文件的内容被清理后,文件的undo-tree 也无法使用emacs 获取最新的更改,而是它的树完全是空的。我无法找到我拥有的最新更改,并且它们没有显示在 stash 中。

在后台:zsh 的git auto-fetch 正在运行,我不确定这会产生什么影响。


=> 有没有办法阻止git 完全删除文件的内容?


  • 文件 (scripts/lib.py) 不在.gitignore~/.gitignore_global 中。

  • git check-ignore -v -- scripts/lib.py 返回空

  • 请注意,文件保持原样,只有 0 个字节

❯ ls -lA -tr -h | grep lib.py
-rw-r--r-- 1 alper alper    0 2021-01-04 22:09 lib.py

【问题讨论】:

  • 如果您想要一个具体的答案,您可能应该告诉我们文件的名称,它是否与您的.gitignore 中的任何模式匹配,以及cleancheck-ignore 命令的输出在现有答案中描述。此外,您的 undo-tree 是否正在使用持久的撤消历史文件,调用的 that 以及 it 是否受这些命令的影响。
  • "文件不在 .gitignore 或 ~/.gitignore_global 中":只有 git check-ignore 可以确认:你尝试过 git check-ignore 吗?
  • 好的,你能用更多细节来编辑你的问题吗,正如 Userless 的有用评论所示?操作系统版本,git版本,还有其他文件受影响吗?
  • 所以你正在使用 Git 插件、Emacs 插件,并且在你做某事时一些文件被随机清除(而不是删除)。你能画出更完整的设置图吗? “如果提交未成功完成” 是什么意思,您究竟采取了哪些措施来结束这种情况?我不会怀疑 Git 会清理随机文件的内容,而是你的编辑器或与文件系统交互的任何其他工具。
  • 但是 git diff 显示一个空文件并不意味着 Git 清除了该文件。它可能在很久以前就发生了,通过其他一些过程。如果您无法解释正在发生的一切,我们将无能为力。我不会怀疑 Git。

标签: git undo


【解决方案1】:

检查您的文件是否会被git clean -ndx 删除(-n 很重要:它将预览将要删除的内容,而不是实际删除任何文件)

还要检查是否忽略了同一个文件:

git check-ignore -v -- the/temp/file

global core.exclude file 可以忽略它)

在这两种情况下,这都表明重复出现的git clean 可能是文件删除的原因。

由于 check-ignore 没有返回任何内容,这指向 Git 外部的根本原因,更多地与 Emacs 相关,正如 OP 指出的 in the comments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2013-04-10
    • 2011-10-13
    • 1970-01-01
    • 2013-08-25
    • 2022-11-03
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多