Eu criei uma pasta common
com vários arquivos e pastas de origem.
Agora eu quero mover a common
pasta para dentro da include
pasta para que pareçainclude/common
Eu tentei estes:
git add include
git mv common/ include/
mas falha com este erro
fatal: fonte ruim, fonte = myrepo / common, destino = myrepo / include
Eu tentei,
git mv common/ include/common
mas recebo o mesmo erro
Alguma idéia de como conseguir isso?
git mv
é equivalente.Deveria trabalhar.
Na
git mv
página do manual :Não "
git add
" deve ser feito antes da mudança.Nota: "
git mv A B/
", quandoB
não existe como diretório, deve ocorrer um erro, mas não ocorreu.Veja commit c57f628 de Matthieu Moy (
moy
) para Git 1.9 / 2.0 (primeiro trimestre de 2014):fonte
git mv
parece uma abordagem muito melhor!Comando:
Geralmente funciona bem.
O erro "origem incorreta ..." normalmente indica que, após a última confirmação, houve algumas renomeações no diretório de origem e, portanto,
git mv
não foi possível encontrar o arquivo esperado.A solução é simples - basta confirmar antes de aplicar
git mv
.fonte
Certifique-se de ter adicionado todas as suas alterações à área de preparação antes de executar
git falha com erro
se houver arquivos não adicionados, então acabei de descobrir.
fonte
Outra maneira de mover todos os arquivos de um diretório para um subdiretório (mantém o histórico do git):
$ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done;
fonte
Eu tive um problema semelhante com o
git mv
local em que queria mover o conteúdo de uma pasta para uma pasta existente e acabei com este script "simples":Explicação
git ls-files
: Encontre todos os arquivos (nacommon
pasta) registrados no gitnewdir="../include/$(dirname $f)"; mkdir -p $newdir;
: Crie uma nova pasta dentro dainclude
pasta, com a mesma estrutura de diretórios quecommon
git mv $f $newdir/$(basename "$f")
: Mova o arquivo para a pasta recém-criadaA razão para fazer isso é que o git parece ter problemas ao mover arquivos para pastas existentes, e também falhará se você tentar mover um arquivo para uma pasta inexistente (daí
mkdir -p
).O bom dessa abordagem é que ela toca apenas os arquivos que já estão registrados no git. Simplesmente usando
git mv
para mover uma pasta inteira, e a pasta contém alterações sem etapas, o git não saberá o que fazer.Depois de mover os arquivos, você pode limpar o repositório para remover quaisquer alterações não-estáveis restantes - lembre-se de executar a seco primeiro!
fonte
Sinto muito, não tenho reputação suficiente para comentar a "resposta" de "Andres Jaan Tack".
Eu acho que meu messege será excluído ((mas eu só quero avisar "lurscher" e outros que receberam o mesmo erro: tenha cuidado ao fazer
Isso pode fazer com que você não veja o histórico git do seu projeto em uma nova pasta.
eu tentei
obteve
eu fiz
e
e não vejo a velha história do git no meu projeto. Pelo menos meu projeto não está perdido. Agora eu tenho meu projeto em newFolderName, mas sem o histórico (
Só quero avisar, tenha cuidado usando o conselho de "Andres Jaan Tack", se você não quiser perder seu senso de humor.
fonte
Eu tive um problema semelhante, mas na pasta que eu queria mover, eu tinha arquivos que não estava rastreando.
digamos que eu tinha arquivos
E eu queria mover apenas os arquivos rastreados para a subpasta
subdir
, então o objetivo era:o que eu fiz foi:
mkdir tmpdir && mv a b tmpdir
git checkout a b
mkdir subdir && mv a b subdir
git add --update
alteração de diretório ): (normalmente isso adicionaria arquivos não rastreados - isso exigiria a criação do arquivo)git add subdir
.gitignore
git status
mostra agora apenas arquivos movidosmv tmpdir/* subdir
git status
parece que executamosgit mv
:)fonte
Eu resolvi isso no Windows, fazendo o seguinte:
(.*)
comgit mv ".\\\1" ".\\<New_Folder_Here>\"
fonte