Отменить git update-index --assume-unchanged <file>
То, как вы Git игнорируете просмотр / отслеживание определенного каталога / файла. вы просто запустите это:
git update-index --assume-unchanged <file>
Теперь, как вы отменяете это, чтобы они снова смотрели? (Давайте назовем это не предполагать.)
8 ответов
Чтобы получить отменить / показать каталоги / файлы, для которых установлено, что они не изменяются, запустите:
git update-index --no-assume-unchanged <file>
Чтобы получить список каталогов / файлов, которые assume-unchanged
запустите это:
git ls-files -v|grep '^h'
Если вы часто используете эту команду - возможно, вы захотите использовать для нее и псевдоним. Добавить в свой глобальный .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
После сохранения этого в вашем .gitconfig
, вы можете запустить команду чище.
git hide myfile.ext
или же
git unhide myfile.ext
Этот ресурс был очень полезным
Синтезировать превосходные оригинальные ответы от @adardesign, @adswebwork и @AnkitVishwakarma и комментарии от @Bdoserror и @Retsam, с дополнительными ссылками на документацию и псевдонимом оболочки...
Основные команды
Чтобы вернуть файл, который предполагается неизменным, обратно в нормальное состояние:
git update-index --no-assume-unchanged <file>
Чтобы вывести список всех файлов, которые предполагается неизменными:
git ls-files -v | grep '^[a-z]' | cut -c3-
Чтобы вернуть все файлы без изменений в нормальное состояние:
git update-index --really-refresh
Ярлыки
Чтобы эти общие задачи легко выполнялись в git, добавьте следующий раздел в .gitconfig
для вашего пользователя (например, ~/.gitconfig
в системе *nix или macOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = update-index --really-refresh
hidden = ls-files -v
Чтобы упростить выполнение перечисления всех файлов, которые не изменяются в оболочке, которая поддерживает псевдоним (например, bash), создайте псевдоним, например:
alias git-hidden="git hidden | grep '^[a-z]' | cut -c3-"
Для оболочек без псевдонима скрипт может помочь.
Функция git update-index имеет несколько опций, которые вы можете найти, набрав, как показано ниже:
git update-index --help
Здесь вы найдете различные варианты - как справиться с функцией update-index.
[если вы не знаете имя файла]
git update-index --really-refresh
[если вы знаете имя файла]
git update-index --no-assume-unchanged <file>
вернет все файлы, которые были добавлены в список игнорирования через.
git update-index --assume-unchanged <file>
Я полагаю (хе) ты имел ввиду --assume-unchanged
, так как я не вижу никаких --assume-changed
вариант. Обратное --assume-unchanged
является --no-assume-unchanged
,
Если вы хотите отменить все примененные файлы, предполагая, что они не изменяются с любым состоянием, а не только кэшированы (git помечает их символом в нижнем регистре), вы можете использовать следующую команду:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
распечатает все файлы с их статусомgrep '^[a-z]'
будет фильтровать файлы и выбирать только предполагать неизменнымcut -c 3-
удалит статус и оставит только пути, вырезая от 3-го символа до концаtr '\012' '\000'
заменит символ конца строки (\012) на ноль (\000)xargs -0 git update-index --no-assume-unchanged
передаст все пути, разделенные нулевым символом,git update-index --no-assume-unchanged
отменить
Добавление к @adardesign
ответ, если вы хотите сбросить все файлы, которые были добавлены в assume-unchanged
список к no-assume-unchanged
за один раз вы можете сделать следующее:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Это просто удалит два символа, выведенных из grep, т.е. "h "
, затем экранируйте все пробелы, которые могут присутствовать в именах файлов, и, наконец, || true
предотвратит преждевременное завершение команды в случае ошибок в некоторых файлах цикла.
Если вы используете Git Extensions, выполните следующие действия:
- Перейти к фиксации окна.
- Нажмите на раскрывающееся меню "Изменения в рабочем каталоге".
- Выберите параметр Показать предполагаемые неизмененные файлы.
- Щелкните правой кнопкой мыши по файлу, который вы хотите отменить.
- Выберите Не предполагать без изменений.
Вы сделали.
Ничто здесь не покрыто. Но хотел бы добавить свои 2 цента. Иногда я запускаю сборку, и она меняет много файлов, а затем я хочу что-то поработать, поэтому эта команда мне очень помогает.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Надеюсь, кому-то это тоже пригодится.
Ни одно из решений у меня не сработало в Windows - похоже, используется заглавная буква H
скорее, чем h
для состояния файла, а команде grep требуется дополнительная вставка, как ^
также представляет начало строки, а также отрицание следующего символа.
Решение для Windows
- Откройте Git Bash и перейдите в соответствующий каталог верхнего уровня.
git ls-files -v | grep '^^H'
перечислить все некэшированные файлыgit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
для отмены пропуска всех файлов, которые были выполнены с помощьюupdate-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
для отмены пропуска всех файлов, которые были выполнены с помощьюupdate-index --assume-unchanged
git ls-files -v | grep '^^H'
чтобы снова перечислить все некэшированные файлы и проверить, сработали ли вышеуказанные команды - теперь это не должно ничего возвращать
Так и случилось! Я случайно нажал кнопку "Принять без изменений"! Я пробовал искать в Интернете, но не нашел рабочего решения! Итак, я пробовал кое-что здесь и там, и, наконец, я нашел решение (самое простое) для этого, которое отменит исходное предположение без изменений!
Щелкните правой кнопкой мыши "Ваш проект", затем
Team > Advanced > Noassume Unchanged
.