赞
踩
为了理解指令 git ls-files ,学习了 git 的三大概念:工作区,暂存区 和本地仓库。当理解这三个概念以后,建议去学习一下git:文件存储方式,它告诉了我们在上述三个阶段中,项目文件是以什么格式被存储,文件格式之间的关联,以及版本切换和分支切换的底层原理。
就是你本地的工作目录,git 相关的文件全部保存在 .git 目录下。
当运行指令 git add
时,git 将需要跟踪的文件(不包括目录信息)复制并压缩成 blob 对象进行保存。当对同一个文件进行修改后,执行 add 指令会生成一个新的 blob。只有工作区和本地仓库也能进行版本管理(例如 Mercurial),git 引入 index 的目的是为了缓解 merge 冲突,这里暂不讨论。
repository(repo)由 commits ,tree 和 blob 组成。当 commit 用作名词时,指 git 版本历史中的某一个版本;用作指令时,指生成当前版本的 commit,tree,并联合 index 中的 blob 一起保存到 repo 中,同时将 branch 指向最新的 commit(HEAD 指向当前的 branch,branch 指向 commit)。tree 保存的是其下 blob 和 tree 的地址,多个 tree 一起保存了整个版本的目录结构;commit 保存了一个 tree 和描述该版本的信息,该 tree 指向整个版本目录。
执行 commit 指令以后,index 会被清空。可以简单认为每一个 commit 都是独立永恒的。
commit,tree,blob 是 git 下的格式,只能读取不能修改,当通过 commit 查找恢复历史版本时,这些对象才会被转化成可以使用的格式。
What does “git ls-files” do exactly and how do we remove a file from it?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。