版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 学习版本的1.1 没有版本出现的问题备份多个版本,浪费空间,花费时间长。难以恢复至以前的历史版本,容易BUG,解决代码。难于追溯问题代码的修改人和修改时间、修改内容、日志信息。项目升级,版本发布。无法进行权限。 比如 测试:只读;开发:模块权限。开发团队在工作过程中无法多条生产线同时推进任务,效率慢。1.2 版本的简介版本(Revision control)是维护工程蓝图的标准做法 能追踪工程蓝图从诞生一直到的过程。是一种若干文件内容变化,以便将来查阅特定版本修订情况的系统。1.3 版本工具集中式版本分 式版本工具工具:SVN、VSS、CVS、Git M curial、Bazaar2.
2、Git 和 Svn 比较2.1 SVN2.1.1 SVN简介SVN 属于集中式版本管理系统,服务器中保存了所有文件的不同版本,而协同通过连接svn服务器,提取出最新的文件,获取提交更新。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升同时也能较好的解决CVS系统的一些不足。2.1.2 SVN基本交互流程图2.1.3 SVN缺点集中管理方式在一定程度上看到其他开发在干什么,而管理员也可以很轻松掌握每个人的开发权限。但是相较于其优点而言,集中式版本服务器单点 障工具缺点很明显:必须连接在SVN服务器上,否则不能提交、对比、还原等
3、2.2 Git2.2.1 Git与SvnGit 和其他版本具体差异系统的主要差别在于,Git 只关心文件的整体是否发生变化。而SVN这类版本系统则只关心文件内容的具体差异。SVN这类系统每次化的差异数据。有哪些文件作了更新,以及了哪些行的什么内容。然而 Git 并不保存这些前后变实际上,Git更像是把 变化的文件 作一个快照后,在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的信息(Hash值)并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git再次保存,而只对上次保存的快照作一。2.2.2 Git的优势是什么分布式,强调公共服务器和数据量都太大离线
4、工作,每个人的本地仓库,大部分操作在本地库完成,不需要联网(SVN做不到)分支操作非常快捷流畅(重点)可以吃后悔药, 尽可能添加数据而不是删除或修改数据(删除或修改不容易恢复,而每次添加一个版本,历史版本)速度快、灵活, 有能力高效管理类似 Linux内核一样的超大规模项目(速度和数据量)2.2.3 Git 历史发展同生活中的许多伟大一样,Git 诞生于一个极富纷争大举创新的年代。一开始 linus()本人手动合并代码,Linux 开源项目有着来自界各地的开发者参与,绝大多数的 Linux)。维护工作在了提交补丁和保存归档的繁琐事务上(1991200到 2002 年,商业软件 Bitkeepe
5、r 出于人道语义精神,给linux使用 要求是不能进行。于是整个项目组开始启用分布式版本系统 BitKeeper 来管理和维护代码。到 2005 年的时候,linux社区开发者试图Keeper协议,但是被公司发现了 于是开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作结束,他们收回使用 BitKeeper 的权力这就迫使 Linux 开源社区(特别是 Lin的缔造者 Linus )不得不吸取教训,于是自已用C语言开发后linux系统代码由git管了一套属于理。2008年,的版本系统,不至于重蹈。Git主体程序只发了两周,一上线了,很多开源软件都放在G thub上进行公布:
6、Linux,Android, jQuery, Ruby,PHP,vue.js 目前使用Git的项目数量也已经超过了使用SVN的仓库数。3. Git与安装3.1 Git官网:软件地址:根据电脑版本对应版本:3.2 Git 安装3.3 Git 本地工作区域请注意,接下来要讲的概念非常重要。对于任何一个文件,在 Git 内都只有三种区域:工作区,暂存区和本地仓库。工作区:表示新增或修改了某个文件,但还没有提交保存;暂存区:表示把已新增或修改的文件,放在下次提交时要保存的中;本地仓库:文件已经被保本地仓库中了。4 Git与代码托管平台4.1 Git 与比较Git :是一个版本管理工具 , 只在本地使用
7、的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容,后面虽然修改过,但是通过git这个工具,可以原来提交的内容重现出来,这样对于你后来才(官网 ttps:/的一些错误进行更改,进行还原。.com/)是一个基于Git的 程代码托管平台(),可以在上建立一个库,可以将本地库的代码提交到库 这样你的每次提交,别人也都可以看到你的代码,同时别人也可以帮你修改你的代码,这种开源的方式非常方便程序员之间的交流和学习。4.2 代码托管平台局域网GitLab (可自行搭建)环境:码云4.3 本地库和库团队内部协作开发跨团队协作开发5. Git 命令行操作5.1 打开命令行窗口安装
8、Git后,在管理器的空白处,单击鼠标右键打开窗口,点击Git Bash Here ,打开Git命令行窗口,在窗口中可直接使用Linux命令操作:5.2 初始化Git本地库命令: git效果:init.git 目录仓库目录说明:hooks目录:文件的目录。info目录:保存了不希望在 .gitignore 文件中管理的忽略模式的全局可执行文件注意: .git 目录中存放的是本地库相关配置文件,也不要随意删除与修改logs目录:日志目录objects目录: refs目录:所有数据内容指向数据(分支)的提交对象的指针cong文件包含了项目特有的配置选项description文件GitWeb 程序使用
9、HEAD文件指向当前分支5.3 设置签名信息作用:只为区分不同开发格式:用户名:mengxuegu的: mengxuegu注意:这里的签名信息和登录命令:没有任何(码云,Githu库的帐号和项目级别/仓库级别:仅在当前目录的本地Git仓库范围内有效git config mengxuegu_progit config user.mengxuegu888163com签名信息保存位置: ./.git/cofig 文件中系统用户级别:登录当前操作系统的用户范围git config -global mengxuegu_glogit config -global u
10、ser.mengxuegu666签名信息保存位置: /.gitconfig级别优先级:就近原则: 项目级别 优先于 系统用户级别如果只有二者都不系统用户级别 的签名 则采用 系统用户级别 的签名信息是不的。5.4 Git 基本操作5.4.1 查看状态用于查看工作区 暂存区的状态123456master # 默认在m ter(主干)分支上On br nNo commits yet # 当前没有任何的提交nothin to comm t (create copy files and use "git add" to track)# 没有什么需要提交的(创建/文件,使用“git
11、add”命令可追踪,也就是用git去管理文件)根据状态提示,往仓库中创建一个 demo01.txt 文件, 文件保存一些内容(按 i内容, 按:wq 保存并退出, 按 ':q!' 不保存强制):1再 git status 查看状态提示 Untracked files (有未追踪文件):$ vim demo01.txt$ it status5.4.2 添加到暂存区将工作区的“新建/修改”添加到暂存区命令: git add <file name>恢复,不放到暂存区令:it m -cachedilename>5.4.3 提交到本地库将暂存区的内容提交到本地库命令:
12、git commit -m "提交说明信息"<filename>修改 demo1.txt 文件内容,再查看状态:5.4.4 查看版本历史显示最详细的日志信息命令: git log如果内容太长, 多屏显示空格键: 向下查看b : 向上查看方式:q :查看以漂亮的格式显示:即每条日志只显示一行命令: git log -pretty=oneline简约的格式显示:命令git l g onelin显示版本步数推荐:命令: git reflogHEAD对应版本,底层操作需要移动多少步5.4.5 前进后退版本通过HEAD指针来移动版本基于索引值操作推荐方式命令: gitre
13、set -hard<局部索引值>举例: gitreset -hard64d3d2a使用 (异或)符号:只能后退命令: git reset -hardHEAD注:一个 表示后退一步,n 个表示后退 n 步使用 符号:只能后退命令: git reset -hard HEADn注:n指定步数 表示后退 n 步5.4.6 删除文件并恢复前提: 除文件前,此文件需要 经提交过本地库, 删除:rm 文件名.恢复命令:删除操作已经提交到本地库:指针位置指向历史删除操作尚未提交到本地库:无法恢复5.4.7 对比文件差异将工作区中的文件和暂存区进行比较命令: git diff <文件名>
14、举例:向apply.txt文件添加了两行,使用 gitdiff apple.txt 查看it reset -hard <历史索引值>将工作区中的文件和本地库历史比较命令: git举例:diff <本地库中历史版本><文件名>不带文件名比较多个文件6. Git 分支管理6.1 什么是Git分支?在版本如下图:过程中,使用多条线同时推进多个任务6.2 Git分支的好处?同时并行推进多个功能开发,提高开发效率各个分支在开发过程中,如果某一个分支开发失败, 即可。对其他分支有任何影响。失败的分支删除重新开始6.3 Git分支操作查看分支:创建分b anch -vbr
15、anch 新分支itgit删除分支(删除的分支不是当前正在打开的分支): git切换分支: git chckout 分支名合并分支:第1步:切换到接受修改的分支上命令: git checkout 需要接受的分支名branch -d 分支名第2步:执行 merge 命令命令: git merge 有新内容的分支名解决:的表现,如下图:的解决:第1步:编辑文件,删除特殊符号第2步:把文件修改到满意为止,保存第3步:git add 文件名第4步:git commit -m "日志信息"7. Git分支管理机制7.1 创建分支注意:此时 commit 后面一定不要有文件名7.2 切
16、换分支创建了两个分支,当前指向h t_x在hot_x更新了新的版本,由hot_x分支切换回master分支在master分支上做了更新8. 码云代码托管中心8.1帐号码云首页:码云页面:下面提供了3个帐号:8.2 创建库(项目)点击右 角 + , 选择 新建项目姓名:总监个性:mxg6666帐号:mengxuegu66616 com姓名:经理个性:mxg888帐号:mengxuegu888姓名:开发个性:mxg999帐号: mengxuegu999!填写项目信息.效果8.3 创建本地仓库123456cd mengxueguinit # 初始化 库demo1.txt #新增文件, 按 i 开始编
17、辑,ctrl+cgit v gitgit编辑,:wq保存并,:q!不保存1. xt # 添加到 存区it -m "fisrt comm t" demo1.txt # 提交到本地仓库ddc8.4 创建库地址别名查看当前所在本地仓库下的所有地址别名1创建库地址别名演示:1git remote add 别名地址git remote -vmkdir mengx gu8.5push 推送本地库到库命令:演示:将mater分支推送到 origin库1如果上面报没权限错误,则重新输入 git, 就会弹出以下窗口,pushorigin master输入 码云平台 的用户名和就行。推送git
18、 push origin master1git push 库别名 分支名1git remote add origin8.6 克隆库经理也要同时参与项目的开发,就需要把库中克隆下来mengxuegu经理先创建一个本地放目录12 mkdir mengxuegu_jl3 cd mengxuegu_jl克隆命令演示1git clone h tp/gi 1git clone地址cd .克隆效果1. 完整的把库到本地2. 创建仓库地址别名 origin3. 初始化本地库8.7 修改克隆文件再提交经理修改 demo1.txt 文件进行提交本地库12 git add demo1.txt3 git commit
19、 -m "jl commit" demo1.txt先把本地缓存的git帐 清除掉,不然会以原来登录的帐户提交(总监),而不是经理帐号进入面板:按打开运行窗口,输入 controlCtrlRvim demo1.txt找到凭据管理器找到 , 展开,然后删除经理再将本地库提到库,但是没限提交1git push origin master8.8 添加项目成员点击提已将邀请以私信的形式至 经理经理 登录的 码云 , 找到 私信, 然后邀请接受邀请后,再提 就可以1git push or gin mast r8.9pull 拉取操作pull 拉取操作其实是两步:pull = fetch
20、 + mergefetch 操作: 只把库中的内容到本地,但是没有改本地工作区的文件。库地址别名分支名1 git fetch演示:12345678gitfetch origin masterdemo txt # 查看并没有更改本地工作区的文件catheckout origin/master # 切换分支对比gitcat#分支 内容是不一样的1.txtcheckou mas r #切换回本地master分支gitmerge 操作:把代码合并到本地代码中库地址别名/分支名1 git merge演示1 git merge origin/masterpull 操作:没有的情况 ,不分为上面两个步骤,可
21、以直接使用 pull 提取操作,1 git pull库地址别名分支名演示12345678910111213$ pwd/d/gitStudy/mengxuegu_jl/mengxuegu$vimgit gitdemo1.txtcommit -m "jl cmmmit" demo1.txt push origin master$cd ././mengxueguAdministratorPC201802211917 MINGW64 /d/gitStudy/mengxuegu (master)$ git pull origin master # 直接拉取,不分两步 fetch,me
22、rge$ cat demo1.txt hello, 我是总监i, 我是经理,我加入项目组来啦.。ha ,我是经理 我又来了。8.10 解决什么情况有?在企业中团队协作开发时,当多个人同时修改同一个文件,同一行代码时,就会产生。只有先推送的那个可以正常推送,后面那个人与它出现的代码,是没有办法推送的,必须先拉取下来,然后自已手动解决总监 修改第2行的内容, 然后提交到后库进行推送。123456AdministratorPC201802211917 MINGW64 /d/gitStudy/mengxuegu (master)vimdemo1.txtgitcommit -m 'zj upda
23、te1' demo1.txtgitpush origin master经理 不知道 总监 修改了文件,所以没有拉取,直接修改了自已本地库的第2行的内容,然后直接提交到库,发现提交报错,1234567891011123cd ./mengxuegu_jl/mengxuegu/vim demo1.txtgit commit -m "jlupdate111" demo1.txt$ git push origin To! rejectedmastermaster -> master (fetch first)error: failedto push some refs
24、to 'were rejected because the'hint: hint: hint: hint:h nt:Updat sremote contains work that you docaused by another repository pushingnot have locally. This is usuallyt the(e g See thef. You may want to first integrate the remote changes 'git pull .') before pushing again.'Note bo
25、ut fast-forwards' in 'git push -help' for details.解决:上面有要的时 需要拉取代码,然后 vim 查看修改文件,再手动解决,保留需g t pull1 git2 vimpull origin masterdemo1.txt添加到本地库和库12345678910git gitgitadd demo1.txtcommit -m "jl resolve status"On branch masterYour branch is ahead of 'origin/master' (use &qu
26、ot;git push" to publish your localby 2 mits)nothing to commit, workingtreecleangit push origin master8.11跨团队协作fork开发入场, 问, 点击右上角的Forkfork 之后,发现变了,和项目名下面多了一行描述克隆项目,然后修改内容提交开发12345678910111213141561$cd ./.mkdir mengxuegu_kf cd mengxuegu_kf/ git cloneCloning remote: remote: remote:remot
27、e:into 'mengxuegu'. Enumerating objects: 24, done.Counting objects: 100% (24/24), done. Compressing objects: 100% (8/8), done.Total 24 (delta 7), reused 24 (delta 7)Unpacking objects: 100% (24/24), done.$cd mengxuegu/vim git gitgito1 txtad demo1.txtcommipush orim'kfn mcommit' demo1.t
28、xtter在 码云 上点击 Pu l Request, +新建 Pull Request切换 总监 , 点击 Pull Request, 点击下方 开启的预览审核代码8.12 SSH登录windows系统自带保存功能,如果 mac 没有自带保存功能怎么办?https 没有记住就帐号,每次登录时都要输入帐号,就很浪费时间。ssh 可以避免每次添加用户名生成密钥。进入当前用户的家目录 $ cd 12345678910111213141516171819如果有.ssh$ rm -rvf目则删除.ssh 目录.ss运行命令生ss 密钥目录$ sseygen -t rsa -C m注意 这里 C 这个参
29、数是大写gxuegu666C , 出现光标停留的地方直接按键Enter进入.ssh 目录查看文$ cd .ssh表查看所有目录 与 文件$ ls -lf./ ./ id_rsa id_rsa.pub查看 id_rsa.pub 文件内容,$ cat id_rsa.pubid_rsa.pub 文件内容(公钥)登录 码云, 点击用户头像设置点击 SSH公钥,输入的密钥信息权限验证回到创建ssh地址别名Git Bash12345678910vimgit gitdemo1.txtcommitremote-m "test ssh update" demo1.txtaddorigin_s
30、shgit:mxg6666/mengxuegu.gitgitremote-vorigin origin origin_sshorigin_ssh(fetch)(push)git:mxg6666/mengxuegu.gitgit:mxg6666/mengxuegu.git(fetch)(push)推送文件进试1gitpushorigin_sshmaster9. TortoiseGit 图形化工具9.1 什么是TortoiseGitTortoiseGit 是基于图形化操作git的工具,来代替前面令行cd /d/gitStudy/mengxuegu9.2官网: 根据TortoiseGit电脑操作系统
31、选择对应版本(32位或64位):9.3 安装TortoiseGit傻瓜式安装,此处 略安装步骤安装完成后,任意空白处,单击鼠标右键,如果出现下图,则安装:9.4 使用Tor oiseGi9.4.1 初始化本地库进入gi目录,将git02作地仓库,如下:9.4.2 添加到本地库新增HelloWorld.java文件并添加内容12345public void test2() 开始推送到本地库public class HelloWorld 9.4.3 推送到库(库需要先创建)上面commit后,会弹出下列窗口,点左下角有个 push 可推送设置签名设置仓库地址(要先在服务器上仓库一个仓库)推送库效果
32、9.4.4 克隆库到本地库(student)9.4.5 修改代码,推送到库(student)9.4.6解决修改HelloWorld.java123publi class HelloWorld pubvoid te 2() Sem.out.println("我是,同学们直接在下面实现该");5当前库中已经被student提交过一次了,3行已经有数据,把当前代码提交上会产生出错:要先pull拉取方式1:方式2:提示需要合并点击了上图中resolve按钮弹出的窗口进行合并代码, 最后点 Mark as resolved,再重新提交到本地库,再提交到库10. 基于IntelliJ
33、IDEA的Git 操作10.1 IDEA配置Git打开 Settings 窗口选择本地安装的 git.exe点击 Te t如果弹出显示 git版本号,则说明配置,点击“OK”即可10.2 创建项目并提交到本地库10.2.1 创建项目10.2.2 将项目提交到本地库选择项目名如下图,颜色变为红色,则表示已经初始化好了本地库提交代码暂存区和本地库10.3 IDEA指定忽略文件概念:IDEA构建项目的特殊文件与class文件目录 这些都是 IDEA 为了管理我们创建的工程而维护的文件,和开发的代码没有 直接。最好不要在 Git 中进行追踪,也就是把它们忽略。*.iml 以iml后缀结尾文件class
34、es 目录下所有文件targe 目录下所有文件为什么要忽略特定文件呢?同一个团队中很难保证大家使用相同的 IDEA工具,而 IDEA工具不同时,相关工 程特定文件就有可能不同。如果这些文件加入版本,那么开发时很可能需要为 了这些文件解决。指定忽略的置文件或目录:方式1:忽略指定文件,在IDEA列表中不,就被选择。打开Setttings Editor File Types Ignore les and folders下输入忽略文件方式2:指定忽略文件或目录SettingsVersionControlIgnoredFiles+再刷新一下,就变成黄绿色方式3: 安装 .ig or 插件来忽略文件在左
35、侧菜单找到Plug ns, 击Browse repositories搜索 .ignore ,点击Install,安装完成后,重启IDEA重启完,在项目上右键->New ->.ignore le ->.gitignore le(Git)选择 NO, 不加入到Git管理中10.4 推送到推送操作:库项目右键 Git Repository Push.定义库信息,点击Dene remote设置库信息:提交到库会弹出一个输入git服务器的用户名与的窗口,输入即可。10.5 克隆仓库项目到本地在工具栏上:VCS Checkout from Version Control Git克隆,最后
36、点 Clone把克隆下来的项目创建到IDEA中导入操作:10.6 拉取操作步骤:项目右键 Git Repository Pull库代码到本地10.7 解决当Push时,出现以下窗口,说明有,需要合并操作,点击merge进行合并选择处理方式, 选择Merge.如下图,左边是本地库,中间是最终合并结果,右边是仓库合并完成后,点击Apply然后再推送库推送到库: 项目右键 Git Repository Push11. Git 工作流与实战演练11.1 什么是工作流因为项目开发中,多人协作,分支很多,虽然各自在分支上互不干扰,但是我们总归需要把分支合并到一 起,而且真实项目中涉及到很多问题,例如版本迭
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年官方兽医考试试题及答案详解
- springboot智能租房APP的安全开发和实现-论文13100字
- 2025安徽省兴泰融资担保集团有限公司招聘4人笔试历年参考题库附带答案详解
- 2025宁夏宁东科技创业投资有限公司中层管理岗位招聘8名笔试历年参考题库附带答案详解
- 2025中国铝业股份有限公司公开招聘2人笔试历年参考题库附带答案详解
- 2025中国建筑股份有限公司岗位招聘集团办公室(党组办公室)笔试历年参考题库附带答案详解
- 2026年中国科学院西安光机所大数据与人工智能中心招聘笔试参考题库及答案详解
- 2026四川乐山市峨边彝族自治县考核招聘农村订单定向医学生7人笔试备考题库及答案详解
- 2026年甘肃省发展和改革委员会所属事业单位甘肃省经济研究院引进高层次人才笔试参考试题及答案详解
- 2026四川宜宾市屏山县市场监管局第三批招聘1人考试备考试题及答案详解
- 2026广东梅州综保区开发建设有限公司招聘2人考试备考题库及答案详解
- 安全监理策划方案
- 广东省珠海市香洲区2024-2025学年五年级下学期期末数学试题(含答案)
- 2026年高考真题-历史(陕晋青宁卷) 含解析
- 2026《危险化学品安全法》对标自查表(Excel适配版)
- 2026-2030中国有机液态氢行业产能预测与投资战略规划可行性研究报告
- 2026云南昆明市延安医院招聘编外人员备考题库及一套参考答案详解
- 2026年江苏高中提前自主招生考试数学试卷试题(含答案详解)
- 陕西国硒谷富硒产品研发中心有限公司招聘笔试题库2026
- 林长制六项工作制度
- 2026年出版社编辑岗位招聘笔试练习题及答案
评论
0/150
提交评论