Могу ли я получить список файлов с пометкой --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

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"

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


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

7

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

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

3

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

git ls-files -v | findstr /B h
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.