我有一个本地 Git 存储库,我保留如下备份副本:
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
在我外出两周的时候,我们的 IT 部门单方面决定删除我本地 repo 的.git目录。然后对工作目录进行了更改,我无法运行git status来查看进行了哪些更改。
我需要从备份(即远程)存储库中恢复本地存储库而不影响工作目录(即我不能直接执行git clone)。
我通过以下方式尝试过:
cp /path/to/repo_backup/my_repo.git /path/to/local/repo/.git
cd /path/to/local/repo
但是,当我运行git status时,出现此错误:
fatal: this operation must be run in a work tree
如何在不影响工作目录的情况下正确恢复本地存储库?
cp
您显示的命令缺少-r
标志,因此我希望它无法复制.git
目录。可能是您将新
.git
目录复制到旧的 .git 目录中,而不是替换旧目录?(也就是说,不小心创建了一个.git/.git
子目录)也许尝试:
此外,虽然我们可以简单地通过重命名在裸仓库和非裸仓库之间进行转换,但这样做依赖于 git 内部,并且 git 可能不会总是以这种方式工作。明智的 git 用户建议使用
git clone
而不是重命名。如果您克隆到临时目录然后移动 .git 目录,则可以。无论如何,克隆操作本身将拒绝与现有文件发生冲突。
cp 命令中缺少 -r 开关可能是罪魁祸首。
关于 git clone 无法恢复本地副本 - 您可以通过以下方式完成:
...但是如果您可以恢复 .git 目录并没有多大意义。
也就是说,使用本地 git repo 作为备份有它的弱点(你已经经历过);您可以考虑查看Git 备份指南以获取有关良好备份实践的详细信息。