Compartilhar via


Compatibilidade entre plataformas git

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

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

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

  • Diferenciação de maiúsculas e minúsculas
  • Restrições em nomes de arquivo e pasta
  • Restrições de comprimento do caminho

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

Os sistemas de arquivos Windows e macOS são insensíveis a maiúsculas e minúsculas (mas preservam o uso de 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 linux, portanto, diferencia maiúsculas de 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 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 faz com que o segundo substitua o primeiro. Se duas pastas forem diferentes apenas por caso, 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 que tem conflitos de caso:

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

É bom evitar a criação de conflitos de caso desde o início. O Azure Repos oferece uma configuração de imposição de caso para evitar pushes que levariam a essa situação. Para os desenvolvedores, adotar o hábito de usar o autocompletar com a tecla Tab para confirmar arquivos também ajudará. Como tanto o Windows quanto o macOS preservam a caixa de letras, essas abordagens garantem que os mecanismos internos do Git interajam exatamente com as maiúsculas e minúsculas conforme usados pelo sistema de arquivos.

Nomes de ramificação e tags

Você pode criar dois branches ou marcas ( conhecidas como refs) que diferem apenas no casing. Os componentes internos do Git, juntamente com o Azure DevOps Services e o Azure DevOps Server, os consideram como duas referências separadas. No computador de um usuário, o Git usa o sistema de arquivos para armazenar referências (refs). Buscas e outras operações começam a falhar devido à ambiguidade.

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

Uma maneira simples de evitar problemas é sempre usar nomes de branch e tag em letras minúsculas. Se você já criou duas ramificações ou marcas que têm esse problema, poderá corrigi-las na interface web do Azure Repos.

Para corrigir nomes de ramo:

  1. Na página de branches, vá para o commit relacionado.
  2. No menu de atalho, selecione Novo branch.
  3. Dê ao branch um novo nome que não tenha um conflito de capitalização.
  4. Retorne à página de ramificações e exclua a ramificação conflitante.

Para corrigir nomes de etiquetas:

  1. Na página de tags, vá para o commit marcado.
  2. No menu de atalho, selecione Criar marca.
  3. Dê à etiqueta um novo nome que não tenha um conflito de letras maiúsculas/minúsculas.
  4. Retorne à página de tags e delete a tag conflitante.

Restrições de nome de caminho e arquivo

Os sistemas operacionais Windows, macOS e Linux têm várias limitações para nomes de arquivo e caminhos. Essas limitações restringem o nome de 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 confirme uma alteração no repositório compartilhado que contém um nome de arquivo ou comprimento de caminho inválido em outra plataforma. Posteriormente, outro desenvolvedor tenta verificar essa confirmação em uma plataforma em que 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 que contêm 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 arquivo reservados: CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9

Nomes de arquivo reservados seguidos por .

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 do 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 do arquivo totalmente qualificado deve ter menos de 260 caracteres e o nome do diretório deve ter menos de 248 caracteres.
Os nomes de arquivo são limitados a 255 caracteres.

Os máximos de caminho no HFS+ são documentados como ilimitados, embora algumas versões do macOS limitem caminhos em 1.016 caracteres. Alguns sistemas de arquivos dão suporte a 1,016 como o comprimento máximo do caminho.
Os nomes de arquivo são limitados a 255 caracteres.

O comprimento máximo do caminho é 4096.

Suporte à codificação

A Microsoft adicionou suporte para codificação UTF-16 e UTF-32 por meio do ponto de extremidade de push web. Esse suporte significa que preservamos o tipo de codificação para que você não precise reescrever seus arquivos como UTF-8. Você também verá um aviso ao tentar salvar um arquivo que não é codificado em UTF por meio da Web (que dá suporte 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 push da Web.

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