git学习之二:文件控制基础
Posted 「临江仙」
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git学习之二:文件控制基础相关的知识,希望对你有一定的参考价值。
本文介绍git使用的相关基础.
注:本文git操作都是在git bash下操作
1.仓库
在一个目录下使用git init命令可以创建一个git仓库,该目录就成为了我们的工作目录。对于多人共同开发的项目,我们需要对项目进行统一管理,就需要建立公共仓库(也就是远程仓库-remote ),对于git管理员老说,需要架设一个git服务器,在该服务器上初始化一个git仓库给其他开发人员使用,进行统一化管理,开发人员自己的仓库我们称为本地仓库。如何架设一个git服务器,不在本文的讨论范围内,有需要的读者,请阅读相关文章
现在假设已经存在一个远程仓库,作为开发人员,首先需要获取git服务器的使用权限,在本地任意一个目录下使用git clone [url],
url是我们的git服务器的资源地址,对于clone,就是把远程服务器的所有文件拷贝一份到本地,从而建立与远程服务器一样的git仓库,这样我们不同人员可以在本地仓库进行开发,然后利用远程仓库统一管理。
例如git clone git://github.com/shacon/grit/git就从github服务器上克隆了一份仓库过来。
这样我们本地就有了一份仓库,内容与远程仓库一致,我们在本地进行开发,然后提交到远程仓库,由远程仓库进行统一管理
2.git文件状态
首先使用git init初始化一个本地仓库,只存在一个.git的隐藏文件夹,里面是git管理的相关文件。
根据我的个人观点的文件状态:ignore(忽略状态)、untrack(未跟踪)、track(跟踪)三种状态。
ignore(忽略状态):版本控制中不需要管理的文件,比如开发c++项目,编译生成的obj文,对于这些文件是对管理空间的负担和
浪费。在.git目录下创建一个.gitignore的文件,在该文件内添加文件名和文件夹名,它支持通配符,比如*.obj,那么所有的obj文件都会
被忽略
untrack(未跟踪):和忽略状态类似,git不会进行版本控制管理,但是git status命令对列出untrack的文件,可以使用git add [文件名]
来将其变成跟踪的文件。对于新加入的文件都是untrack状态,我们往工作目录加入一个名为1.txt的文件,使用git status查看状态。
现在只存在一个未跟踪的文件,用红色的字体标明,这时git不会对其进行管理。
track(跟踪):使用 git add [文件名] 之后,就变成了跟踪状态,这是就是我们的重点,被跟踪之后就会被git管理起来。 可以使用
git status看看目前状况
我们进行第一次commit,产生第一次提交,也就是有了第一个版本,这个版本只存在一个1.txt的文件。
跟踪之后就是git的管理文件,下面我们重点分析跟踪下的三种管理状态:未修改,修改,暂存。我们在工作目录创建一个2.txt,同时使用修改一下1.txt的内容。使用git status看看现在的状态
这里会列出修改的文件和未跟踪的文件,未跟踪的文件不会影响提交,修改过的文件会阻止提交。使用add可以将修改的文件和未跟踪的文件加入暂存区,这时文件进入暂存状态(在上一篇文章中,提到过会根据暂存区的信息生成tree对象,加入暂存区,git会对文件生成blob对象)。我们现在使用git add 1.txt命名,再看看状态
这时1.txt文件已经进入暂存状态,.git目录下的index文件会更新。这时进行提交,就会产生第二本版本这个版本里也只有一个1.txt文件(由于两个版
本的1.txt文件内容不同,git管理器会生成两个blob对象)。commit之后产生新版本,这时被跟踪的文件全变为未修改状态,我们的git status如下:
只存在为跟踪的文件信息,所有跟踪的文件全部变为未修改状态(为修改的文件不会显示)。
用一个图来表示:
3.git基础操作命令
git init初始化一个仓库,里面只有一个.git的隐藏文件夹
git clone 将远程仓库克隆一份到本地
git status 查看当前git仓库文件状态
git add [文件名] 1.将修改的文件加入暂存区 2.将为跟踪的文件变为跟踪状态,同时加入暂存区
git commit 提交本次修改,生成新版本
git checkout [文件名] 将修改过的文件还原
git reset [文件名] 将暂存的文件还原之前的状态(修改,为跟踪)
小结:本文介绍了一些git使用的基础知识,包括仓库,文件状态,和一些基本命令。下一节将介绍一个重量级的内容 git分支,合作开发的利器
以上是关于git学习之二:文件控制基础的主要内容,如果未能解决你的问题,请参考以下文章