我有一个本地 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 部门单方面决定删除.git目录是我的本地仓库。然后对工作目录进行了更改,我无法运行git 状态看看做了哪些改变。
我需要从备份(即远程)存储库恢复本地存储库不影响工作目录(也就是说我不能直接git 克隆)。
我曾尝试过以下方法:
cp /path/to/repo_backup/my_repo.git /path/to/local/repo/.git
cd /path/to/local/repo
但是当我跑步时git 状态,我收到此错误:
fatal: this operation must be run in a work tree
如何在不影响工作目录的情况下正确恢复本地存储库?
答案1
cp
您显示的命令缺少标志-r
,所以我预计它无法复制.git
目录。
可能是你复制了你的新.git
目录进入旧的 .git 目录,而不是替换旧的?(也就是说,意外创建了一个.git/.git
子目录)
也许可以尝试:
mv /path/to/local/repo/.git /path/to/local/repo/TEMP-old-dot-git
cp -r /path/to/repo_backup/my_repo.git /path/to/local/repo/.git
此外,尽管我们可以通过重命名简单地在裸存储库和非裸存储库之间进行转换,但这样做依赖于 git 内部机制,而且 git 可能不会总是以这种方式工作。明智的 git 用户推荐使用git clone
而不是重命名。
我无法直接进行 git clone
如果您克隆到临时目录,然后移动 .git 目录,则可以。克隆操作本身无论如何都会拒绝与现有文件发生冲突。
答案2
cp 命令中缺少 -r 开关可能是罪魁祸首。
关于无法使用 git clone 恢复本地副本 - 您可以通过以下方式进行操作:
- git clone“远程”备份到不同的目录
- 将您的工作目录移动到不同的目录(同时覆盖所有文件)
- 将整个东西移回原始路径
...但如果您可以恢复 .git 目录,那么这样做就没什么意义了。
也就是说,使用本地 git repo 作为备份有其弱点(您已经经历过);您可以考虑检查Git 备份指南了解良好备份实践的详细信息。