Как исправить: сбой git push: файл ‘app.config’ и файл ‘App.config’, нажатый, отличаются в случае

#git

#git

Вопрос:

Я сделал git svn clone первый (репозиторий SVN огромен!), Что привело к локальному репозиторию git (я удалил содержимое svn (например, .git / svn и .git / config)).

Теперь я хотел отправить его в git, размещенный в Visual Studio, и я получаю эту ошибку: удаленная распаковка не удалась: ошибка Объект дерева 0db6571b0a0437f867b536f4b41810edaaa41f0c был отклонен: файл ‘app.config’ и файл ‘App.config’, отправленные в регистр, отличаются. Вы должны удалить или переименовать один из них.

Это полный дамп из терминала:

 $ git push -u origin --all
Username for 'https://<private>.visualstudio.com': frank
Password for 'https://frank@<private>.visualstudio.com': 
Counting objects: 395082, done.
Compressing objects: 100% (97018/97018), done.
Writing objects: 100% (395082/395082), 2.29 GiB | 58.26 MiB/s, done.
Total 395082 (delta 279171), reused 395082 (delta 279171)
error: remote unpack failed: error The tree object 0db6571b0a0437f867b536f4b41810edaaa41f0c was rejected: The file 'app.config' and the file 'App.config' pushed differ in case. You must remove or rename one of them.
To https://<private>.visualstudio.com/<private>/_git/<private>
 ! [remote rejected]       master -> master (The tree object 0db6571b0a0437f867b536f4b41810edaaa41f0c was rejected: The file 'app.config' and the file 'App.config' pushed differ in case. You must remove or rename one of them.)
error: failed to push some refs to 'https://<private>.visualstudio.com/<private>/_git/<private>'
  

Я не уверен, что это за App.config, и я также не уверен, находятся ли [Aa] pp.config.config внутри старых коммитов.

Главный вопрос:

  • Как мне объединить все это репозиторий?

«Дополнительные» вопросы:

  • Как мне найти этот конкретный файл?
  • Как мне переименовать файл в более старой фиксации?
  • Могу ли я игнорировать этот файл в целом?

Ответ №1:

Я смог решить это двумя способами, оба работают независимо:

Метод первый:

Сначала установите ‘git-extras’.

Затем определите неправильный файл, проверив объект дерева с помощью:

git ls-tree -r --long --full-tree 0db6571b0a0437f867b536f4b41810edaaa41f0c

После этого используйте git obliterate из git extras:

git obliterate path/to/App.config

Метод второй:

Я использовал Git Azure DevOps в качестве цели. У этого, по-видимому, есть некоторые секретные настройки 😉 Отключение этих параметров тоже заставило все это работать:

введите описание изображения здесь

Комментарии:

1. Просто чтобы прокомментировать, что вам не следует отключать этот параметр, если вы не хотите, чтобы произошло следующее: в операционных системах, которые не чувствительны к регистру, таких как Windows, две папки с одинаковыми именами с различиями только в прописных буквах, из-за этого создадут два разных запроса на извлечение в одной и той же ветке.

Ответ №2:

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

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

Также есть команда git mv [filename], если вам нужно конкретно изменить оболочку файла для git.

Комментарии:

1. Как мне найти этот файл? У меня сотни App.config. Я изучу git mv

2. Ну, это должно быть в той же папке, что и друг с другом, если бы файлы были в разных папках, вы бы не получили это сообщение. Поэтому я бы начал с поиска имен этих файлов, чтобы выяснить, где дублирование, чтобы найти правильные файлы для просмотра.

3. Я напишу сценарий для этого завтра. Но мое внутреннее ощущение говорит, что он находится в старом коммите, а не в текущем каталоге.

4. Мне будет интересно посмотреть, что получится.

5. Файл находится в более старой фиксации, а не в текущей версии.