I have a lot of untracked files. I am pretty sure that most of them I can delete, however... you know, backup could be helpful ;)
What you are doing in similar situa
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 get git ls-files
to output the list of files with NUL
(a zero byte) as the separator between files, and the -0
parameter to xargs
tells it to consider NUL
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 are NUL
and /
.
If you have a huge number of untracked files then xargs
will run the tar
command more than once, so it's important that I've told tar
to append files (r
) rather than create a new archive (c
), otherwise the later invocations of tar
will overwrite the archive created just before.
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.
Use git-stash, but you have to track them first. If they’re explicitly ignored, they won’t get added.
git add .
git stash
Now all the untracked files are stashed away and gone from the working directory. If this was incorrect, use git stash pop
, add and commit the ones you want to keep, and repeat.