序言
对开发人员而言,Git如果是每晚都要关系密切的辅助工具吧,但许多这时候他们都罢了逗留在git add、git push、git pull等单纯指示的采用上,又或是罢了采用GUI辅助工具(如Sourcetree等)点选操作方式罢了,对Git并没甚么全面性的介绍,Maurs可能将须要急速玩游戏翻查。
因而,为的是更快地采用Git,也为的是让更全面性地认知Git,就将对Git的自学归纳为**《 Git易懂讲义》**,方便快捷尔后即时翻查,也期望对他们略有协助!
Git是甚么?
Git是两个分布式系统版控制技术,而SVN、CVS等则为封闭式版控制技术。
分布式系统与封闭式的差别
封闭式版控制技术的特征是须要远距伺服器,假如难以相连远距服务器,他们所做的更改就难以递交,如下表所示图右图:
而在分布式系统版控制技术中,每一端都留存着库房完备的重要信息,不必互联也能翻查到大部份的更改发展史、在邻近地区展开commit、checkout等操作方式,仅当你须要将更改推送到远距库房,才须要互联网,如下表所示图右图:
Git有甚么样优点
Git有下列两个优点:
邻近地区操作方式
绝大部分操作方式都在邻近地区展开,不须要无线相连,邻近地区留存着库房的完备重要信息,假如远距库房损毁,即时能用邻近地区库房展开单元测试。
两个如前所述文档镜像磁盘
Git与其他版控制技术的其他不同之处在于Git对待数据的方式,Git就像两个小型的磁盘,在他们每次递交,对整个磁盘做两个镜像。
保证数据完备性
Git 中大部份的数据在存储前使用哈希算法计算两个哈希值,只要内容一改变,哈希值就会发生,这样能确保任何数据的改变都能被Git察觉,进而保护数据的完备性。
高效分支管理
一般的版控制技术都支持分支管理,然而这些系统创建分支就是把整个系统复制一份罢了,这对大型项目而言,就很费时间了,而Git则完全不同,Git的分支是非常轻量级的,在Git中,分支的创建、删除、合并都非常快速,有时罢了移动两个指针罢了。
配置Git
刚开始采用Git时,须要配置一下Git环境,第一件事就是配置你的用户名和邮件地址,这里的用户名和邮箱地址会写入到你之后的每一次递交当中:
git config —global user.name “test”git config —global user.email “[email protected]” 复制代码上面采用git config指示时,他们采用–global选项,表示该配置对大部份的库房都有效,实际上Git的配置有三个级别,对应的指示选项为–global,–system,–local,其中–local优先级最高,–system优化级最低。
–system
表示对系统上大部份用户的大部份库房都有效,对应的修改会留存在/etc/gitconfig文档中,由于是系统级别的配置,因而须要管理员权限才能操作方式。
git config —system user.name “test” git config —system user.name “[email protected]” 复制代码–global
表示对当前用户的大部份库房都有效,对应配置会留存在~/.gitcofnig或是~/.config/git/config文档中。
git config —global user.name “test” git config —global user.name “[email protected]” 复制代码–local
对当前库房有效,对应的配置会留存在项目的.git/config文档当中。
git config —local user.name “test” git config —local user.name “[email protected]” 复制代码能采用下列指示查看不同级别配置文档的位置及相关配置:
git config –list –show-origin 复制代码Git基本操作方式流程
生成或是克隆两个库房在工作区中修改文件。将你想要下次递交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。递交更新,找到暂存区的文档,将镜像永久性存储到 Git 目录。将递交发送到远距库房。这里有两个概念是他们自学Git必须要厘清的概念,即:库房(Repository)、工作区(workspace)、暂存区(Index,也称为索引)、远距库房(Remote),它们之间的关系如下表所示图右图:
怎么生成Git库房
Git创建库房有两种方式:
在邻近地区初始化克隆已经存在的远距库房邻近地区初始化
mkdir demo cd demo git int 复制代码或是不进入目录,直接对某个目录展开初始化:
git init demo 复制代码执行完上面的指示之后,我们便在demo目录中初始化了两个库房,这这时候Git默认帮他们创建两个名称为master或是main的分支。
克隆已经存在的远距库房
除了初始化空库房之外,有这时候他们须要参与一些已经展开的项目,这样的项目已经有存在的库房了,这这时候他们能采用克隆的方式把远距库房同步到他们邻近地区目录,如:
git clone https://github.com/xxx/xxx 复制代码默认情况下,会把远距版库的名称作为克隆到邻近地区目录的名称,他们也能自定义邻近地区目录的名称,如:
git clone https://github.com/xxx/xxx demo 复制代码克隆后,默认也是进入两个master或是main的主分支,该分支会关联到他们克隆的远距伺服器上的同名分支,他们也能指定要克隆远距伺服器的哪个分支:
gitclone -b develop https://githbu.com/xxx/xxx demo 复制代码分支是Git中非常重要的内容,也是Git精华之所在,他们以后的文章再详细讲解!
区分工作区与库房
经过上述步骤后,他们在demo目录中生成了两个库房,这里有一点要注意的是,许多初学者往往把demo看作是库房,其实demo目录下的.git才是库房,而demo目录则是工作区。
工作区是他们操作方式文档的地方,他们添加、修改或删除文档都是在demo目录中展开的,而最终递交的数据是留存到.git目录中的,所以.git目录才是库房,这个目录保留着整个库房的大部份重要信息。
区分工作区与暂存区
SVN或CVS的采用习惯是直接递交所修改的内容,而Git并不是这样的,在Git中,当他们在工作区对文档作出修改后,并不能直接递交,而是须要将文档添加到暂存区(Index或Stage),
将文档添加到暂存区
git add指示用于将文档添加到暂存区:
echo hello world >> README.md git add README.md 复制代码除了两个两个地添加之外,git add 指示也支持将全部修改一次性添加到暂存区,如:
git add –all //或是 git add . 复制代码将文档从暂存区中撤消
对添加到暂存区的文档,也能执行撤消操作方式,比如他们想将上面添加到暂存区的文档撤回工作区,能这样做:
git restore –staged README.md 复制代码如何递交
把要递交的文档添加到暂存区后,如果想递交到库房中,可采用git commit指示:
git commit 复制代码执行上面的指示后,会弹出两个vim编辑器窗口,他们能在这个窗口编辑递交说明,编辑完成后留存退出就完成了一次递交了。
当然,也能在git commit指示跟上-m选项来附带说明文字,这样能直接递交:
git commit -m 递交说明 复制代码虽然采用暂存区,能让他们更快的挑选自己要递交的修改,但这样多两个步骤总是很烦人,所以Git支持在git add指示后跟上两个-a选项,这样能直接跳过暂存区,直接将当前工作的修改递交到库房中:
git commit -a -m “递交说明” 复制代码不过,要注意的是,未跟踪的文档并不会直接被递交,还是须要添加到暂存区的。
Git库房文档的状态
从上面的操作方式中,他们能看到,两个文档从创建到递交,经历了两个状态的变化,如下表所示图右图:
归纳如下表所示:
刚创建的文档状态为Untracked,表示该文档还未被纳入Git的版控制中。git add指示会文档添加到暂存区,此时文档的状态为Staged。文档在暂存区被commit之后,状态则为Unmodified。Unmodified状态的文档被修改后则状态变为Modified。git rm指示会把文档从Unmodified变成Untracked。远距库房
到目前为止,他们的大部份操作方式还是在邻近地区展开的,当他们想把与库房与别人共享,或是参与别人的项目时,这这时候就须要相连远距库房了。
远距库房,并不一定说明该库房一定要在互互联中的另一台伺服器上,远距库房也能是你本机的另两个库房
查看远距库房
假如想查看当前库房关联到哪个远距库房,能采用下面的指示:
git remote -v 复制代码假如他们采用git clone指示克隆两个远距版库,Git会帮他们将该远距库房命名为origin。
添加远距库房
也能自己添加当前库房关联的远距库房,比如下表所示面我们添加两个名称为foo的库房:
git remote add foo https://www.github.com/xxx/xxx 复制代码向远距库房发送
采用git push指示能将邻近地区的递交发送到远距库房:
git push 复制代码执行上面指示的话,会发送当前大部份分支,发送到远距库房中同名的分支下,当然他们也能发送到指定的分支,比如他们指定发送到foo的develop分支上:
gitpush foo develop 复制代码同步远距库房
假如别人向远距版库发送了更改,而他们想同步到邻近地区的库房,能采用git fetch将远距库房的最新更改抓取回来:
git fetch 复制代码同样,也能指定抓取哪个分支:
git fetch foo develop 复制代码但是,执行git fetch后也罢了把别人发送到远距库房的更改拉回来罢了,却并不会把更改合并到他们当前工作区,所以他们还须要自己手动执行合并指示:
git merge 复制代码上面的指示没指定合并哪个远距库房分支,所以会默认合并当前分支所跟踪的远距分支,也能指定合并哪个分支:
gitmerge foo develop 复制代码假如觉得执行git fetch和git merge比较麻烦的话,也能采用git pull指示,这个指示在抓取远距库房数据后,会自动执行合并:
gitpull foo develop 复制代码小结
在这篇文章中,他们主要探析楚了下列两个知识点:
Git是甚么?有甚么样优点?分布式系统版控制技术与封闭式版控制技术的差别?如何配置本机的Git环境?Git的基本操作方式流程,自学了Git的基本指示。