.git 文件夹实际上包含您的文件吗?

.git 文件夹实际上包含您的文件吗?

理论上,如果您只备份了.git闪存驱动器中的文件夹,而某个恶意用户删除了您电脑中的所有项目文件,您还能从.git闪存驱动器中的该文件夹恢复文件吗?

注意:这只是针对本地 repo 场景,我知道您可以从在线 repo 中提取。

答案1

是的,大部分都是。该.git文件夹包含完整的存储库历史记录(所有提交及其内容),以及暂存区(您已git add编辑但尚未提交的内容)。

事实上,当 Git 服务器存储仓库时,它们使用只是.git 文件夹(“裸”存储库)。

但是,它不包含您尚未复制的杂项文件的副本告诉Git 关于。如果您做了一些编辑但没有git add将它们复制到 .git/objects/ 中。

提取文件的方法是git checkout -fgit 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

相关内容