理论上,如果您只备份了.git
闪存驱动器中的文件夹,而某个恶意用户删除了您电脑中的所有项目文件,您还能从.git
闪存驱动器中的该文件夹恢复文件吗?
注意:这只是针对本地 repo 场景,我知道您可以从在线 repo 中提取。
答案1
是的,大部分都是。该.git
文件夹包含完整的存储库历史记录(所有提交及其内容),以及暂存区(您已git add
编辑但尚未提交的内容)。
事实上,当 Git 服务器存储仓库时,它们使用只是.git 文件夹(“裸”存储库)。
但是,它不包含您尚未复制的杂项文件的副本告诉Git 关于。如果您做了一些编辑但没有git add
将它们复制到 .git/objects/ 中。
提取文件的方法是git checkout -f
或git checkout <paths>
(将暂存区复制到工作树)。
答案2
.git
项目中的目录将有足够的信息来恢复提交历史记录中的任何版本。
只是为了好玩,我在本地运行了这个:
cd <my local repo>
rm -r *
ls # nothing there
ls -la # some dot files/directories
git checkout .
ls # my stuff is back!
我所有的东西都回来了(除了一些未提交的更改、编译输出等),然后我立刻后悔了这个“有趣”的练习
也就是说,.git 目录确实包含足够的信息来恢复您的文件甚至历史提交。
看:https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain
答案3
您正在谈论的是所谓的‘裸’存储库。
实质上,该.git
目录包含该存储库中跟踪的所有修订版本的所有数据。这包括重建工作目录以进行检出所需的所有数据。
因此,如果您永远不会访问存储库的单个文件,而只是克隆存储库或从中推送或拉取,那么只需拥有该目录就可以节省大量空间.git
。