Те, як ви Git ігнорує перегляд / відстеження певного режиму / файлу. Ви просто запускаєте це:
git update-index --assume-unchanged <file>
Тепер, як ви скасуєте це, щоб їх знову спостерігали? (Назвемо це неприпустимо.)
Те, як ви Git ігнорує перегляд / відстеження певного режиму / файлу. Ви просто запускаєте це:
git update-index --assume-unchanged <file>
Тепер, як ви скасуєте це, щоб їх знову спостерігали? (Назвемо це неприпустимо.)
Відповіді:
Щоб скасувати / показати dir's / файли, встановлені на припущення без змін, запустіть це :
git update-index --no-assume-unchanged <file>
Щоб отримати список файлів dir / файлів, які 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>
врятувало моє життя .. Ок, я міг би просто синхронізувати папку ще раз, але я хотів "справжнього" рішення цієї проблеми.
Я припускаю, що ви мали на увазі --assume-unchanged
, оскільки я не бачу жодного --assume-changed
варіанту. Зворотним --assume-unchanged
є --no-assume-unchanged
.
Щоб синтезувати чудові оригінальні відповіді від @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-
видалить статус і залишить лише контури, перерізаючи з третього символу до кінця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 , виконайте наведені нижче дії:
Ви закінчили.
Нічого тут, що не висвітлено. Але хотів би додати мої 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'
щоб знову перерахувати всі кешовані файли та перевірити, чи працювали вищезазначені команди - тепер це нічого не повинно повернути