How to make quick backup of untracked files which I want to delete by git clean?
Generally if they are ever going to be useful, then you should be checking them in! If you don't need them right now, then check them in and remove them! IE, track them as deleted files. That way you can always recover them later if you decide you do need them.
Remember, a fundamental rule of using a version control system is "track everything". Small changes, broken changes (in a branch), etc. You never know when you might need those files or changes again, so use your VC system to make sure you can't lose them.
The following command will create a tar archive in your home directory of all of the untracked (and not ignored) files in your directory:
git ls-files --others --exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.tar
If you're going to use this technique, check carefully that git ls-files --others --exclude-standard
on its own produces the list of files you expect!
A few notes on this solution might be in order:
I've used
-z
to getgit ls-files
to output the list of files withNUL
(a zero byte) as the separator between files, and the-0
parameter toxargs
tells it to considerNUL
to be the separator between the parameters it reads from standard input. This is a standard trick to deal with the possibility that a filename might contain a newline, since the only two bytes that aren't allowed in filenames on Linux areNUL
and/
.If you have a huge number of untracked files then
xargs
will run thetar
command more than once, so it's important that I've toldtar
to append files (r
) rather than create a new archive (c
), otherwise the later invocations oftar
will overwrite the archive created just before.