有没有办法在 Git 中有效地读取以前版本的文件?(我使用 Git 作为内容管理系统的数据库,并且需要它来显示历史)。
Git 不存储文件的完整版本,它只存储差异,因此,如果您需要以前的版本 - 您不能只从磁盘读取它,您应该让 Git 使用差异来计算它。
似乎 GitHub 以某种方式做到了这一点,例如, You can see previous version of file。它真的会为每个 HTTP 请求计算它还是以某种方式对其进行优化?
有没有办法在 Git 中有效地读取以前版本的文件?(我使用 Git 作为内容管理系统的数据库,并且需要它来显示历史)。
Git 不存储文件的完整版本,它只存储差异,因此,如果您需要以前的版本 - 您不能只从磁盘读取它,您应该让 Git 使用差异来计算它。
似乎 GitHub 以某种方式做到了这一点,例如, You can see previous version of file。它真的会为每个 HTTP 请求计算它还是以某种方式对其进行优化?
勘误:git 总是存储文件的完整版本。因此查看任何修订版同样有效。
这与其他一些仅存储差异(补丁)的修订系统形成鲜明对比。由于这个原因(对于拥有许多用户的大型存储库),Cvs 尤其难以访问深层历史记录或非主干分支。
作为参考,为了方便地访问特定版本的特定文件(sha/reference):
git show HEAD:full/path/to/file
用标签、分支或 git sha(长十六进制数)替换 head
该路径是相对于 git 存储库基础的完整路径,而不是文件系统根目录。我只提到这一点是因为它已经咬了我几次——你不能cd
进入一个目录并期望不指定完整路径。
维基百科(所有真实而美好的事物之家)支持我:
Git 将文件的每个修订版本存储为唯一的 blob 对象。通过检查树和提交对象可以找到 blob 之间的关系。新添加的对象使用 zlib 压缩完整存储。
如果维基百科不是你的包,仔细阅读git internals 手册也可以验证它。