Подтвердить что ты не робот

Удалить странный файл "Iconr" из репозитория

В моем репозитории git у меня есть странный файл в промежуточной области, который отказывается быть возвращенным, удаленным, совершенным - в основном я не могу заставить его уйти..

В течение нескольких лет в папке должен храниться какой-то древний файл OS 9.

Несколько дней назад я удалил файл в файловой системе, так что теперь git отслеживает удаление Iconr.

Однако он застрял там.

Ошибка, которую я получаю через SourceTree (мой клиент git UI),

fatal: папка pathspec/Iconr 'не соответствует никаким файлам

Любая идея, как сделать git полностью забыть об этом файле?

4b9b3361

Ответ 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?" )

Другая проблема заключается в том, что этот файл не отслеживается вообще в вашей текущей ветке, но отслеживается в другой ветке. См. ответ, чтобы проверить, так ли это.

Ответ 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 по умолчанию нечувствителен к регистру.