非交互式的 "git clean -fdx"

7
我正在构建一个处理传入文件包的程序,但我有一个相当严重的问题,即在无法对传入数据进行消毒之前,它处于可能破坏处理的位置,并且以一种简单重启进程无法修复的方式破坏了它。
我目前最好的解决方案是使用git clean -fdxgit checkout .清理项目目录,这个方法非常有效,但有时git clean需要用户输入(“无法取消链接文件。重试?”),这会对自动化造成问题。
是否有一种将Git置于非交互模式的方法?我需要在Windows机器上从Ruby内部执行此操作。

你为什么要先修改本地副本? - zerkms
我不知道如何仅使用git来完成这个任务。既然你正在使用Ruby,也许可以用open3写一个y\n - Jokester
这是目前的计划,但我希望有更好的方法。 - Narfanator
@zerkms:第三方进程的后果,我无能为力 :/ - Narfanator
4个回答

9

对于Windows系统,以下操作适用于我(设置GIT_ASK_YESNO环境变量为false,防止git询问是否确认操作):

set GIT_ASK_YESNO=false

我收到了这些警告信息,但它还是继续进行,好像我没有做出选择一样。

因此,git clean -fdx 可以按照我预期的方式工作,而不会阻塞。


2
yes no | git clean -fdx

yes no 输出 no 并且将其导入到 git clean 中会导致每个提示都被回答为 no


0

免责声明,我不懂Ruby。

根据文档,除非编写一种方法来关闭所有仍在运行的服务(这可能是最佳路线,具体取决于您的解决方案以及需要清理的内容以进行测试),否则使用此命令的最佳效果似乎只能是列出始终会导致[Y/n]提示的文件的简短列表。

因此,当我看到以下内容时:

Unlink of file 'packages/RavenDB.Server.2.5.2851/tools/blahblahblah failed.

我将以下内容添加到我的命令中:

git clean -fdx --exclude=/packages/RavenDB.Server.2.5.2851**

而且,它似乎可以工作。


0

通常这是因为其他进程保持对这些文件的句柄,这些文件“无法取消链接”(如“在PHP/Windows中无法取消链接文件”中所述)。

这意味着您的自动化作业必须确保在更新工作目录之前停止/杀死所有正在运行的进程。


1
我也不介意保留那些无法取消链接的文件,因为它们并不会破坏我的进程,并且正在使用它们的进程在这一点上已经被停止了。有没有办法告诉Git只是让它们存在,而不是按文件逐个询问用户? - Narfanator
@Narfanator 我不知道这个,因为这更像是Linux错误,而非git错误。 - VonC
1
我在使用Windows,虽然我不指望这会有所帮助。 - Narfanator
@Narfanator 是的,我的意思是这是一个操作系统错误,而不是工具(git)错误。 - VonC
有人会认为-f触发器应该告诉它继续而不是像几乎所有其他工具一样在每个单独的文件上停止和阻塞,或者甚至使用-q使其保持安静,就像几乎所有其他工具一样。奇怪的是,无论是强制还是安静,似乎都不像人们期望的那样行事。 - user1689716

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接