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

时间:2011-03-05 17:05:26

标签: git bash shell backup

我有很多未跟踪的文件。我很确定他们中的大部分都可以删除,但是......你知道,备份可能会有所帮助;)

你在类似的情况下做了什么?

4 个答案:

答案 0 :(得分:27)

以下命令将在您的主目录中创建目录中所有未跟踪(未忽略)文件的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输出文件列表NUL(零字节)作为文件之间的分隔符,{{1}参数-0告诉它将xargs视为从标准输入读取的参数之间的分隔符。这是处理文件名可能包含换行符的可能性的标准技巧,因为Linux上文件名中不允许的唯一两个字节是NULNUL

    < / LI>
  • 如果您有大量未跟踪的文件,那么/将多次运行xargs命令,因此我告诉tar附加文件非常重要(tar)而不是创建新的存档(r),否则c的后续调用将覆盖之前创建的存档。

答案 1 :(得分:6)

一般来说,如果它们有用,那么你应该检查它们!如果您现在不需要它们,请检查它们并将其删除! IE,跟踪它们作为已删除的文件。这样,如果您确定需要它们,您可以随时恢复它们。

请记住,使用版本控制系统的一个基本原则是“跟踪一切”。小的更改,破坏的更改(在分支中)等等。您永远不知道何时可能需要这些文件或更改,因此请使用您的VC系统以确保您不会丢失它们。

答案 2 :(得分:1)

使用git-stash,但您必须先跟踪它们。如果他们被明确忽略,他们就不会被添加。

git add .
git stash

现在所有未跟踪的文件都被隐藏起来并从工作目录中删除。如果这不正确,请使用git stash pop,添加并提交要保留的内容,然后重复。

答案 3 :(得分: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