やるきなし

2021/08/17 19:05 / list git untracked files

作業中で 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 .

幸い今処理したい 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 する(再度).

Related articles