Como renomear um arquivo no git que difere apenas por maiúsculas e minúsculas?

14

No meu projeto git (Xcode), cometi um nome de arquivo com maiúsculas e minúsculas. Agora eu tentei renomeá-lo, mas quando me comprometo, recebo:

fatal: não adicionará o alias de arquivo 'MyProject / MyFile.h' ('MyProject / MyFilE.h' já existe no índice)

Tenho certeza de que isso ocorre porque o git não costuma ser executado em um sistema de arquivos que preserva e não diferencia maiúsculas de minúsculas, como o HFS +. Mas como faço para contornar isso?

Tentei renomear os dois arquivos para outra coisa e confirmei isso e, em seguida, renomeie-os novamente para o que eu quero, mas ele ainda falha (com a mesma mensagem de erro).

Ken
fonte

Respostas:

21

Conforme solicitado e respondido no stackoverflow , há uma maneira mais fácil de fazer isso que não envolve a criação de um novo sistema de arquivos em um arquivo de imagem de disco:

Afaste o arquivo existente, confirme essa mudança e, em seguida, mova-o novamente usando o caso que você deseja que ele mantenha e confirme. Feito.

Exemplo:

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"
mspasov
fonte
no intuito de evitar a podridão do link, geralmente solicitamos que você copie as partes relevantes da resposta por trás do link para o corpo da resposta.
Ian C.
Obrigado @ ian-c. Eu esperava que essa regra não se aplicasse aos links dentro da família stackexchange.
18412 mspasov
1
Sim, eu entendo o que você está dizendo, mas a consistência é boa.
Ian C.
Esquisito. Eu estava certo de ter tentado isso, mas hoje funciona. Obrigado.
20912 Ken
2

Ainda não encontrei uma maneira de corrigir isso diretamente em um sistema de arquivos que não diferencia maiúsculas de minúsculas; você precisa de um sistema de arquivos que diferencia maiúsculas de minúsculas.

Felizmente, o Mac OS X tem um bom suporte de montagem de disco virtual, para que você possa obter (fazer) um sistema de arquivos (temporário) sensível ao caso de forma rápida e fácil em seu computador.

Abra o Utilitário de Disco, crie uma Nova Imagem e defina o campo "Formato" para uma das versões que diferenciam maiúsculas de minúsculas do "Mac OS Extended". Além disso, certifique-se de torná-lo grande o suficiente para o seu repositório.

Monte seu novo disco, verifique o repositório git nele, verifique se o arquivo nomeado corretamente tem o conteúdo correto e exclua o outro. Confirme e envie suas alterações e, em seguida, você pode desmontar a imagem do disco e excluí-la.

Se você não possui um servidor remoto para clonar (ou seja, você está executando um repositório git localmente no seu disco rígido), lembre-se de que pode clonar diretamente do outro repositório git no seu disco rígido.

drfrogsplat
fonte
1
Isso é muito trabalhoso. Você pode fazer isso sem precisar girar um novo sistema de arquivos em um arquivo de imagem de disco.
Ian C.
1

Etapa 1 : renomeie o arquivo com um nome mais diferente (do que apenas o caso das letras). Escolha um nome aleatório diferente do nome atual e do nome que você deseja atribuir.

Etapa 2 : confirmar esse arquivo pela GUI (Xcode) ou pela CLI (Terminal)

Etapa 3 : renomeie o arquivo como você queria renomeá-lo em primeiro lugar. Portanto, agora também haverá mais diferenças do que apenas o caso com o nome anterior.

Etapa 4 : confirme o arquivo renomeado novamente.

Não são necessários truques de mágica. E você pode optar por confirmar por GUI ou CLI.

Bartel De Brabandere
fonte
0

Eu uso o sourcetree. Sem usar a CLI, há uma etapa fácil para fazer isso. renomeie o arquivo para outro nome (por exemplo, Index.php para Index_old.php), em seguida, confirme e pressione .. novamente altere o nome para o nome desejado (index.php), depois confirme e envie.

Hemantha
fonte