作業中で git add していないファイルが溜まってきていて,しかもその内容はもう見たくもない,が,あとで参照する可能性はある...という状況で,git status で大量にそういったファイルがリストされるので,なんとかしたい(なんともならないけど).
まとめてそういったファイルをある新しい directory に移動してしまったら,リストされる行が1行になるので,見た目ストレスが軽減される(なお,通常は git stash -u
するが,stash したことを絶対忘れそうなので,git status
でなにか untracked なものがあることはリマインドしたい,という話).
untracked files の list は,あまり git の command を覚えていない私的には以下.
% git status -s . | grep '^\?\?'
ただしこれだと,スペースを含むファイルがある際に以下のように double quote を含むようになり,パイプしづらい.
?? "test death.txt"
ということで,調べた範囲だと,以下とするのが良さそう.
git ls-files --others --exclude-standard --directory .
--others
: untracked files をリストする.--exclude-standard
: ignore (.gitignore
とか)を適用する.--directory
: directory まるごと untracked の場合は directory のみ表示(この option がなければ個別のファイルがすべてリストされる)
幸い今処理したい working repository では sub-directory に untracked なファイルがないので,
% mkdir work-old
% git ls-files --others --exclude-standard --directory . | while read i ; do mv -v "$i" work-old ; done
ぐらいで1つの directory に untracked files をまとめてしまえる.あるいは -z
を使うと null 文字区切りにできるので,以下.
% mkdir -p work-old
% git ls-files --others --exclude-standard --directory -z . | xargs -0 mv -t work-old
mv
の -t
は予め移動先を指定してしまう方法.なお,いずれも work-old も ls-files されてしまうので,以下のように怒られるけど気にしない.
mv: cannot move 'work-old/' to a subdirectory of itself, 'work-old/work-old'
なお,通常は git stash -u
する(再度).