1

我刚开始在我的工作流程中使用逃犯......非常有用!但我似乎遇到了一种奇怪的烦恼,我希望有人可能有解决方案:

当我运行 :Gpush 时,有时控制永远不会返回到 vi。Vi 一直挂在输出上,git push直到我 Ctrl+C 杀死“它”。我也尝试过安装vim-dispatch,并且在tmux中,结果是git push窗格永远不会关闭。这更烦人,因为我必须切换到该窗格以 Ctrl+C 它。

奇怪的是,如果 I ps,我没有看到任何 git 进程正在运行,所以我不确定到底挂的是什么……但是 Ctrl+C 确实杀死了“它”,无论“它”是什么,并且控制权返回给 vi。

我发现了一个提到类似行为的已关闭 github 问题,但从未发布过解决方案……看来问题最终只是“消失”了 OP,因此问题已关闭。

然而,一段时间后,第二个人回复了这个问题,说他遇到了类似的问题,这似乎是在 git 产生某种“凭据缓存守护进程”时发生的。我没有像他那样使用凭证助手,所以这不是我的确切问题......但这让我注意到了其他事情:

我已将 ssh 配置为保持连接打开 5 分钟(ControlPersist 5m在我的 ~/.ssh/config 中)。如果我有一段时间没有推送,git push会导致 ssh 产生一个进程来保持连接。这会触发问题。5 分钟后,ssh 退出,这将解决问题并导致 tmux 窗格关闭。如果我在连接仍然打开时再次推送,它工作正常。

所以,问题似乎是当 git 产生另一个进程时。当我在命令行上运行 git 时,这显然不会引起任何问题,那么为什么会在这里引起问题呢?我能做些什么呢?我不想禁用 ssh 持久连接,因为这很有用......

4

1 回答 1

0

对于将来偶然发现此问题的任何人,我已经为我的 ssh 进程挂起 vim 的特殊情况提出了一个解决方案:我禁用了 ControlPersist 选项,但仅适用于通过逃犯在 vim 内运行的 git 命令,方法是设置以下内容我的 .vimrc 中的选项:

let g:fugitive_git_executable = "env GIT_SSH_COMMAND='ssh -o ControlPersist=no' git"

这很丑陋,我很遗憾我必须禁用持久连接,但它确实有效。

于 2015-06-10T20:36:50.807 回答