【问题标题】:Modifying a file in PhpStorm causes Git to consider a file as "Modified" even after undoing the changes在 PhpStorm 中修改文件会导致 Git 将文件视为“已修改”,即使在撤消更改后也是如此
【发布时间】:2017-09-20 16:57:59
【问题描述】:

似乎当我在 PhpStorm 中修改作为 git 项目的一部分的文件时,即使在所有更改都已还原(Ctrl + Z 或手动撤消它们之后,它也会将该文件标记为已修改)。这似乎是 PhpStorm 特有的,即使我为 PhpStorm 中的项目禁用了 VCS,也会发生这种情况。

很明显,PhpStorm 在幕后做了一些事情,这正是我想要弄清楚的。

我已经根据索引和行尾外检查了工作树,一切都精确到文件的 mtime 和 ctime。我附上了两个屏幕截图,第一个是在 PhpStorm 中进行更改并撤消它,第二个是通过 Visual Studio Code。我标记了我进行更改的点 (1) 并恢复了更改 (2)。我也尝试使用git diff 来尝试找出 Git 认为的不同之处,但每次都没有找到。

PhpStorm:

Visual Studio 代码:

当我通过 PhpStorm 进行更改而不是通过 VSCode 进行更改时,谁能建议正在使用的 Git 功能(如果有的话)?或者可能是一种方法来弄清楚为什么 Git 认为文件已被修改,尽管所有更改都已通过 PhpStorm 还原。

在 PhpStorm 论坛上发帖:

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000590464-Modifying-a-file-in-PHPStorm-causes-Git-to-consider-a-file-as-Modified-even-after-undoing-the-changes

【问题讨论】:

  • 比较时间戳。如果启用“安全写入”选项,IDE 将首先写入临时文件,然后删除原始文件并将临时文件重命名为目标文件。这是我首先想到的。 编辑: 哦,您已经比较了所有内容,并且看起来都一样……那么没有想法。 P.S. 您是否使用本地历史记录进行撤消?也许它的行为有所不同......
  • @LazyOne 我没有尝试使用本地历史来撤消,我会试一试。

标签: git visual-studio-code phpstorm diff


【解决方案1】:

通过使用git status -vv 命令,我可以看到每当我使用 PHPStorm 时,文件的权限都会发生变化。由于 PHPStorm 中的 Safe Write 设置,权限已更改。一旦我禁用它,一切都会按预期工作。

另外,我之前在运行git ls-files --eol --stage --debug app/socrates/ajaxphp/ajaxFUChangeStatus.php这个命令时误解了mtime和ctime的意义。运行该命令时,它仅显示缓存文件的 ctime 和 mtime(即:git 索引/暂存文件)。在确定文件是否已被修改时,Git 会将这些值与 stat <file>(这将是您的工作树)的结果进行比较。我只是想澄清一下,所以没有人被误导。

【讨论】:

  • 有趣。 “安全写入”会换出底层文件(它必须这样做)并不奇怪,但它应该保留 mode (至少执行位,最好是所有可能的可保留模式,例如 ACL如果它们已设置)仍然是原始文件。
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
相关资源
最近更新 更多