Eu tenho um repositório Git local do qual mantenho uma cópia de backup da seguinte maneira:
cd /path/to/local/repo
git init
git add -A
git commit -m "Initial commit"
git clone --bare /path/to/repo_backup/my_repo.git
cd /path/to/repo_backup/my_repo.git
git init --bare --shared
cd /path/to/local/repo
git remote add origin /path/to/repo_backup/my_repo.git
git push --set-upstream origin master
Enquanto estive fora por duas semanas, nosso departamento de TI decidiu unilateralmente excluir o diretório .git que era meu repositório local. As alterações foram feitas no diretório de trabalho e não consigo executar o git status para ver quais alterações foram feitas.
Eu preciso restaurar o repositório local do repositório de backup (ou seja, remoto) sem afetar o diretório de trabalho (ou seja, não posso fazer um clone git direto ).
Eu tentei isso via:
cp /path/to/repo_backup/my_repo.git /path/to/local/repo/.git
cd /path/to/local/repo
No entanto, quando executo git status , recebo este erro:
fatal: this operation must be run in a work tree
Como posso restaurar corretamente o repositório local sem afetar o diretório de trabalho?
O
cp
comando que você mostrou não tem o-r
sinalizador, então espero que ele falhe ao copiar o.git
diretório.Será que você copiou seu novo
.git
diretório para o antigo diretório .git, em vez de substituir o antigo? (Ou seja, criar acidentalmente um.git/.git
subdiretório)Talvez tente:
Além disso, embora possamos converter entre repositórios vazios e não vazios simplesmente renomeando, isso depende dos internos do git, e é possível que o git nem sempre funcione dessa maneira. Usuários git sábios recomendam usar
git clone
em vez de renomear.Você poderia clonar em um diretório temporário e depois mover o diretório .git. A própria operação de clonagem se recusará a colidir com os arquivos existentes de qualquer maneira.
A falta da opção -r no comando cp é provavelmente a culpada.
Em relação à impossibilidade do git clone restaurar a cópia local - você pode fazer isso:
... mas não faz muito sentido se você puder recuperar o diretório .git.
Dito isto, usar o repositório git local como backup tem pontos fracos (que você já experimentou); você pode considerar verificar o Git Backup Guide para obter detalhes sobre boas práticas de backup.