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

325

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

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

Роб Уилкерсон
источник

Ответы:

449

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

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

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

Чтобы обнять вашего ленивого программиста, превратите это в псевдоним git . Отредактируйте свой .gitconfigфайл, чтобы добавить этот фрагмент:

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

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

h path/to/ignored.file
h another/ignored.file
Эндрю Айлетт
источник
42
git ls-files -v | grep ^ [az]
Мэтт Р
17
Моя ОС явно имеет странную настройку сопоставления, поэтому команда Мэтта не сработала для меня. Вот что я добавил в [alias]разделе моего .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Абе Фолькер,
15
Причина, по которой [az] не работает, заключается в том, что оболочка расширяет его как подстановочный знак; если текущий каталог содержит файл, соответствующий этому шаблону (то есть одну строчную букву), то расширением этого является имя файла. Попробуйте добавить кавычки, например, «[az]»
DomQ
7
git ls-files -v | grep -e "^ [az]"
Амир Али Акбари
12
Предлагаемые псевдонимы работают для поиска неизмененных файлов в текущем каталоге и ниже. Если вам нужен список всех «предполагаемых неизмененных» файлов в хранилище, вам понадобитсяgit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Требор Руде
65

Один лайнер

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

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

ИМХО, 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 \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | 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
ryenus
источник
1
Хорошие легко запоминающиеся псевдонимы :) Спасибо
PlagueHammer
1
Вот еще несколько гибких вариантов: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"и ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Это позволяет, например, git ignored -- PATH1 PATH2выводить список игнорируемых файлов только по определенным путям (полезно, когда у вас много игнорируемых файлов).
Sls
Спасибо за псевдоним
MOHRE
22

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

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

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

earl3s
источник
5
В командной строке Windows используйте grep "^h"вместо одинарных кавычек
Beautifulcoder
7

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

git ls-files -v | sls -pattern ^h -casesensitive
Thowk
источник
3

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

git ls-files -v | findstr /B h
Vova
источник