如何快速备份我想要通过git clean删除的未被跟踪的文件?

22

我有很多未被追踪的文件。我相信其中大部分可以删除,但是...备份可能会很有帮助 ;)

在类似情况下,您会怎么做?

4个回答

41
以下命令将在您的主目录中创建一个tar档案,包括您目录中所有未跟踪(且未被忽略)的文件:
git ls-files --others --exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.tar

如果您要使用此技术,请仔细检查git ls-files --others --exclude-standard单独产生的文件列表是否符合您的预期!

以下是对此解决方案的一些说明:

  • 我使用了-z来让git ls-files输出文件列表,并使用-0参数告诉xargsNUL(零字节)作为从标准输入读取的参数之间的分隔符。这是处理文件名可能包含换行符的情况的标准技巧,因为在Linux上不允许在文件名中出现NUL/这两个字节。

  • 如果有大量未跟踪的文件,则xargs会运行多次tar命令,因此很重要的是我已告诉tar附加文件(r)而不是创建新的归档文件(c),否则后续调用的tar将覆盖刚创建的归档文件。


提示:应该是--others而不是--other - Spidfire
对于压缩档案,您可以使用 -T 选项。tar -T - -cvzf backup-untracked.tar.gz - Trenton D. Adams

7

一般来说,如果它们有用的话,你应该将它们检入!如果你现在不需要它们,那么就将它们检入并移除!也就是说,将它们作为已删除文件进行跟踪。这样,如果你决定需要它们,你总是可以稍后恢复它们。

记住,使用版本控制系统的一个基本规则是“跟踪所有”。小的更改、错误的更改(在分支中),等等。你永远不知道什么时候可能需要这些文件或更改,所以使用你的VC系统确保你不能失去它们。


1
使用git-stash,但你必须先跟踪它们。如果它们被明确忽略了,它们就不会被添加。
git add .
git stash

现在所有未被跟踪的文件都已经储藏起来,并从工作目录中消失了。如果这是不正确的,请使用 git stash pop,添加并提交您想要保留的那些文件,然后重复此操作。


我认为 git stash 也会保存工作区的完整状态...至少是已跟踪文件的状态。 - Jakub Narębski
我认为这意味着工作区很干净,除了未跟踪的文件。 - Josh Lee

1
另一种方法是完整地复制您的git存储库(包括.git),然后删除所有“git ls-files”所显示的内容,即所有已追踪的文件。例如:
cd copy_of_repository
git ls-files | xargs printf "rm \"%s\"\n" > delete_tracked_files.sh.txt

请查看delete_tracked_files.sh.txt文件并将其改名为delete_tracked_files.sh,然后执行它。

你可能还想要断开与远程的连接,以防止意外的拉取或推送操作。

git remote remove origin

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