开发者社区> 问答> 正文

Git快照(snapshot)到底该如何理解?或者说如何从文件系统的角度理解快照(snapshot)?

Git快照(snapshot)到底该如何理解?或者说如何从文件系统的角度理解快照(snapshot)?

展开
收起
第七科 2017-11-30 17:39:59 5628 0
1 条回答
写回答
取消 提交回答
  • R&S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者

    当保存一个文件的时候,git 把这个文件的信息和这个文件的内容存储在一个文件里,然后求得这个文件的 sha1 作为文件名(sha1的前两位/sha1剩余部分,见.git/objects)。
    保存一个目录,就是把目录信息,以及其中文件通过上述方式求得的 sha1 保存在一个文件里,同样求得这个文件的sha1 作为文件名。
    一个提交就是,把提交的信息(比如父提交的sha1等),以及此次提交所包含的目录/文件的上述方式求得的 sha1 放在一个文件里,然后把其 sha1 作为文件名。

    当提取某次提交的时候,需要给出某次提交的 sha1 然后 git 就可以通过sha1 找到这个保存这个提交所在的文件,然后这个文件里有其所有包含文件的 sha1 ,然后就可以找到所有文件。
    分支的名称其实就是某次提交 sha1 的一个别名而已(见./git/refs/heads)

    如果提交 a 和提交 b 都包含同一个文件file,那么,file 以及其信息放在一个文件里,然后 a 和 b 里面其实仅仅保存了这个文件的 sha1

    在 git 里面,如果仅仅改变一个文件的文件名(包括改变目录),那么 git add ; git status 是可以看到 git 是可以检测到这个重命名的。 因为他们的 sha1 是相同的。

    2019-07-17 21:46:35
    赞同 1 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
新一代高效Git协同模型 立即下载
AGit-Flow:新一代高效Git协同模型 立即下载
AGit-flow:新一代高效Git协同模型 立即下载

相关实验场景

更多