GIT日常开发功能培训1达成目标了解GIT背景GIT客户端程序安装及常用功能GIT命令行常用操作GIT分支常用操作GIT冲突处理总结2GIT简介2.1GIT介绍Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。2.2GIT和SVN优缺点分析2.2.1直接记录快照,而非差异比较Git和其它版本控制系统(包括Subversion和近似工具)的主要差别在于Git对待数据的方法。概念上来区分,其它大部分系统以文件变更列表的方式APM组件建设规划存储信息。这类系统(CVS、Subversion、Perforce、Bazaar等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。Figure1-4.存储每个文件与初始版本的差异.Git不按照以上方式对待或保存数据。反之,Git更像是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个快照流。Figure1-5.存储项目随时间改变的快照.这是Git与几乎所有其它版本控制系统的重要区别。因此Git重新考虑了以前每一代版本控制系统延续下来的诸多方面。Git更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的VCS。稍后我们在Git分支讨论Git分支管理时,将探究这种方式对待数据所能获得的益处。APM组件建设规划2.2.2近乎所有操作都是本地执行在Git中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,Git在这方面会让你感到速度之神赐给了Git超凡的能量。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。举个例子,要浏览项目的历史,Git不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。你能立即看到项目历史。如果你想查看当前版本与一个月前的版本之间引入的修改,Git会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。这也意味着你离线或者没有VPN时,几乎可以进行任何操作。如你在飞机或火车上想做些工作,你能愉快地提交,直到有网络连接时再上传。如你回家后VPN客户端不正常,你仍能工作。使用其它系统,做到如此是不可能或很费力的。比如,用Perforce,你没有连接服务器时几乎不能做什么事;用Subversion和CVS,你能修改文件,但不能向数据库提交修改(因为你的本地数据库离线了)。这看起来不是大问题,但是你可能会惊喜地发现它带来的巨大的不同。2.2.3Git保证完整性Git中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不知情时更改任何文件内容或目录内容。这个功能建构在Git底层,是构成Git哲学不可或缺的部分。若你在传送过程中丢失信息或损坏文件,Git就能发现。Git用以计算校验和的机制叫做SHA-1散列(hash,哈希)。这是一个由40个十六进制字符(0-9和a-f)组成字符串,基于Git中文件的内容或目录结构计算出来。SHA-1哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373Git中使用这种哈希值的情况很多,你将经常看到这种哈希值。实际上,Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。2.2.4Git一般只添加数据你执行的Git操作,几乎只往Git数据库中增加数据。很难让Git执行任何不可逆操作,或者让它以任何方式清除数据。同别的VCS一样,未提交更APM组件建设规划新时有可能丢失或弄乱修改的内容;但是一旦你提交快照到Git中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。这使得我们使用Git成为一个安心愉悦的过程,因为我们深知可以尽情做各种尝试,而没有把事情弄糟的危险。更深度探讨Git如何保存数据及恢复丢失数据的话题,请参考撤消操作。2.2.5三种状态好,请注意。如果你希望后面的学习更顺利,记住下面这些关于Git的概念。Git有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。已提交表示数据已经安全的保存在本地数据库中。已修改表示修改了文件,但还没保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。由此引入Git项目的三个工作区域的概念:Git仓库、工作目录以及暂存区域。aFigure1-6.工作目录、暂存区域以及Git仓库.Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。APM组件建设规划工作目录是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。基本的Git工作流程如下:1.在工作目录中修改文件。2.暂存文件(add),将文件的快照放入暂存区域。3.提交更新(commit),找到暂存区域的文件,将快照永久性存储到Git仓库目录。如果Git目录中保存着的特定版本文件,就属于已提交状态。如果作了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。2.3为什么我们要用GIT分支更快、更容易。支持离线工作;本地提交可以稍后提交到服务器上。Git提交都是原子的,且是整个项目范围的,而不像SVN中一样是对每个文件的。Git中的每个工作树都包含一个具有完整项目历史的仓库。没有哪一个Git仓库会天生比其他仓库更重要。3GIT安装3.1windows工具安装图解GIT有很多的客户端实现,大家可以访问网址下载自己喜欢的GIT界面客户端软件。TortoiseGit是Windows下不错的一款Git客户端工具。安装TortoiseGit并使用它需要两个软件:TortoiseGit和GIT。下面我们将详细描述TortoiseGit的安装APM组件建设规划过程。3.1.1下载程序GIT安装程序(必须):访问根据安装系统情况选择下载32或者64位安装程序TortoiseGit安装程序(必须):访问根据安装系统情况选择下载32或者64为安装程序TortoiseGit语言包(可选):访问在提供的语言包列表中选择简体中文语言包3.1.2安装程序1)双击git安装程序,根据安装向导进行安装。2)配置GIT环境变量添加git安装目录的bin目录到环境变量的path的值中APM组件建设规划3)Win+R,输入cmd打开命令窗口,输入git–version验证git是否安装配置完成4)双击TortoiseGit安装程序,按照安装向导进行安装APM组件建设规划5)安装TortoiseGit语言包(可选)6)TotoriseGit相关设置:通过鼠标右键点击,选中右键菜单中TotoriseGitSettings选项,在弹出的设置界面进行选项设置设置语言:(语言安装包通过进行下载)APM组件建设规划3.2eclipse插件安装图解新版的eclipse里面都已经集成了GIT的插件“EGit”,可用通过eclipse的HelpAboutEclipse查看是否集成“EGit”插件。如果eclipse中未集成“EGit”插件可以通过访问查看相关信息。这里以eclipse4.5为例,安装过程如下:a)添加插件网址选择Help–InstallNewSoftware…添加egit网址“”。如果eclipse版本为Mars.1contains4.0.3则网址为“”APM组件建设规划通过“EclipseMarketplace”安装b)选择安装内容c)根据安装向导提示安装d)重启eclipsee)安装完成APM组件建设规划4TotoriseGit工具使用4.1检出工程(clone工程)在将要检出的文件夹下点击右键,并在右键菜单中选择“Git克隆”。在弹出的信息对话框中设置需检出的Git远程仓库的URL、检出目录(默认当前目录+仓库名称)、分支名称(默认master分支)信息APM组件建设规划点击确定按钮克隆远程仓库到本地APM组件建设规划4.2新增/修改文件(add)当对在本地仓库中新增文件(此时文件未跟踪)、对已跟踪的文件修改后需通过add功能加入到文件暂存区以便后续提交。通过在本地仓库的根目录点击鼠标右键,选中“TotoriseGit”—“添加”选项在弹出的文件选择框中勾选需要加入到暂存区的文件,点击提交按钮。4.3提交文件(commit)TotoriseGit工具带来的好处就是便利的git操作。正常情况下我们需要先对更新的文件进行“新增”操作,然后再“提交”到本地仓库中。通过TotoriseGit可以在“提交”的操作中直接对还未纳入跟踪以及已经修改但未进行“新增”操APM组件建设规划作的文件统一操作,提高“提交”文件的便捷性。APM组件建设规划4.4更新文件(pull)在git操作中“拉取(pull)”操作实际上是“获取(fetch)”以及“合并(merge)”两个动作的结合。“拉取(pull)”操作在遇到远程仓库和本地仓库存在冲突时会尝试自动合并文件,对合并不了的文件会生成类似SVN格式的标准冲突文件,如果冲突部分太多改动起来将会非常麻烦,所以一般建议先执行“获取(fetch)”操作,然后通过查看有哪些冲突文件后再进行文件合并。4.5推送文件(push)推送文件是指将本地仓库的当前分支推送到当前分支对应的远程跟踪分支上的操作。在推送之前一定要先更新本地仓库。在TotoriseGit的推送对话框中可以设置本地推送分支、远程的推送分支等信息。APM组件建设规划推送成功后可以查看到相关成功信息。APM组件建设规划5GIT命令行使用5.1检出工程(clone工程)这里的检出远程仓库指的是将远程的仓库数据都克隆一份到本地的git仓库。在当前目录中执行gitclone或者gitclone组件建设规划5.2新增/修改文件(add)此命令用来未暂存状态的文件添加到暂存区快照,以便进行下次commit的时候进行提交。gitadd.其中的“.”指的是所有扫描到的符合条件的文件,也可以通过正则或者文件名来替换。APM组件建设规划5.3提交文件(commit)提交文件是指将暂存区的文件提交到本地仓库,生成本次提交的索引树gitcommit-m“提交备注信息”或gitcommit-a-m“提交备注信息”,这里的-a参数是指可以自动将跟踪状态的文件放入暂存区,并提交信息5.4更新文件(pull)更新文件涉及到3个概念”pull”,”fetch”,”merge”操作.Fetch:用来获