Чи можу я отримати список файлів із позначкою - без змін?


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-файли -v | grep ^ [az]
— Matt R

17
Моя ОС, мабуть, має дивну настройку зіставлення, тому команда Метта не працювала для мене. Ось що я додав у [alias]розділі мого .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
— Abe Voelker

15
Причина [az] не працює в тому, що оболонка розширює її як маску; якщо в поточному каталозі міститься файл, який відповідає цьому шаблону (тобто одна маленька літера), то розширення цього імені цього файлу. Спробуйте додати лапки, напр. "[
— Az

7
git ls-файли -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]"

Використовуйте псевдоніми

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 \"$@\" | 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.