Удалить странный файл "Iconr" из репозитория
В моем репозитории git у меня есть странный файл в промежуточной области, который отказывается быть возвращенным, удаленным, совершенным - в основном я не могу заставить его уйти..
В течение нескольких лет в папке должен храниться какой-то древний файл OS 9.
Несколько дней назад я удалил файл в файловой системе, так что теперь git отслеживает удаление Iconr
.
Однако он застрял там.
Ошибка, которую я получаю через SourceTree (мой клиент git UI),
fatal: папка pathspec/Iconr 'не соответствует никаким файлам
Любая идея, как сделать git полностью забыть об этом файле?
Ответы
Ответ 1
Лучше вернуться к командной строке, чтобы получить более точное сообщение об ошибке.
Здесь вы можете попробовать git add -u
, а затем git commit
, чтобы зарегистрировать удаление этого файла в репо.
См. " git status
говорит, что файл удален, но git rm
говорит error: pathspec '…' did not match any files
" в качестве примера.
Вы также можете просмотреть, что даст git clean: git clean -d -x -n
(как описано в "Почему нет "pathspec" , когда я пытаюсь удалить папку в Git?" )
Другая проблема заключается в том, что этот файл не отслеживается вообще в вашей текущей ветке, но отслеживается в другой ветке. См. ответ, чтобы проверить, так ли это.
Ответ 2
Добавление строки
Icon?
до .gitignore работал у меня.
https://answers.atlassian.com/questions/167170/removing-invisible-icon-files-on-a-local-repository-on-a-mac
Ответ 3
В качестве обходного решения файл .gitignore
можно редактировать, чтобы полностью игнорировать файлы Icon\r
, как описано в этой записи в блоге: Git Совет: Игнорирование значка \r в .gitignore
Ответ 4
Файлы Icon^M
-like, скорее всего, создаются некоторыми внешними приложениями, такими как Folderol, которые выделяют ваши папки.
Вы должны либо удалить приложение, которое это делает, либо проигнорировать его в файле .gitignore
, например
printf "Icon\r\r" >> .gitignore
Это команда оболочки. Или добавьте его как Icon??
или вы можете воспроизвести специальный символ ^M
на Control - V и нажать Enter.
Связано: Как игнорировать значок? в git
Если вы не хотите вносить это изменение в свой репозиторий, добавьте его в свой глобальный .gitignore
или добавьте его в .git/info/exclude
.
Смотрите: Использование Git/Игнорирование файлов.
Чтобы удалить файлы самостоятельно, попробуйте:
find . -type f -name 'Icon?' -print -delete
Или, если они единственные, которые не установлены, запустите: git clean -f
.
Ответ 5
Что показывает, что "Iconr" в SourceTree действительно "Icon\r", где \r - это шестнадцатеричное значение 0x0d.
.gitignore соответствие шаблону имени файла ограничено по сравнению с регулярным выражением POSIX. Регулярные шаблоны выражений, такие как "Значок\r" и "Значок\x0d", не работали для меня с SourceTree.
Простой знак: добавить Icon?
шаблон в файле .gitignore будет работать с файлами Iconr, проигнорированными в SourceTree.
Предостережение: Icon?
использует ?
, который является односимвольным шаблоном. Таким образом, файлы, такие как "Icon\r", "icona" и "icon3", будут игнорироваться с помощью шаблона Icon?
. Поэтому при необходимости используйте имена файлов Icon01
, icon02
, iconaa
вместо Icon1
, icon2
, icona
с таким обходным путем, чтобы добавить такие файлы в git.
Точный игнор: Точное имя файла Iconr
можно игнорировать с помощью редактора binhex.
В редакторе binhex добавьте 0a 49 63 6e 6e 0d 0d 0a
. Дополнительные 0a - это переводы строк, чтобы скопировать значок "Icon\r\r" для последующего редактирования файла unix в противном случае.
Предостережение. Если вы используете точный 49 63 6e 6e 0d
, будьте осторожны, чтобы не заменить \r на\n. Другими словами, не редактируйте .gitignore в текстовом редакторе, установленном для разделителей строк autoreplace с этим подходом.
Примечание. Простой Игнорировать Icon?
удобен и достаточен для большинства случаев использования. Закройте и перезапустите SourceTree, чтобы увидеть, как изменения влияют. macOS git
по умолчанию нечувствителен к регистру.