Enquanto encontrei uma pergunta semelhante , não encontrei uma resposta para o meu problema
Quando tento renomear o diretório de FOO para foo via git mv FOO foo
eu recebo
fatal: renaming 'FOO' failed: Invalid argument
ESTÁ BEM. Então eu tentogit mv FOO foo2 && git mv foo2 foo
Mas quando eu tento confirmar via git commit .
eu recebo
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
Quando adiciono o diretório, git add foo
nada muda e git commit .
me passa a mesma mensagem novamente.
O que estou fazendo de errado? Eu pensei que estava usando um sistema com distinção entre maiúsculas e minúsculas (OSX). Por que não posso simplesmente renomear o diretório?
macos
git
version-control
case-sensitive
oschrenk
fonte
fonte
git mv
funciona.git mv foo Foo
se usar um shell cygwin.Respostas:
Você está em um ambiente que não diferencia maiúsculas de minúsculas. Além disso, adicionar com o
-A
não cuidará do lado de remoção domv
Git como ele o entende. Aviso! Certifique-se de que não haja outras alterações ou arquivos não rastreados quando você fizer isso ou eles serão confirmados como parte dessa alteração!git stash -u
primeiro, faça isso e depoisgit stash pop
depois. Continuando: Para contornar isso, faça o seguinte:Essa é a maneira mais extensa de alterar o diretório de trabalho, confirmar e depois recolher os 2 commits. Você pode simplesmente mover o arquivo no índice, mas para alguém novo no git, pode não ser explícito o suficiente sobre o que está acontecendo. A versão mais curta é
Conforme sugerido em um dos comentários, você também pode fazer uma nova análise interativa (
git rebase -i HEAD~5
se o caso errado foi introduzido há 5 confirmações atrás) para corrigir o caso e não fazer com que o caso errado apareça em qualquer parte do histórico. Você deve ter cuidado se fizer isso, pois os hashes de consolidação a partir de então serão diferentes e outros terão que refazer ou mesclar novamente seu trabalho com esse passado recente da ramificação.Isso está relacionado à correção do nome de um arquivo: O git não diferencia maiúsculas de minúsculas?
fonte
git add foo2
.-A
cuida de ambos. Vice-versa para o primeiro passo. Vou adicionar o aviso. Obrigado!git rebase -i HEAD~2
. Nota: Para simplificar isso, configure a mensagem final no seu primeiro commit e corrija o segundo.Você deseja definir a opção
core.ignorecase
como false, o que fará com que o Git preste atenção aos casos em sistemas de arquivos que não a suportam nativamente. Para ativar em seu repo:Em seguida, você pode renomear o arquivo
git mv
e ele funcionará conforme o esperado.fonte
I modified a file that doesn't exist
.. humerror: The following untracked working tree files would be overwritten by checkout:
mas ... esses arquivos não existem.Consegui resolver isso usando o git 1.7.7 usando um nome de arquivo temporário:
fonte
(
git mv
-variante livre.)Eu encontrei esse problema no Git no Mac OS X 10.9. Eu resolvi da seguinte maneira:
git rm -r --cached /path/to/directory
Isso prepara o diretório para exclusão no Git, mas na verdade não remove nenhum arquivo físico (
--cached
). Isso também faz com que o diretório, agora com o caso apropriado, seja exibido em arquivos não rastreados.Então você pode fazer isso:
O Git reconhecerá que você renomeou os arquivos e, quando o fizer,
git status
deverá ver váriasrenamed:
linhas. Inspecione-os e verifique se eles parecem corretos e, se houver, você poderá confirmar as alterações normalmente.fonte
mv
comando não funcionava para realmente renomear o diretório; Eu tive que renomeá-lo no Finder. Fora isso, essa correção funciona perfeitamente.Esta é uma solução rápida e segura de erros:
Aviso! Sempre renomeie todos os arquivos na pasta renomeada (use
/*
).Não renomeie arquivos únicos. Isso leva a um erro, descrito nesta resposta .
Se você deseja ver primeiro o resultado, use
-n
:Depois de fazer um
mv
:Agora o Git deveria ter renomeado a pasta AMBOS em seus arquivos internos e no sistema de arquivos.
fonte
Force-o com a opção -f:
fonte
false
, ele trabalhou para mimEu tive um problema relacionado.
Uma pasta chamada 'Pro' (criada primeiro) e outra 'pro' (criada por engano). No Mac, é a mesma coisa, mas diferente de acordo com o git.
a configuração do git renomeia os arquivos para a pasta correta (obrigado) e também criou arquivos fantasmas em 'pro' (Não !!). Não pude adicionar alterações de arquivo fantasma à faixa e não pude fazer check-out de outros ramos, a menos que carregasse esses arquivos comigo, e também não consegui redefini-lo de alguma forma.
Em vez disso, eu fiz
Para torná-lo ainda mais seguro, eu o fiz em uma ramificação de correção separada e, em seguida, fui mesclada de volta à ramificação principal
Para a questão do arquivo fantasma criada por, qualquer guru pode explicar como e por quê? Desde já, obrigado.
fonte
Você não está usando um sistema de arquivos com distinção entre maiúsculas e minúsculas no OS X, a menos que você o escolha explicitamente. O HFS + pode fazer distinção entre maiúsculas e minúsculas, mas o padrão não diferencia maiúsculas de minúsculas.
fonte
Aqui está uma solução realmente simples para todo o gitfoo nesta página.
fonte
Melhorando a resposta de Adam Dymitruk (bobo que o SO não me permita comentar sua resposta), o uso de "git mv" automaticamente encenará exatamente os arquivos movidos. Não é necessário esconderijo e o arriscado "git add -A" pode ser evitado:
fonte
Isso funcionou muito bem para mim no Windows. PowerShell usado com o seguinte:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Graças à resposta de Adam acima.
fonte