Могу ли я получить список файлов с пометкой "Без изменений"?

Что я обозначил как --assume-unchanged? Есть ли способ узнать, что я убрал, используя эту опцию?

Я вырыл каталог .git/ и не вижу ничего похожего на то, что ожидаю, но он должен быть где-то. Я забыл, что я обозначил этот путь несколько недель назад, и теперь мне нужно документировать эти детали для будущих разработчиков.

Ответы

Ответ 1

Вы можете использовать git ls-files -v. Если напечатанный символ является строчным, файл помечен как предполагаемый без изменений.

Чтобы напечатать только те файлы, которые не изменяются, используйте:

git ls-files -v | grep '^[[:lower:]]'

Чтобы охватить вашего ленивого программиста, превратите его в git alias. Измените файл .gitconfig, чтобы добавить этот фрагмент:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Теперь ввод git ignored даст вам вывод следующим образом:

h path/to/ignored.file
h another/ignored.file

Ответ 2

Один вкладыш

git ls-files -v | grep "^[a-z]"

Использовать псевдонимы

IMHO, git hidden лучше для файлов с пометкой --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Вот список связанных псевдонимов, которые у меня есть в ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

Чтобы заставить его работать в подкаталогах и поддерживать аргументы:

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"[email protected]\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"[email protected]\" | grep \"^!!\";}; f"

Например:

 # cd target
 # git ignored classes

О статусе файла

Для меня самые скрытые файлы отмечены флагом h, хотя на самом деле есть несколько других флагов в соответствии с руководством git-ls-files -v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

О git ls-files -t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other

Ответ 3

Эта команда работает более последовательно для меня. Он будет печатать только файлы, которые перечислены как "предположительно без изменений".

git ls-files -v|grep "^h"

Я использовал это много раз в разных средах, и он отлично работает.

Ответ 4

Решение PowerShell, использующее Select-String\sls

git ls-files -v | sls -pattern ^h -casesensitive

Ответ 5

Решение командной строки Windows с использованием findstr:

git ls-files -v | findstr /B h