Поделиться через


Конфиденциальность регистра Git

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Файловые системы Windows и macOS не учитывает регистр (но сохраняет регистр) по умолчанию. Большинство файловых систем Linux чувствительны к регистру. Git изначально был создан, чтобы быть системой управления версиями ядра Linux, поэтому неудивительно, что это учитывает регистр.

Хотя многие проблемы с нечувствительной операционной системой регистра были устранены в Git для Windows, некоторые причуды остаются.

Имена файлов и папок

В Linux проверка из репозитория Git, содержащего как File.txt, так и "file.txt", не является проблемой. Это разные имена файлов. В Windows и macOS проверка выходить из обоих файлов приведет ко второму перезаписи первого. Если две папки отличаются только по регистру, их содержимое в конечном итоге будет смешанным в файловых системах без учета регистра.

Устранение конфликтов случаев

Одним из способов устранения этой проблемы является проверка его в среде с учетом регистра. Переименуйте файлы и папки, чтобы они больше не конфликтуют, а затем отправьте эти изменения в репозиторий. подсистема Windows для Linux является одной из таких сред. Другим подходом является использование команды git mv -f <conflicting name> <non-conflicting name> для каждого конфликта, тщательное использование точной буквы в обоих именах файлов.

Предотвращение конфликтов регистров

Это хорошо, чтобы избежать создания этой ситуации в первую очередь. Azure Repos предлагает параметр принудительного применения случаев, чтобы предотвратить отправки, которые привели бы к этой ситуации. Для разработчиков, внедрение привычки использования табуляции для фиксации файлов также поможет. Так как windows и macOS сохраняют регистр, это гарантирует, что внутренние элементы Git видят точно тот же регистр, который использует файловая система.

Имена ветвей и тегов

Вы можете создать две ветви или теги (известные как refs), которые отличаются только в регистре. Внутренние элементы Git, а также Azure DevOps Services/TFS будут рассматриваться как две отдельные ссылки. На компьютере пользователя Git использует файловую систему для хранения ссылок. Получение и другие операции начинаются сбоем из-за неоднозначности. Каждая ссылка представлена небольшим файлом, и если имя ссылки содержит / символы, части до окончательного / представления папок.

Один из простых способов избежать проблем — всегда использовать имена ветвей всех строчных и тегов. Если вы уже создали две ветви или теги с этой проблемой, ее можно исправить в веб-интерфейсе Azure Repos.

Исправление имен ветвей

На странице ветвей перейдите к связанной фиксации. В контекстном меню выберите "Создать ветвь". Присвойте ветви новое имя, которое не имеет конфликта регистра. Вернитесь на страницу ветвей и удалите конфликтующую ветвь.

Исправление имен тегов

Действия по исправлению имени тега похожи на ветви. На странице тегов перейдите к помеченной фиксации. В контекстном меню выберите "Создать тег". Присвойте тегу новое имя, которое не имеет конфликта регистра. Вернитесь на страницу тегов и удалите конфликтующий тег.