Eu mudo a capitalização de um diretório e o Git não parece entender


139

Estou desenvolvendo um projeto no OS X Lion que está sob controle de versão do Git. Eu tinha esses diretórios em minúsculas e depois os coloquei em maiúscula (por exemplo, emailaddresses => EmailAddresses), mas o Git não parece reconhecer a alteração. Ele ainda acha que os diretórios estão em minúsculas quando eu executo git ls-filese outros comandos.

Isso é inofensivo ou devo fazer outra coisa para que o Git perceba essa mudança?



Isso criou confusão para mim por 2 dias. Agora eu entendi. Thnx para esta pergunta
— Número945

Respostas:


199

Você provavelmente está usando HFS + sem distinção entre maiúsculas e minúsculas. Normalmente, trabalho dessa maneira assim:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Esse é o mesmo problema que tenho e é isso que faço.
— Fernferret 01/08

3
Teve o mesmo problema com a ferramenta Github for Windows. Novamente, a solução acima soluciona o problema de maneira agradável: renomeie para um arquivo temporário no Windows Exploer e, depois de confirmar, renomeie para o nome final com o caso correto.
— 25412 Jason

9
Ou fazê-lo em um comando: git mv --force somename SomeName (de stackoverflow.com/a/16071375/217866 )
— jackocnr

1
Para que as alterações sejam refletidas no repositório remoto, você também precisa git push origin master. Se o git se recusar a atualizar o controle remoto, talvez seja necessário adicionar um arquivo fictício (por exemplo touch stam) e executar o push. Seguido por uma exclusão subsequente do stam e empurre novamente.
— Rahav

2
Uma coisa a observar é que você precisa estar na pasta em que o arquivo está para que isso funcione. Não era óbvio para mim no começo e eu continuava recebendo >>> fonte ruim, source = somename, destination = tmpname <<< porque estava tentando executar o comando a partir da raiz do repositório.
— Parth Tamane

280

Você pode dizer ao git para levar em conta o caso executando

git config core.ignorecase false


4
Resposta realmente ótima se você já alterou os nomes dos arquivos sem usar o git mv --force ou algum outro script CL. Obrigado!
— MeanMatt

4
Esta é a resposta superior, pois eu não me sentia particularmente como git mv'ing 200 arquivos renomeados manualmente!
— Adam Reis

1
Concordou que essa deve ser a resposta principal. Obrigado.
— HomerPlata

1
por alguma razão duplicou todos os arquivos, agora eu tenho as versões originais e as com maiúsculas alteradas ...
— Salatiel 01/04

1
@ Salatiel Eu acho que os duplica quando você já está acompanhando o arquivo.
— Iggy

36

Como git mv no Mac Case-Sensitively

Isso está acontecendo porque o Mac OS X implementa os recursos de preservação e insensibilidade de maiúsculas e minúsculas, destinados a ajudá-lo.

Embora as sugestões de renomeação dupla na outra resposta funcionem, eu recomendo o uso de '--force' para obter um resultado de práticas recomendadas:

$ git mv --force somename SomeName


Nota: se você tentar sem a opção force, o git vomitará sobre você assim:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

No exemplo acima, o comando git falha e nenhum arquivo é alterado no sistema de arquivos ou no índice do git.


Após o primeiro comando, eu recebo fatal: not under version control.
— 2540625

Esse erro fatal significa que você não possui um repositório GIT nesse local. gitOs comandos funcionam apenas em diretórios com repositórios GIT.
— David Manpearl

Mas eu estava em um subdiretório do meu repositório Git ... No final, resolvi isso através da resposta de Taran , BTW. Obrigado.
— 2540625 09/09/2015

19

Tente alterar a opção core.ignorecase do git config para false no seu arquivo .gitconfig.


4
or writegit config core.ignorecase false
— iforgotmypassword

2
@iforgotmypassword = você deve ter respondido a isso - eu teria votado para você na verdade
— Abdeali Chandanwala

4

As etapas a seguir me ajudaram a resolver o problema:

  1. Renomeie a pasta para temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Preparar e confirmar:

    git add .
    git commit -m "Temp"
    
  3. Renomeie a temppasta para sua escolha:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Concluído - Agora você pode pressionar.


1

Se você fizer isso git mv AAA aaaou git mv -f AAA aaanão, isso não funcionará e você terá um erro fatal: renaming 'AAA' failed: Invalid argument.

Como AAAe aaasão UMA ÚNICA pasta / arquivo em sistemas de arquivos que não diferenciam maiúsculas de minúsculas, mova AAApara aaasignifica mover AAAcomo aaa/AAA.

Então você deveria fazer

git mv AAA aaa.1
git mv aaa.1 aaa

Espero que seja útil para você.


1

O motivo disso é que o sistema operacional baseado no LINUX ou o macOS ignoram maiúsculas de minúsculas para o nome do arquivo / pasta. Precisamos resolver esse problema seguindo as etapas abaixo

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

Nenhuma dessas soluções funcionou para mim. O SourceTree estava sempre criando meu ramo com um caso diferente do que eu queria. Então, como eu resolvi isso:

1 - Veja seus arquivos git no localizador. Você pode fazer isso digitando isso no terminal:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Reinicie o localizador e vá para o diretório do projeto

3 - Agora basta alterar o nome da pasta, digamos de Recurso para Recurso. E lá vai você.



0

Eu tive o mesmo problema e use a solução abaixo. Eu uso isso para renomear lotes, diretórios e arquivos, etc:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Conforme detalhado aqui.


0

Nada disso realmente me ajudou, eu ainda estava com o git me dizendo para esconder minhas alterações, porque minha situação era que minha pasta local estava em maiúscula, mas o remoto não, e minha ramificação estava atrasada e não podia mais puxar por causa das diferenças de capitalização de arquivo na estrutura da pasta.

A única maneira de corrigir isso era excluir minha filial local e verificar o controle remoto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.