Git clean支持移动到回收站吗?

8

如果我知道在出错的情况下可以撤销删除,那么我会更放心地使用git clean。

它是否以任何方式支持回收站?如果不支持,有人知道任何解决方法吗?例如,使用git clean -n打印文件,然后将它们移动到回收站的外部工具?


我敢打赌git肯定有一些钩子可以做到这一点,但即使没有 - 我相信如果你能用git clean -n列出文件,那么你可以将列表直接传输到某个批量移动工具中,将它们移动到垃圾箱或任何你想要的地方。如果可能的话,你可以编写一个小脚本来实现这一点,将其命名为git-trash并使用它。 - quetzalcoatl
2
@quetzalcoatl 这给了我一个想法,也许在Linux中 git clean -n | xargs trash-cli 可以起作用。 - sashoalm
https://dev59.com/F2025IYBdhLWcg3wAhDp#14283266/ - General Grievance
4个回答

4
很抱歉,git没有这个特权。无论什么东西一旦丢失就再也找不回来了!
使用命令
'git clean -fdxn'
可以执行干运行,并显示如果您运行该命令将删除哪些文件。
另外,如果您已添加文件,但某些原因删除了这些文件,则可以使用以下命令恢复这些文件:
'git fsck --lost-found'
尝试一下吧,但别抱太大希望。

1
非常好的回复,结合 https://dev59.com/Kmkw5IYBdhLWcg3w6e0b#9928789,我成功地检索到了我的文件(关键信息是在运行 git fsck --lost-found 后,blob 位于 .git/lost-found/other 中,并且可以使用 grep 进行搜索)。 - Étienne

3

recycle.exe 放入您的 %PATH% 中。

运行 git config --global alias.recycle !git_recycle.sh

将 git_recycle.sh 放入您的 %PATH% 中:

#!/bin/bash

cd ${GIT_PREFIX:-.}
git clean -xdfn "$@" | sed 's/Would remove //' | xargs -d \\n --no-run-if-empty recycle

1
感叹号在Bash中具有特殊含义(指以'!'后文本开头的上一条命令)。您应该转义感叹号以使其正常工作: git config --global alias.recycle \!git_recycle.sh - Paweł Stankowski
1
@PawełStankowski:好观点,给定的“git config”命令适用于“cmd.exe”,但不适用于bash。 - Kevin Smyth

0

不。

如果你担心丢失文件,那么“试运行”实际上是唯一可行的选择:

git clean -n

或者等价地

git clean --dry-run

Git 不了解底层的桌面环境,也很可能永远不会了解。

Git 图形界面可以展示这些文件,但是你为什么要把它们移到回收站呢?在移除文件之前,请考虑一下你正在做什么。

或者,将这些文件添加到您的代码库的一个独立分支中,尽管这可能违背了删除它们的初衷。


2
在删除文件之前,请仔细考虑自己的操作。如果你考虑到回收站、垃圾桶、撤销功能(如Word、Gmail等),我猜这些都是为了让人们在犯错误时有所退路,因为很多人会感到压力。更不用说有多少次人们会使用“git commit -am Checkpoint”命令了。 - Kevin Smyth
@KevinSmyth 是的。这不仅是心理上的好处,还可以让你工作更快,因为你不需要像以前那样“双重检查”操作——你总是可以回到之前的状态。这类似于文字处理器中的“撤消”。是一开始就确保正确输入更快呢?还是只需输入你认为正确的内容,如果出错了再使用撤消功能呢?后者在许多情况下显然更好。对于回收站也是如此。(尽管 git clean 不太常见——但原则是相同的) - Venryx

-1
如果您在Windows上使用Git Bash,最快的方法可能是:
explorer .

这将在当前工作目录中打开资源管理器。找到文件,按DEL键删除并使用CTRL+W关闭窗口。

如果根据您的资源管理器设置,甚至没有确认提示。


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