我正在构建一个处理传入文件包的东西,但是我有一个相当严重的问题,即我无法清理传入的数据,直到它能够中断处理,并且它破坏它的方式是简单地重新启动进程不修复它。
我目前最好的解决方案是进程使用git clean -fdx
的git checkout .
项目目录,这就像一个魅力,除了有时git clean
要求用户输入(“无法取消链接文件。重试?”),这会导致自动化问题。
有没有办法让 Git 进入非交互模式?我需要从 Windows 机器上的 Ruby 内部执行此操作。
对于 Windows,这对我有用(将 GIT_ASK_YESNO 环境变量设置为 false,阻止 git 询问是 - 否问题):
set GIT_ASK_YESNO=false
然后,当我收到与警告相同的消息时,它会继续,就好像我说不一样。
所以git clean -fdx
按预期为我工作而不会阻塞。
yes no | git clean -fdx
yes no
no
永远输出并通过管道输入git clean
导致每个提示都以no
.
这通常是因为其他进程保留了对那些“不能被不同”的文件的句柄(如“无法在 PHP/Windows 中取消链接文件”中所述)。
这意味着您的自动化作业必须确保在更新工作目录之前首先停止/杀死所有正在运行的进程。
免责声明,我不认识 Ruby。
根据文档,并且没有编写一种方法来杀死所有仍在运行的服务(这可能是最好的途径,取决于您的解决方案以及您需要清理什么才能测试它)似乎我们可以做到的最好使用此命令的希望是列出始终导致[Y/n]
提示的文件的候选列表。
所以,当我看到以下内容时:
文件 'packages/RavenDB.Server.2.5.2851/tools/blahblahblah 的取消链接失败。
我将以下内容添加到我的命令中:
git clean -fdx --exclude=/packages/RavenDB.Server.2.5.2851**
而且,它似乎有效。