O git não diferencia maiúsculas de minúsculas?

96

No primeiro compromisso do meu parcial chamado _Electronicsfoi escrito começando com letras maiúsculas, depois mudei para _electronics.

Git no cygwin ignorou o caso após comprometer o novo nome, então eu mudei o nome manualmente no repositório de destino.

Agora às vezes muda a _electronicsparcial confirmada para _Electronics.

O que eu fiz errado?

JAkk
fonte
9
Qual sistema operacional você está usando?
Keith Thompson
10
Qual sistema de arquivos você está usando?
Andrew Marshall
Windows com cygwin. Meu servidor executa o Ubuntu Linux. Não conheço o sistema de arquivos, acho ext3 ou ext2 - meu provedor configurou a instalação mínima.
JAkk
Você não está feliz que o Windows decidiu não diferenciar maiúsculas de minúsculas?
Cascabel
4
O Windows não faz distinção entre maiúsculas e minúsculas, mas às vezes (hoje com mais frequência) preserva maiúsculas e minúsculas .
Arafangion

Respostas:

73

Isso será visto como 2 coisas diferentes, mas causará problemas em um sistema que não diferencia maiúsculas de minúsculas. Se for este o caso, certifique-se de que está preenchendo tabulação de todos os caminhos ou nomes de arquivo. Além disso, para alterar o nome de algo nesse caso, faça o seguinte:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Esta é uma maneira explícita de fazer alterações, submetendo-os e, em seguida, recolhendo os commits. Uma maneira mais rápida de fazer isso é manipular o índice e a pasta de trabalho em um:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Isso está relacionado ao ajuste de nomes de diretório também: git mv e apenas muda a caixa do diretório

Adam Dymitruk
fonte
parece que estava certo (exceto que eu estava mudando de letras maiúsculas para minúsculas)
JAkk
Eu dei uma espiada nele, enquanto eu estiver acostumado com o cygwin, é apenas mais confortável usar o cygwin - obrigado pela dica
JAkk
Você pode apenas fazer git mv file.txt File.txt. Não tenho certeza se este é um novo recurso do git.
Phil
107

Vai depender do core.ignorecasevalor de configuração, que é definido como falso em sistemas de arquivos com distinção entre maiúsculas e minúsculas e verdadeiro em msysgit no Windows.

core.ignorecase

Se verdadeiro, esta opção ativa várias soluções alternativas para permitir que o git funcione melhor em sistemas de arquivos que não diferenciam maiúsculas de minúsculas, como o FAT. Por exemplo, se uma listagem de diretório encontra "makefile" quando o git espera "Makefile", o git assumirá que é realmente o mesmo arquivo e continuará a lembrá-lo como "Makefile".

O padrão é false, exceto git-clone (1) ou git-init (1) irá testar e definir core.ignorecase true se apropriado quando o repositório for criado.

Mais detalhes nesta resposta a Alterando a capitalização de nomes de arquivos no Git .

manojlds
fonte
79
Esta é a resposta correta imo. No futuro, use git config --unset-all core.ignorecase && git config --system core.ignorecase falsecom sudo.
Znarkus
2
idem para James, @Znarkus identificou a solução para este problema no OS X, obrigado!
Craig Nakamoto
1
@Znarkus também funciona no Windows. Lindo.
orlade
9
@Znarkus, o problema de fazer isso no OSX é que quando você renomeia um arquivo por meio do localizador, e apenas muda a caixa, o git verá a versão renomeada como um arquivo completamente novo, mas não gera um "delete" correspondente ação para a versão antiga do arquivo. Portanto, se você enviar commit e push para o github, o github terá o arquivo com o nome antigo e o novo, mas o seu sistema local terá apenas o novo arquivo, e o git não fará ideia.
ivanreese
2
@spiralganglion Para web dev no OSX, realmente recomendo a criação de uma partição que diferencia maiúsculas de minúsculas e depois monte-a como seu diretório www.
Znarkus
23

Isso é muito mais fácil:

git mv Electronics electronics -f
git commit -m "That was easy!"
Arnoud
fonte
1
Você tentou fazer isso em um sistema de arquivos que não diferencia maiúsculas de minúsculas?
Edward Thomson
1
Inicialmente li isso como o autor do pôster original tentando renomear uma pasta, não um arquivo, alterando maiúsculas e minúsculas. Agora que reli isso, não está claro. Na verdade, mv -ffuncionará para um arquivo.
Edward Thomson
21
git config --system core.ignorecase false
Cemo
fonte
0

No meu cenário, eu tinha duas pastas testse Testselas eram mostradas como duas pastas separadas no Github, mas uma única Testspasta no Windows. Meu objetivo era combinar os dois em tests.

Usei a seguinte abordagem:

  1. Criar uma nova pasta temp
  2. Copie todo o conteúdo de Testsparatemp
  3. Excluir Tests
  4. executar git rm Tests -r
  5. Renomear tempparatests
Jeroen Vannevel
fonte
0

Tentei resolver o problema e foi bem-sucedido no Windows10

Vamos supor que haja duas pastas no bitbucket TEST e test, mas quando clono o repo no disco, ele cria apenas TEST e quero manter o teste como uma única pasta no git que contém todos os arquivos.

Vou precisar executar os seguintes comandos na linha de comando git mv TEST test1 -f git mv text1 test -f git commit -m "renomeando ..." git push

Agora você verá que a hierarquia de pastas foi corrigida no bitbucket.

Nitesh Goyal
fonte