【问题标题】:Visual Studio Code Source Control not in sync with ExplorerVisual Studio 代码源代码管理与资源管理器不同步
【发布时间】:2021-05-05 23:06:36
【问题描述】:

简单版

我在我的开发机器上使用 Visual Studio Code (v.1.46.1) 来编辑 GIT (v.2.27.0) 存储库中的文件。 但是,当我更改文件并保存它时,它不会显示在“源代码管理”选项卡上,直到我进行刷新。
此外,如果我放弃源代码管理选项卡上的更改,编辑器中的文件不会更新。
注意:我见过几个这样的问题,但没有一个有适合我的答案。


血腥细节

我尝试了什么

仅供参考:我还安装了 2020 年 5 月的 Visual Studio Community 2019 和 Visual Studio Enterprise 2019 版本。

我卸载了 Visual Studio Code,包括 Visual Studios 和 GIT。
然后我删除了我的 Repo 文件夹,删除了我的 \Users\ 文件夹下的 .vs* 和 .git* 文件夹。
之后我重新安装了 GIT,然后是 Visual Studio Code。 (但不是 Visual Studio Enterprise 或 Visual Studio Community)

我还是有同样的问题。

研究

所以,我创建了一个 VM,并安装了 GIT 和 Visual Studio Code。那里一切正常,因此不仅仅是版本问题。

经过一番调查……

  1. 当我保存文件时 GIT 的输出窗口:

    • 虚拟机
      > git status -z -u
      > git symbolic-ref --short HEAD
      > git rev-parse master
      > git rev-parse --symbolic-full-name master@{u}
      > git rev-list --left-right master...refs/remotes/origin/master
      > git for-each-ref --format %(refname) %(objectname) --sort -committerdate
      > git remote --verbose
      ...
      > git config --get commit.template
      
    • 开发箱:无输出
  2. 当我点击 Open Changes 时 GIT 的 OUTPUT 窗口:

    • 虚拟机
      git.getSCMResource.uri file:///r%3A/MyProject/Scripts/Do-MyStuff.ps1
      repo root r:\MyProject
      > git show HEAD:Scripts/Do-MyStuff.ps1
      > git ls-tree -l HEAD -- R:\MyProject\Scripts\Do-MyStuff.ps1
      > git log --format=%H%n%aN%n%aE%n%at%n%ct%n%P%n%B -z -n21 -- r:\MyProject\Scripts\Do-MyStuff.ps1
      
    • 开发箱
      git.getSCMResource.uri file:///r%3A/MyProject/Scripts/Do-MyStuff.ps1
      repo root r:\MyProject
      
  3. 当我放弃更改时,打开的编辑器中的文件:

    • VM:自动刷新
    • 开发箱:不刷新
  4. 使用记事本修改在 Visual Studio Code 编辑器中打开的文件

    • VM:当我返回 Visual Studio Code 时自动刷新
    • 开发箱:不刷新

问题

什么会导致 Visual Studio Code 在文件更改时无法检测到(或收到通知?),我该如何解决?

【问题讨论】:

    标签: git visual-studio-code


    【解决方案1】:

    我遇到了类似的问题,我发现它是由使 git-lfs 与 windows 的内置 openssh 一起工作所需的解决方法引起的(如果您有兴趣,详细信息是 here)。

    解决方法导致 git 挂起任何 ssh 错误,并且当在 vscode 的自动获取期间发生这种情况时,vscode 将不再自动识别任何与 git 相关的更改(文件修改、分支切换等),但如果我这样做,它会起作用手动刷新。

    杀死生成的“git fetch”进程会使 vscode 恢复正常,并且 git 更改会被识别,直到另一个进程由于解决方法而挂起。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2014-01-26
      • 2012-09-16
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2014-02-03
      • 2019-04-12
      相关资源
      最近更新 更多