我有很多未跟踪的文件。我很确定他们中的大部分都可以删除,但是......你知道,备份可能会有所帮助;)
你在类似的情况下做了什么?
答案 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上文件名中不允许的唯一两个字节是NUL
和NUL
。
如果您有大量未跟踪的文件,那么/
将多次运行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