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


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.