Eu tenho um diretório gitrepo1 . Este diretório é um repositório git.
Eu gostaria de mover este gitrepo1 para outro diretório newrepo .
O diretório newrepo deve ser o novo repositório git sem perda do histórico do git e deve conter o diretório gitrepo1 .
O diretório gitrepo1 deve ser apenas um diretório agora (dentro de newrepo ), sem nenhum
.git
índice, ou seja, NÃO deve mais ser um repositório git independente ou um submódulo.
Como posso fazer isso?
mv girepo1 newrepo
??Respostas:
É muito simples. O Git não se preocupa com o nome de seu diretório. Ele só se importa com o que está dentro. Então você pode simplesmente fazer:
Observe que a cópia é bastante cara se o repositório for grande e com um longo histórico. Você também pode evitá-lo facilmente:
Depois de criar
newrepo
, o destino agitrepo1
ser colocado pode ser em qualquer lugar, mesmo dentro,newrepo
se você quiser. Isso não muda o procedimento, apenas o caminho que você está escrevendo degitrepo1
volta.fonte
cp
como quase todo comando ou função é específico para outros sistemas operacionais. Na verdade, é específico para cada sistema operacional que não seja o Windows. Tente ligar para a microsoft e perguntar por que eles não são POSIX. De qualquer forma,cp
significa copiar.mv
significa movimento.rm
significa remover. Você pode encontrar equivalentes do Windows..git/
contém todo o histórico, que inclui seu último commit. Onde quer que você coloque, você tem toda a história. Na verdade, se todos os arquivos nesse diretório forem diferentes do repositório original de onde você tirou.git/
, a única coisa seria que ele informa que alguns arquivos foram excluídos e alguns não rastreados estão presentes. Com umgit reset --hard
, os arquivos removidos seriam recuperados automaticamente! A única coisa a notar é que apenas copiando.git/
você não pode recuperar as alterações não confirmadas.É um pouco tarde e a pergunta já está respondida mas, para fazê-lo sem dor de cabeça:
git status
, digamos, desenvolvimento de branchgit clone
o projeto do repo para a nova pastagit checkout development
rsync
, excluindo a pasta .git :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1
Então você é bom para continuar de onde parou
fonte
É ainda mais simples do que isso. Apenas fiz isso (no Windows, mas deve funcionar em outro sistema operacional):
Git apenas vê que você adicionou um diretório e renomeou um monte de arquivos. Não é nada demais.
fonte
Não sou especialista, mas copio a pasta .git para uma nova pasta e invoco:
git reset --HARD
fonte