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.