【问题标题】:Git on MacOS restoring file after commit when doing a git rmMacOS上的Git在执行git rm时提交后恢复文件
【发布时间】:2019-06-01 01:46:18
【问题描述】:

运行 MacOs High Sierra 10.13.4 和 git 版本 2.17.0。

这是我的工作流程:

  • git rm ./some/file.out
  • 运行git status 看到./some/file.out 的删除正在等待提交
  • 检查ls ./some/ 并查看文件已被删除
  • 运行git commit 并查看消息,其中一个文件已被删除

但是:

  • 如果我随后运行git status,我会看到文件仍然存在但未跟踪。
  • 在未跟踪的文件上运行 git clean -df 时,它会被删除并且不会返回。

我也试过

  • 用非git删除文件rm ./some/file.out
  • 运行git add . 然后git commit 并查看文件已删除消息
  • 运行 git status 并显示文件仍然存在,但未跟踪

这似乎是最近才开始发生的。

这是我的 git 配置:

credential.helper=osxkeychain
core.hookspath=/Users/myname/.git_hooks
core.excludesfile=/Users/myname/.gitignore
user.email=myname@somewhere.com
color.ui=true
color.branch=true
color.status=true
color.diff=true
color.interactive=true
color.grep=true
color.pager=true
color.decorate=true
color.showbranch=true
alias.pt=!git push -u origin `git rev-parse --abbrev-ref HEAD`
alias.co=checkout
alias.cob=checkout -B
alias.b=branch
alias.bd=branch -D

可能会发生什么——具体来说,有没有其他人看到过这样的事情并发现它与 git 相关?

只是在终端中删除文件(非git repo文件)没有这种行为。

【问题讨论】:

  • 您确定该文件不是由其他程序自动生成的吗?
  • 我确保我的 IDE 没有运行(以防万一导致了 futz),但没有任何东西应该引用我所在的目录。为了测试这是否发生在我的用户家之外,我在我的/tmp 中创建了一个目录,并在该文件夹中初始化了一个 repo。添加了一些文件并观察到相同的功能。我所知道的不应该引用我手动添加到/tmp 的新目录。此外,我见过这种情况的唯一一次是通过 git。使用rm foo.out 的文件的正常删除只是保持删除状态。

标签: git macos macos-high-sierra


【解决方案1】:

戳我的~/.git_hooks。看起来我的~/.git_hooks/pre-commit.d 文件夹中调用了一个脚本是罪魁祸首。

不确定脚本到底在做什么(或应该做什么),但是当我删除脚本时,git rm && git commit 功能按预期工作——不再有文件从死里复活!

【讨论】:

  • Git 不会查找.d 目录,但您可能有一个~/.git_hooks/pre-commit 会在.d 目录中查找。你从哪里得到这些钩子的?你为什么安装它们? :-)
  • 是的,你说得对,~/.git_hooks/pre-commit 基本上只是在.d 目录中查找文件。查看它们,它们是我的公司用来确保您不会在提交时为可部署的自动构建和部署进行的配置文件检查。他们造成这种奇怪行为的原因是脚本使用的几个不同的库已经过时了。不确定到底是哪一个以这种方式影响了事情——一旦我更新了所有内容并将脚本放回原处,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 2016-06-23
  • 2015-10-08
相关资源
最近更新 更多