【问题标题】:Problems using cygwin+vim as TFS diff utility使用 cygwin+vim 作为 TFS diff 实用程序的问题
【发布时间】:2016-04-28 21:48:22
【问题描述】:

我正在尝试在 mintty 上的 cygwin 上设置 vim 作为我在 TFS (2012) 中的自定义差异工具,并且我遇到临时文件在 vim 可以查看它们之前消失的问题。我将首先介绍到目前为止我尝试过的内容:

当我注意到我的问题时,我尝试只使用本机 windows vim.exe,它在 windows 控制台下使用以下设置可以正常工作:

我还可以让它在 windows 控制台内运行 vim 的 cygwin 副本正常工作:

但是一旦我尝试使用 mintty,我会在 vim 中打开空文件,并且 TFS 传递给 vim 的文件在 TFSTemp 目录中不存在:

我认为 C:\Users\me\AppData\Local\Temp\TFSTemp 目录有一些 Windows 魔法。在前两种情况下,我可以在 Windows 资源管理器中导航到该目录并找到传递给 vim 的文件。但是,当我使用 mintty 时,文件不会显示在资源管理器中。我怀疑这与 TFS 如何处理其临时文件有关。也许 mintty 提供的间接层在某种程度上被 TFS 误解为我关闭了 diff 实用程序?

我对 Windows 或 TFS 的内部工作原理不够熟悉,不知道为什么会发生这种情况,但我的 google-fu 产生了一个似乎与我的问题有关的单一结果: http://www.scootersoftware.com/vbulletin/showthread.php?5538-Beyond-Compare-and-TFS-Problems-with-temporary-files

第一个发布者在使用 beyondcompare diff 实用程序时遇到了同样的文件丢失问题,公司的回应表明使用了错误的可执行文件。显然,他们的两个名称相似的可执行文件中的一个将为每次比较保持一个单独的进程打开,而另一个将只使用一个进程,并且如果您将单进程可执行文件用于 TFS,则会出现丢失文件的问题。我不确定这如何映射到我的问题。

这就是我在这个问题上能找到的全部内容,因此感谢您提供任何帮助。目前,我正在尝试制作一个解决方法 .bat 文件以在启动 mintty 之前将临时文件保存在不同的目录中,但这对我来说似乎有点笨拙(而且我的批处理脚本技能非常初级/不存在)。

更新: 我想出了一个可用的解决方案,它带有一个批处理脚本来启动 mintty,然后再使用 sleep 命令。这使文件保持打开足够长的时间,以便 vim 可以为它们打开缓冲区,这对我来说已经足够了(我只是查看差异)。睡眠命令完成后,文件被删除(我假设由 TFS)。如果我用暂停命令结束脚本,文件将保留在 TMP 文件夹中,直到我在 cmd.exe 窗口中按下一个键。

【问题讨论】:

    标签: vim tfs


    【解决方案1】:

    TFS 处理其临时文件与其他文件夹的方式应该没有什么不同。

    缩小范围:

    • 您可以使用一些 windows 临时文件夹或 VS 临时文件夹重试
    • 您也可以尝试更改TFS Temp Folder 如set TMP=D:\Temp set TEMP=%TMP% md %TMP% 详细步骤请参考博客 来自 MSDN:Change TFS Temp Folder

    【讨论】:

    • 我想过这样做,但我想我会避免在其他程序可能使用它时更改该环境变量的潜在问题。从那以后,我使用批处理脚本启动 mintty,然后使用 sleep 命令使文件保持打开足够长的时间,以便 vim 可以为它们打开缓冲区。睡眠命令完成后,文件被删除(我假设由 TFS)。如果我用暂停命令结束脚本,文件将保留在 TMP 文件夹中,直到我在 cmd.exe 窗口中按下一个键。
    • 建议您将解决方案添加为单独的答案并标记它,而不是在更新中添加它。这也将帮助 SO 中的其他人获得更好的搜索结果。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多