Compartilhar via


Confidencialidade de maiúsculas e minúsculas do Git

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Os sistemas de arquivos windows e macOS não diferenciam maiúsculas de minúsculas (mas preservam maiúsculas de 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 linux, portanto, sem surpresas, ele 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 arquivo e pasta

No Linux, verificar um repositório Git que contém "File.txt" e "file.txt" não é problema. São nomes de arquivo distintos. No Windows e no macOS, a verificação de ambos os arquivos resultará na substituição da primeira. Se duas pastas forem diferentes apenas por caso, seu conteúdo acabará misturado em sistemas de arquivos que não diferenciam maiúsculas de minúsculas.

Corrigindo conflitos de casos

Uma maneira de corrigir um repositório com esse problema é fazer check-out em um ambiente que diferencia maiúsculas de minúsculas. Renomeie arquivos e pastas para que eles não entrem em conflito e 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 a capitalização exata em ambos os nomes de arquivo.

Evitando conflitos de casos

É bom evitar criar essa situação em primeiro lugar. O Azure Repos oferece uma configuração de imposiçã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 de minúsculas, isso garantirá que os internos do Git vejam exatamente o mesmo uso do sistema de arquivos.

Nomes de ramificação e marca

Você pode criar duas ramificações ou marcas (conhecidas como 'refs') que diferem apenas na caixa. 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 ref contiver caracteres / , as partes antes da final / serão representadas por pastas.

Uma maneira simples de evitar problemas é sempre usar nomes de ramificação e marcas 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 ramificação

Na página branches, navegue até a confirmação relacionada. No menu de contexto, escolha "Novo branch". Dê ao branch um novo nome que não tenha um conflito 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 a branches. Na página de marcas, navegue até a confirmação marcada. No menu de contexto, escolha "Criar marca". Dê à marca um novo nome que não tenha um conflito de maiúsculas e minúsculas. Retorne à página de marcas e exclua a marca conflitante.