赞
踩
git是分布式版本控制系统,代码提交是在本地的(速度快),而生push到远程服务器上需要联网的。
git的功能特性:(从一般开发者的角度来看)
1、从远程服务器上克隆clone完整的git仓库(包括代码和版本信息)到自己的机器(单机)上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把远程服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull命令解决冲突,解决完冲突之后再向主开发者提交补丁。
执行git init命令,就会创建并初始化git仓库,这个时候在该目录下会产生一个.git的隐藏文件夹,而该目录就是你的工作目录,你的一切行为都是在这个目录里,而这个.git文件夹就是你的本地仓库,当你进行了一些文件操作之后,认为可以提交了那么首先你就是提交到本地仓库也就是这个.git中,然后再推送到中心服务器。或者直接克隆一个仓库到本地作为git仓库,也是一样的。当你进入到这个.git目录中,会发现里面还有很多的子目录和文件,有的是很重要的:config文件,这是你项目的配置文件,里面有中心服务器的信息和分支信息,HEAD文件指向当前的分支,index文件是暂存区的相关信息,logs目录中都是相关操作产生的日志,这个很重要,因为日志是我们操作的唯一证据,我们本地的版本控制也靠它,objects目录里面存储的就是所有的数据,也就是快照,refs目录里是存储指向数据提交对象的指针。
.git目录结构一般为如下:(可能会有更多文件目录)
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
工作区(Working Directory):简言之就是我们工作的区域。对于git而言,就是本地工作目录。工作区的内容会包含提交到暂存区和版本库(当前提交点)的内容,同时也包含自己的修改内容。(除.git目录以外)
暂存区(Stage):一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。它是我们把修改提交版本库前的一个过渡阶段。
本地仓库(local repository):版本控制系统的仓库,存在于本地。当执行git commit命令后,会将暂存区内容提交到仓库之中。在工作区下面有.git的目录,这个目录下的内容不属于工作区,而是git的版本库,里面含有仓库的数据信息,暂存区相关内容也在其中,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。这里也可以使用merge或rebase将远程仓库副本合并到本地仓库。
远程版本库(remote repository):与本地仓库概念基本一致,不同之处在于一个存在远程,可用于远程协作,一个却是存在于本地。通过push/pull可实现本地与远程的交互
一般情况git提交保存修改的流程就是:(工作区、版本库、暂存区之间的关系)
第1步,使用git add把文件从工作区添加到版本库中的暂存区,git add命令可以多次用;
第2步,使用git commit提交代码,就是把暂存区的所有内容提交到当前分支(本地分支)。
注意:git commit是本地提交,没有推送到公共服务器; git push才是推送到远程服务器
git文件的两种状态:
第一种是被跟踪的,也就是提交到本地仓库的文件,因为本地仓库要保管它们当然得跟踪他们,对它们负责;
第二种是未被跟踪的。那么当我们添加新的文件时,它不是被跟踪的,因为本地仓库里面没有这个文件,它是外来的,本地仓库目前还不需要对他们负责。但是如果是对仓库已经存在的文件进行修改,那么这些文件就是被跟踪的文件,就可以通过git status查看他们的状态来进行相应的操作。当然我们也可以生成一个.gitignore文件,里面指定要忽略的文件类型,然后这些文件就不会被跟踪
git的三种对象
git也是根据指针来寻址的,这些指针就存储在git的对象中。git一共有3种对象,commit对象,tree对象和blob对象。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。