Partilhar via


Compatibilidade entre plataformas Git

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

Os sistemas de arquivos Windows, macOS e Linux têm limitações e comportamentos que uma ou mais das outras plataformas nem sempre suportam. Como o Git é uma tecnologia multiplataforma, é possível que um desenvolvedor em uma plataforma faça uma confirmação que contenha arquivos ou pastas com nomes incompatíveis com o sistema de arquivos de outra plataforma. Proteger seu repositório dessa incompatibilidade é importante porque os desenvolvedores em outras plataformas podem, sem saber, verificar uma confirmação que corrompe seus diretórios de trabalho devido a nomes de arquivos ou caminhos sem suporte.

O Azure Repos oferece três configurações de compatibilidade entre plataformas que ajudam a proteger seu repositório contra pessoas que enviam confirmações incompatíveis com uma ou mais plataformas. Essas configurações estão relacionadas às seguintes limitações com sistemas de arquivos:

  • Sensível às maiúsculas e minúsculas
  • Restrições em nomes de arquivos e pastas
  • Restrições de comprimento de caminho

Sensível às maiúsculas e minúsculas

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 Linux diferencia maiúsculas de minúsculas. O Git foi construído originalmente para ser o sistema de controle de versão do kernel Linux, por isso é sensível a maiúsculas e minúsculas.

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

Nomes de ficheiros e pastas

No Linux, verificar um repositório Git que contém File.txt e file.txt não é problema. Esses são nomes de arquivo distintos. No Windows e no macOS, o check-out de ambos os arquivos faz com que o segundo substitua o primeiro. Se duas pastas diferirem apenas por maiúsculas e minúsculas, seu conteúdo será misturado em sistemas de arquivos que não diferenciam maiúsculas de minúsculas.

Há duas maneiras de corrigir um repositório com conflitos de maiúsculas e minúsculas:

  • Confira o repositório em um ambiente que diferencia maiúsculas de minúsculas. Renomeie arquivos e pastas para que não entrem mais em conflito e, em seguida, envie essas alterações para o repositório. O Subsistema Windows para Linux é um desses ambientes.
  • Use o comando git mv -f <conflicting name> <non-conflicting name> para cada conflito. Tenha cuidado para usar maiúsculas exatas em ambos os nomes de arquivo.

É bom evitar criar conflitos de casos 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 o preenchimento de guias para confirmar arquivos também ajudará. Como tanto o Windows quanto o macOS preservam ocorrências, essas abordagens garantem que os internos do Git vejam exatamente a mesma caixa que o sistema de arquivos usa.

Nomes de ramificações e tags

Você pode criar duas ramificações ou tags (conhecidas como refs) que diferem apenas em maiúsculas. Os internos do Git, juntamente com os Serviços de DevOps do Azure e o Servidor de DevOps do Azure, os tratam como duas refs separadas. Na máquina de um usuário, o Git usa o sistema de arquivos para armazenar refs. Buscas e outras operações começam a falhar por causa da ambiguidade.

Um pequeno arquivo representa cada ref. Se um nome ref contiver caracteres de barra (/), as pastas representam as partes antes da barra final.

Uma maneira simples de evitar problemas é sempre usar nomes de ramificações e tags em minúsculas. Se você já criou duas ramificações ou marcas com esse problema, poderá corrigi-las na interface do usuário da Web do Azure Repos.

Para corrigir nomes de filiais:

  1. Na página de ramificações, vá para a confirmação relacionada.
  2. No menu de atalho, selecione Nova ramificação.
  3. Dê à ramificação um novo nome que não tenha um conflito de maiúsculas e minúsculas.
  4. Volte à página para ramificações e exclua a ramificação conflitante.

Para corrigir nomes de tags:

  1. Na página de tags, vá para a confirmação marcada.
  2. No menu de atalho, selecione Criar tag.
  3. Dê à tag um novo nome que não tenha um conflito de maiúsculas e minúsculas.
  4. Retorne à página para tags e exclua a tag conflitante.

Restrições de caminho e nome de arquivo

Os sistemas operacionais Windows, macOS e Linux têm várias limitações para nomes de arquivos e caminhos. Essas limitações restringem o que você pode nomear arquivos ou pastas, o que pode criar problemas para equipes que usam o Git em várias plataformas.

Por exemplo, imagine que um desenvolvedor em uma plataforma confirma uma alteração no repositório compartilhado que contém um nome de arquivo ou comprimento de caminho inválido em outra plataforma. Mais tarde, outro desenvolvedor tenta verificar essa confirmação em uma plataforma onde o conteúdo é inválido. Essa situação resulta em um diretório de trabalho corrompido que tem o potencial de danificar seu repositório com dados corrompidos.

O Azure Repos oferece configurações de repositório que bloqueiam pushes contendo confirmações que violam uma ou mais das limitações a seguir.

Tabela de referência para nomes de arquivo e caminhos

Restrições/Plataformas Windows macOS Linux
Restrições de nome de arquivo Nomes de ficheiros reservados: CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9

Nomes de ficheiros reservados seguidos de .

Caracteres reservados: \ / : * ? " < >

Nomes de arquivo que terminam em ou espaço em . branco
Nomes de arquivo que terminam em / Nomes de arquivo que terminam em /
Restrições de comprimento de caminho Os caminhos no Windows têm um comprimento máximo de 260 caracteres (incluindo um terminador nulo).

Para diretórios com .NET, o nome de arquivo totalmente qualificado deve ter menos de 260 caracteres e o nome do diretório deve ter menos de 248 caracteres.
Os nomes dos ficheiros estão limitados a 255 caracteres.

Os máximos de caminho no HFS+ são documentados como ilimitados, embora algumas versões do macOS limitem os caminhos a 1.016 caracteres. Alguns sistemas de arquivos suportam 1.016 como o caminho máximo.
Os nomes dos ficheiros estão limitados a 255 caracteres.

O caminho máximo é 4096.

Suporte de codificação

Nota

O suporte de codificação que esta seção descreve é suportado no Azure DevOps Server 2019.1 e posterior.

A Microsoft adicionou suporte para codificação UTF-16 e UTF-32 através do ponto de extremidade web push. Este suporte significa que preservamos o tipo de codificação, para que não tenha de reescrever os seus ficheiros como UTF-8. Você também verá um aviso quando tentar salvar um arquivo que não está codificado em UTF pela Web (que suporta apenas codificação UTF).

A captura de tela a seguir mostra um exemplo da caixa de diálogo que aparece quando você introduz alterações de codificação usando um envio por push da Web.

Captura de tela que mostra a caixa de diálogo sobre a introdução de alterações de codificação por meio de um envio por push da Web.