Diferenciação de maiúsculas e minúsculas do Git

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Os sistemas de arquivos windows e macOS não diferenciam maiúsculas de minúsculas (mas preservam maiúsculas e minúsculas) por padrão. A maioria dos sistemas de arquivos do Linux diferencia maiúsculas de minúsculas. O Git foi criado originalmente para ser o sistema de controle de versão do kernel do Linux, portanto, sem surpresas, diferencia maiúsculas de minúsculas.

Embora muitos dos problemas com um sistema operacional que não diferencia maiúsculas de minúsculas tenham sido resolvidos no Git para Windows, algumas peculiaridades permanecem.

Nomes de arquivos e pastas

No Linux, não há problema em verificar um Repositório do Git que contém "File.txt" e "file.txt". Esses são nomes de arquivo distintos. No Windows e no macOS, o check-out de ambos os arquivos resultará na substituição do segundo. Se duas pastas forem diferentes apenas quanto às maiúsculas e minúsculas, seu conteúdo acabará misturado em sistemas de arquivos que não diferenciam maiúsculas de minúsculas.

Corrigindo conflitos de maiúsculas e minúsculas

Uma maneira de corrigir um repositório com esse problema é fazer seu check-out em um ambiente que diferencia maiúsculas de minúsculas. Renomeie arquivos e pastas para que eles não entrem mais em conflito e, em seguida, envie por push essas alterações para o repositório. O Subsistema do Windows para Linux é um desses ambientes. Outra abordagem é usar o comando git mv -f <conflicting name> <non-conflicting name> para cada conflito, tendo o cuidado de usar o mesmo padrão de maiúsculas e minúsculas em ambos os nomes de arquivo.

Evitando conflitos de maiúsculas e minúsculas

É bom evitar criar essa situação em primeiro lugar. O Azure Repos oferece uma configuração de aplicação de maiúsculas e minúsculas para evitar pushes que levariam a essa situação. Para os desenvolvedores, adotar o hábito de usar a conclusão de tabulação para confirmar arquivos também ajudará. Como o Windows e o macOS preservam maiúsculas e minúsculas, isso garantirá que os internos do Git vejam exatamente o mesmo uso de maiúsculas e minúsculas do sistema de arquivos.

Nomes de branch e marca

Você pode criar dois branches ou marcas (conhecidas como 'refs') que diferem apenas no uso de maiúsculas e minúsculas. Os internos do Git, bem como o Azure DevOps Services/TFS, os tratarão como dois refs separados. No computador de um usuário, o Git usa o sistema de arquivos para armazenar refs. Buscas e outras operações começam a falhar devido à ambiguidade. Cada ref é representado por um arquivo pequeno e, se um nome de referência contiver caracteres /, as partes antes do / final serão representadas por pastas.

Uma maneira simples de evitar problemas é sempre usar nomes de branch e marca em letras minúsculas. Se você já tiver criado dois branches ou marcas com esse problema, poderá corrigi-lo na interface do usuário da Web do Azure Repos.

Corrigindo nomes de branch

Na página branches, navegue até a confirmação relacionada. No menu de contexto, escolha "Novo branch". Dê ao branch um novo nome sem conflitos de maiúsculas e minúsculas. Retorne à página de branches e exclua o branch conflitante.

Corrigindo nomes de marca

As etapas para corrigir um nome de marca são semelhantes às ramificações. Na página de marcas, navegue até a confirmação marcada. No menu de contexto, escolha "Criar marca". Dê à marca um novo nome sem conflitos de maiúsculas e minúsculas. Retorne à página de marcas e exclua a marca conflitante.