То, как вы Git игнорируете просмотр / отслеживание определенного каталога / файла. вы просто запустите это:
git update-index --assume-unchanged <file>
Теперь, как вы отмените это, чтобы они смотрели снова? (Давайте назовем это без предположения.)
То, как вы Git игнорируете просмотр / отслеживание определенного каталога / файла. вы просто запустите это:
git update-index --assume-unchanged <file>
Теперь, как вы отмените это, чтобы они смотрели снова? (Давайте назовем это без предположения.)
Ответы:
Чтобы получить отменить / показать каталоги / файлы, для которых установлено, что они не изменяются, запустите :
git update-index --no-assume-unchanged <file>
Чтобы получить список каталогов / файлов, которые assume-unchanged
запускаются следующим образом :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
, который даст вам только имена файлов без префикса «h».
assume-unchanged
, просто используйте git update-index --really-refresh
. С помощью этой команды вам не нужно git ls-files
сначала искать файлы .
Если вы часто используете эту команду - возможно, вы захотите использовать для нее и псевдоним. Добавьте к своему глобальному .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Как установить псевдоним (если вы еще не знаете):
git config --configLocation alias.aliasName 'command --options'
Пример:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
После сохранения этого .gitconfig
вы можете запустить команду очистки.
git hide myfile.ext
или
git unhide myfile.ext
Эта документация Git была очень полезной.
Согласно комментариям, это также полезный псевдоним, чтобы узнать, какие файлы в настоящее время скрыты:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | 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>
git update-index --no-assume-unchanged <file>
спасли мою жизнь .. хорошо, я мог просто синхронизировать папку снова, но я действительно хотел "реальное" решение этой проблемы.
Синтезировать превосходные оригинальные ответы от @adardesign, @adswebwork и @AnkitVishwakarma и комментарии от @Bdoserror, @Retsam, @seanf и @torek, с дополнительными ссылками на документацию и краткими псевдонимами ...
Основные команды
Чтобы вернуть файл, который предполагается неизменным, обратно в нормальное состояние:
git update-index --no-assume-unchanged <file>
Чтобы вывести список всех файлов, которые предполагается неизменными:
git ls-files -v | grep '^[a-z]' | cut -c3-
Чтобы сбросить все предполагаемые неизмененные файлы обратно в нормальное состояние:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Примечание. Эта команда, которая была указана в другом месте, похоже, больше не сбрасывает все предполагаемые неизмененные файлы (я полагаю, что она использовалась и ранее перечисляла ее как решение):
git update-index --really-refresh
Ярлыки
Чтобы облегчить выполнение этих общих задач в git, добавьте / обновите следующий раздел псевдонимов.gitconfig
для вашего пользователя (например, ~/.gitconfig
в системе * nix или macOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
вы можете добиться того же эффекта без псевдонимов или сценариев оболочки, используя !
вот так:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
не очищает (или больше не делает, возможно, однажды) очистку флагов, предполагающих неизменность, в индексных файлах.
Если вы хотите отменить все примененные файлы, предполагая, что они не были сохранены с каким-либо состоянием, а не только кэшированы (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`
Надеюсь, кому-то это тоже пригодится.
.gitignore
чтобы игнорировать ваши артефакты сборки.
.gitignore
но это иногда, по моему опыту не достаточно. Но я понимаю контекст, в котором вы говорите это.
Ни одно из решений не работало для меня в Windows - кажется, что он использует заглавные буквы, H
а не h
статус файла, а команда grep требует дополнительной каретки, которая ^
также представляет начало строки и отрицательный знак следующего символа.
Решение для Windows
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'
снова вывести список всех некэшированных файлов и проверить, сработали ли вышеуказанные команды - теперь это ничего не должно возвращать