我有很多未被追踪的文件。我相信其中大部分可以删除,但是...备份可能会很有帮助 ;)
在类似情况下,您会怎么做?
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
参数告诉xargs
将NUL
(零字节)作为从标准输入读取的参数之间的分隔符。这是处理文件名可能包含换行符的情况的标准技巧,因为在Linux上不允许在文件名中出现NUL
和/
这两个字节。
如果有大量未跟踪的文件,则xargs
会运行多次tar
命令,因此很重要的是我已告诉tar
附加文件(r
)而不是创建新的归档文件(c
),否则后续调用的tar
将覆盖刚创建的归档文件。
一般来说,如果它们有用的话,你应该将它们检入!如果你现在不需要它们,那么就将它们检入并移除!也就是说,将它们作为已删除文件进行跟踪。这样,如果你决定需要它们,你总是可以稍后恢复它们。
记住,使用版本控制系统的一个基本规则是“跟踪所有”。小的更改、错误的更改(在分支中),等等。你永远不知道什么时候可能需要这些文件或更改,所以使用你的VC系统确保你不能失去它们。
git add .
git stash
现在所有未被跟踪的文件都已经储藏起来,并从工作目录中消失了。如果这是不正确的,请使用 git stash pop
,添加并提交您想要保留的那些文件,然后重复此操作。
git stash
也会保存工作区的完整状态...至少是已跟踪文件的状态。 - Jakub Narębskicd 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
tar -T - -cvzf backup-untracked.tar.gz
- Trenton D. Adams