我之前开发java项目的时候也有用过版本管理工具svn,不过老是弄不清楚各个状态之间的关系和操作的含义,最近使用github管理自己的代码和一些笔记,对于一些操作还是不太理解(太笨了。。。),网上也查过一些零零碎碎的相关内容,不过还是模糊不清。于是我打算较为系统地学习一下git和github。http://git-scm.com/book/zh/v1这个网站系统地介绍了git原理还有操作等等,有兴趣的朋友可以参考学习。
要使用git工具进行版本管理,首先要明白git各种状态的含义。如下图所示,
git库中文件的整个生命周期中的状态包括:
- untracked(未被跟踪)
- unmodified(未修改)
- modified(已修改)
- staged(在暂存区中)
其中unmodified、modified、staged表示文件已被跟踪,即已经加入版本管理中。
当从github远程库中clone
项目到本地后,该项目中所有文件状态为unmodified;在该项目中新建一个文件后,该文件的状态为untracked,通过git add
文件状态变为unmodified(此时该文件的状态同时为staged,已经存在暂存区中了,其实git add
的潜台词就是把目标文件加入暂存区域),通过编辑,文件状态变为modified,被修改的文件未被放到暂存区域中,此时通过git
命令查看的话,会发现暂存区中和未暂存区同时存在该文件!!!为什么会这样呢???因为此时暂存区中的该文件是上次通过
statusgit add
命令添加时候所处的状态,而未暂存区中该文件的状态是这次通过编辑后所处的状态,git记录了两种状态,如果这个时候用git commit
命令提交该文件,只会把该文件的前一种状态保存到git仓库,修改后的状态不会保存到git仓库,要通过git
操作才能将修改后的文件状态加入到暂存区域中,然后可以通过
addgit commit
命令将修改后的文件提交到git仓库,有点啰嗦了==,能够理解就好^_^。
讲到这里,有必要提一下以下三个概念:
- git
- github
- 工作目录
- git仓库
- 远程库
git仅仅是在本地对代码进行版本管理,而github在网上提供了远程库,用来存放代码。如果我们只在本地使用git工具的话,只需用到工作目录和git仓库,如果使用github的话,那么工作目录、git仓库和远程库三个都要用到。
工作目录即我们对文件进行新建、删除等操作所在的目录(把暂存区归到工作目录,便于理解),在暂存区中的文件通过git commit
操作后,可以将该文件和添加的批注添加到git仓库中,而通过git push
操作,我们可以将git仓库中的文件同步到远程库。
这篇文章主要介绍了通过git管理的文件的生命周期中的各种状态以及我对各种状态和各个概念的理解,如有不正确之处,恳请各位大虾批评指正,关于具体的git和github具体操作将在下次讲解。