Há alguns arquivos em nossa base de código controlada por git que eu gostaria de renomear. Especificamente, eu só quero mudar o caso do arquivo, para que sourceCode.java
se torne SourceCode.java
, por exemplo. O problema: estou em uma caixa do Windows, e o sistema de arquivos acha que esses são o mesmo nome de arquivo.
Como faço para que o Windows e o Git reconheçam essa alteração e façam check-in?
git mv
deve funcionar ( stackoverflow.com/a/24979063/6309 ). Mesmo no Windows.Respostas:
Dê uma olhada aqui para obter mais dicas sobre como fazê-lo:
Como fazer o git ignorar mudanças no caso?
Ou:
fonte
git add
dessa pasta recém-renomeada, NÃO COMPROMETIR, alterar o nome da pasta para o que deveria ser ,git add
novamente e depois confirme.Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
Se você estiver em um sistema de arquivos FAT, sua única opção é renomear em dois estágios:
sourceCode.java
paraanything.you.like
anything.you.like
paraSourceCode.java
Na época em que usamos o Perforce, tínhamos exatamente esse problema e essa era a única solução que conseguimos encontrar.
fonte
As etapas a seguir permitiram alterar o caso no Windows:
ignorecase = false
ao[core]
em.git/config
;ignorecase = false
adicionado na primeira etapa.Dessa forma, você tem um único commit que contém a renomeação e facilita a alteração, por exemplo, um diretório inteiro.
fonte
Seja cuidadoso. Fazer isso pode levar a alterações que são impossíveis de mesclar. O Git fica confuso ao mesclar no Windows porque não pode decidir se o nome antigo em maiúsculas e o novo nome em minúsculas são o mesmo arquivo ou não (para o Git eles não são, mas para o sistema de arquivos). Para mesclar, você precisa executar algumas soluções manuais, como excluir os arquivos antes de mesclar.
Consulte Problema de rebase do Git com arquivos com o mesmo nome, mas caso diferente
Não tenho certeza se esse problema é pior do que ter um arquivo com nome não convencional em seu projeto para todo o sempre, mas vale a pena saber se existem muitos usuários com muitos ramos que precisarão ser mesclados eventualmente.
fonte
Na minha opinião, falta uma maneira simples. Você pode fazer isso para um único arquivo, um diretório específico ou mesmo todo o repositório:
Se você deseja afetar também os subdiretórios, use o
-r
sinalizador:fonte
Com o NTFS (ou FAT), um único
git mv
comando não resolve o problema. Esta questão mostra uma técnica que funciona: git mv e apenas muda caso do diretóriofonte