Eu mudei um nome de alguns arquivos de-capitalizar a primeira letra, como em Name.jpg
a name.jpg
. O Git não reconhece essas alterações e eu tive que excluir os arquivos e enviá-los novamente. Existe uma maneira de o Git fazer distinção entre maiúsculas e minúsculas ao verificar alterações nos nomes dos arquivos? Eu não fiz nenhuma alteração no próprio arquivo.
git
case-sensitive
git-commit
git-config
Gil Shulman
fonte
fonte
git mv
funciona.Respostas:
Você pode usar o git mv :
fonte
-f
sinalizador.-f
interruptor com a mais recente git (2,18) senão você poderá obter ofatal: destination exists
erro.Git tem uma configuração que diz que se deve ser sensível a maiúsculas ou minúsculas:
core.ignorecase
. Para dizer ao Git que faz distinção entre maiúsculas e minúsculas, basta definir esta configuração comofalse
:Documentação
A partir da
git config
documentação :Sistemas de arquivos que não diferenciam maiúsculas de minúsculas
Os dois sistemas operacionais mais populares que possuem sistemas de arquivos que não diferenciam maiúsculas de minúsculas são
fonte
false
em um sistema de arquivos que não diferencia maiúsculas de minúsculas é uma má idéia . Isso não é necessariamente óbvio. Por exemplo, eu apenas tentei isso no meu Mac, pensando que isso resolveria meus problemas, depois renomeei um arquivo deproductPageCtrl.js
paraProductPageCtrl.js
.git status
viu um novo arquivo chamado,ProductPageCtrl.js
mas não achou queproductPageCtrl.js
tivesse sido excluído. Quando adicionei os novos arquivos, confirmei e enviei para o GitHub, o repositório do GitHub agora continha os dois arquivos, embora o meu (supostamente atualizado) repositório local tivesse apenas um.git mv
para mover o arquivo e ver como o git o gerencia. Se você mover o arquivo sem o git, não há nada que o git possa fazer, pois o sistema de arquivos não está dizendo a verdade para o git. Este é um problema do ntfs / fat / hfs e thelike e não do git / linux.Usando o SourceTree, consegui fazer tudo isso a partir da interface do usuário
FILE.ext
parawhatever.ext
whatever.ext
parafile.ext
É um pouco entediante, mas se você precisar fazer apenas alguns arquivos, é muito rápido
fonte
Isto é o que eu fiz no OS X:
Duas etapas, porque, caso contrário, recebi o erro "arquivo existe". Talvez isso possa ser feito em uma etapa adicionando
--cached
ou algo assim.fonte
-f
(força) é a bandeira que você está procurando-f
bandeira não ajuda caso o FS subjacente não faça distinção entre maiúsculas e minúsculas. No entanto, a solução de dois passos funcionou para mim-f
funcionou! Obrigado pela dica-f
bandeira.git -c "core.ignorecase=false" add .
considerará os arquivos cujo caso foi alterado para confirmação.Às vezes, é útil alterar temporariamente a distinção entre maiúsculas e minúsculas do Git:
Método # 1 - Altere a distinção entre maiúsculas e minúsculas para um único comando:
git -c core.ignorecase=true checkout mybranch
para desativar a distinção entre maiúsculas e minúsculas para um únicocheckout
comando. Ou, mais geralmente: . (Agradeço ao VonC por sugerir isso nos comentários.)git -c core.ignorecase=
<<true or false>>
<<command>>
Método # 2 - Altere a distinção entre maiúsculas e minúsculas para vários comandos:
Para alterar a configuração por mais tempo (por exemplo, se vários comandos precisarem ser executados antes de alterá-la novamente):
git config core.ignorecase
(isso retorna a configuração atual, por exemplofalse
).git config core.ignorecase
<<true or false>>
- defina a nova configuração desejada.git config core.ignorecase
<<false or true>>
- defina o valor de configuração de volta à sua configuração anterior.fonte
git -c core.ignorecase=<true or false> checkout <<branch>>
? Nada para redefinir depois.No OSX, para evitar esse problema e outros problemas no desenvolvimento de um sistema de arquivos que não diferenciam maiúsculas de minúsculas, você pode usar o Disk Utility para criar uma unidade / imagem de disco virtual que diferencia maiúsculas de minúsculas .
Execute o utilitário de disco, crie uma nova imagem de disco e use as seguintes configurações (ou altere conforme desejar, mas mantenha a distinção entre maiúsculas e minúsculas):
Certifique-se de informar ao git que agora está em um FS que diferencia maiúsculas de minúsculas:
fonte
Tentei as seguintes soluções com outras respostas e elas não funcionaram:
git mv filename
git rm -f filename
Se o seu repositório estiver hospedado remotamente (GitHub, GitLab, BitBucket), você poderá renomear o arquivo na origem (GitHub.com) e forçar a renomeação do arquivo de maneira descendente.
As instruções abaixo pertencem ao GitHub, no entanto, a idéia geral por trás delas deve se aplicar a qualquer plataforma de hospedagem de repositório remoto. Lembre-se do tipo de arquivo que você está tentando renomear é importante, seja um tipo de arquivo que o GitHub considere editável (código, texto, etc.) ou não editável (imagem, binário, etc.) no navegador.
branchname
botão de opção "Confirmar diretamente na ramificação" está selecionado e clique no botão "Confirmar alterações"branchname
botão de opção "Confirmar diretamente na ramificação" está selecionado e clique no botão "Confirmar alterações"fonte
Semelhante à resposta de @ Sijmen, foi o que funcionou para mim no OSX ao renomear um diretório (inspirado nesta resposta de outro post):
Simplesmente
git mv CSS css
deu o erro de argumento inválido:fatal: renaming '/static/CSS' failed: Invalid argument
talvez porque o sistema de arquivos do OSX não diferencia maiúsculas de minúsculasps BTW, se você estiver usando o Django, o collectstatic também não reconheceria a diferença entre maiúsculas e minúsculas e você teria que fazer o acima, manualmente, também no diretório raiz estático
fonte
1) renomeie o arquivo
Name.jpg
paraname1.jpg
2) confirmar arquivo removido
Name.jpg
3) renomeie o arquivo
name1.jpg
paraname.jpg
4) emendar arquivo adicionado
name.jpg
ao commit anteriorfonte
fatal: bad source, source=name1.jpg, destination=name.jpg
na etapa 3. Você tem alguma sugestão? Thxgit add
.Eu usei as seguintes etapas:
Para mim é uma solução simples
fonte
Podemos usar o comando git mv. Exemplo abaixo, se renomearmos o arquivo abcDEF.js para abcdef.js, podemos executar o seguinte comando no terminal
fonte
O Mac OSX High Sierra 10.13 corrige isso um pouco. Basta criar uma partição APFS virtual para seus projetos git; por padrão, ela não tem limite de tamanho e não ocupa espaço.
Sensitive
git
eln -s /Volumes/Sensitive/git /Users/johndoe/git
Sua unidade estará em
/Volumes/Sensitive/
Como confirmar alterações de nome de arquivo com distinção entre maiúsculas e minúsculas no Git?
fonte
Já enfrentei esse problema várias vezes no MacOS. O Git diferencia maiúsculas de minúsculas, mas o Mac preserva apenas maiúsculas e minúsculas.
Alguém confirma um arquivo:
Foobar.java
e após alguns dias decide renomeá-lo paraFooBar.java
. Quando você pega o código mais recente, ele falha comThe following untracked working tree files would be overwritten by checkout...
A única maneira confiável que vi que corrige isso é:
git rm Foobar.java
git commit -m 'TEMP COMMIT!!'
git rebase --continue
git rebase -i HEAD~2
edrop
asTEMP COMMIT!!
FooBar.java
fonte
Quando você renomeia muitos arquivos e alguns deles são apenas uma mudança de maiúsculas e minúsculas, é difícil lembrar qual é qual. "git moving" manualmente o arquivo pode ser bastante trabalhoso. Então, o que eu faria durante minhas tarefas de alteração de nome de arquivo é:
Isso resolverá todos os problemas do caso sem tentar descobrir quais arquivos ou pastas você renomeou.
fonte
git commmit --amend
no parágrafo 4? Caso contrário, haverá uma confirmação extra com a remoção de todos os arquivos. Ou você pode usargit rebase -i
com abóbora.Se nada funcionou, use git rm filename para excluir o arquivo do disco e adicioná-lo novamente.
fonte
Tomei @CBarr resposta e escreveu um Script 3 Python para fazê-lo com uma lista de arquivos:
fonte