Git学习

 

1.   Git的好处

(1)       分布式,离线操作;

(2)       每日工作备份(非常安全)

(3)       异地协同办公

(4)       现场版本控制;

(5)       避免引入辅助目录(比如svn老是有.svn这个隐藏目录);git只在顶层有一个.git

(6)       可以吃后悔药;

(7)       工作进度随时保存(比如工作正在进行中临时去修改bug);

(8)       快。

2.   Git简介

3.   Git工作模型

(1)      集中式协同模型(大多数公司在用的模型);

双向箭头代表“可读可写”!

(2)      社交网络式式协同模型(Linux经典开发模型);

(3)      GIT基本交互流程图(记住

这里的Commit是提交到本地然后再push到中央仓库中,每次中央仓库有更新,那么其他人就可以做pull操作了。

4.   Git仓库初始化

5.   Git的原理

Git操作步骤:

初始化仓库后的文件下的目录:

Head永远都是指向当前的分支;

如果做Commit操作,都会生成一个Commit对象,这个Commit对象包括Tree对象,Tree对象包括blob对象……并且每次提交都会记下Parent(根据这些关系就可以追溯到这些历史过程了)。

 

Git操作原理:

每一次提交都是对应一个commit对象,一个commit对象包含一个ID、一个树对象、parentAuthor,这样级级关联。

6.   TortoiseGit和Git

(1)       先安装Git,其实用这个Git已经可以完成大部分的操作了,缺点是做任何事都要用命令行来操作;

(2)       为了解决在命令行下操作Git不方便的问题,可以安装tortoiseGit,就可以再图形界面来操作Git了。

【注意:】

1)  使用tortoiseGitAdd后,还要在TortoiseGitSettings中设置用户名和邮箱(向服务器表明身份);

2)  Add后就可以Commit了(此时Commit只是添加到本地);

3)  push(此时是推送到公共服务器上);

(3)       注意,在使用TortoiseGit建仓库的时候要在目录下建以git为后缀的目录

要创建一个工作区

对话框中的选框如果不选上的话,是当做一个工作区(在这里clone然后提交代码的)。所以要将这个对话框选上,这样就作为一个空的工作区,让别人来向这个空的工作区提交代码(也就是说,共享仓库必须建立成一个空的仓库)。

上面图中的目录是在下图中指定的(名字不是对应的):

(4)      Git中如果user1push操作出现“冲突”,原因是公共仓库中文件的内容和本地文件内容相同行的内容不一样,此时如果user1pull操作,那么文件上就会出现“警告(叹号)”提示(此时可以使用“Edit Conflics”来进行文件对比);如user1只是在文件上添加一些内容,那么做pull操作时就会自动合并内容。

——为避免冲突太多,养成更新代码的习惯(保持本地代码是最新的)。

7.   GitEclipse整合

MyEclipse安装方法Help  –> Configuration ->SoftWare(视频中在Eclipse中安装,用的也是这个方法,不是通过拷贝插件安装的)。

 下载Eclipsegit插件——EGit。下载网址http://download.eclipse.org/egit/updates-1.3/org.eclipse.egit-updatesite-1.3.0.201202151440-r-site.zip(注意我现在官网看到的最新的3.1版本myeclipse10中不能使用),把下载的插件解压出来,删掉XML文件。在MyEclipsedropins目录下新建一个egit文件夹,然后把刚才解压的featuresplugins和另外两个jar包全放进去。重启MyEclipse后,进入window-preferences-team,看到Git选项,就说明安装成功了。

8.   CopSSH

9.   Git经典协同模型

实际开发中,开发者不是将代码直接提交到中央仓库中的,而是提交到develop分支上去,待到一定的稳定阶段,才将代码发布到Master中央仓库中!

=======开发场景举例:=======

(1)       master是主分支现在从产品的0.1版本开始,新建一个develop分支1,开始进行开发0.2版本

(2)       到了阶段2的时候原来的0.1版本在给用户使用的过程中发现了一个bug01,这时候就会从0.1版本上新建一个hotfixes(热补丁分支),来对应这个bug01

(3)       bug01解决后,在master主分支上新建一个新版本(打一个TagTag0.2,并将修正后的代码,提交到Tag0.2上;——同时,将修复代码与develop分支上的代码进行(如阶段3处)合并develop分支上有bug01);

(4)       到了阶段41.0版本的功能开发完成,这时候需要将代码发布到ReleaseBranch(发布分支)5上。ReleaseBranch用来对代码进一步做测试,确保代码的安全性。这时候ReleaseBranch继续,如果有bug就在ReleaseBranch上做修复,同时合并到develop上,与此同时1.0版本也是继续在develop分支上继续前进(比如从4阶段开始接着开发2.0版本);

(5)       ReleaseBranch的阶段6发现没什么问题了,确实稳定了,这是才将代码合并到master分支上(打一个Tag1.0),同时合并到develop分支

(6)       develop左侧的feature branch(特性分支)用来在develop分支的基础上作特别开发的(比如分支A用来做高标准的安全校验、B用来做高效数据库查询),其中AB分支可能失败可能成功,失败就丢弃,成功就合并到develop分支上;

10.         使用Git

1.

10.1.     本地模拟Git服务器:

1、             在本地模拟Git服务器:

安装好Git后,在Git同目录下建一个Repository,在Repository下再建一个git文件夹专门用来放git文件(之所以这样做,是可能这个Repository下也可以作为svn的仓库位置);

2、             初始化仓库

视频中右键有打开命令行的快捷键,我的没有,桌面上的bash默认是在C盘下, 可以通过cd ../../../d/ProgramFilesJava_Develop/Repository命令来到git的仓库中(D\ProgramFiles\……

使用命令git init --bare shared.git创建一个文件夹名为shared.git的文件夹(必须以.git为结尾),这是一个空仓库,shared.git文件结构:

【说明:】

hooks钩子程序,用来控制commitupdate等操作,可以定制一些操作事件;

info有些文件或者目录不需要做版本控制,可以再这里做设置(其中的exclude文件);

objects记录版本控制的信息;

refs记录头、以及分支文件信息;

config系统配置,比如记录用户名、邮箱等;

description

HEAD记录主分支最新的提交;

—综上所述,代码提交后的所有的信息都在shared.git目录下!

PPT内容:

3、             克隆项目

比如用户1user1),在自己的目录(/user1)下可以使用命令来将项目文件克隆下来。

此时就会在user1下生成一个目录.git其中也有hooksinfo等目录,在.git同级目录下就可以新建文件并且将文件上传了(先add、然后commit,还要设置usernameemail),如下操作:

4、             addcommit等操作原理

相关概念:工作区、暂存区、版本库

图形表示工作过程:

index文件就是暂存区(.git中没有发现这个文件)index是索引,然后内容(对象 )会存在objects中。

master代表分支、head指向要提交的那个分支。master中的内容也是记录在objects文件中。

10.2.     TortoiseGit

上面都是用命令行来操作的,TortoiseGit可以再图形界面来操作。

1、  安装:

TortoiseGit安装到D:\ProgramFiles\Java_Develop\目录下(和Git同级目录)

安装过程中:

2、 

11.         GitGitHub

1.1.  Eclipse克隆Github中的项目

右键、implortgit

 

12.1.     分享一个项目

项目、右键、Teamshare

到此为止,操作是在项目中创建一个.git文件目录!

项目、右键、TeamCommit

项目、右键、teamremotepush

 

这里一定要点击“Force Update All Specs”!!!!

12.         GitOS

github大致差不多,命令行是通用的。

也要公钥,公钥是通用的。

=========Again=========

版本控制:Reversion Control

1.   版本控制工具都有哪些

(1)       CVS:开启版本控制之门;

(2)       SVN:集中式版本控制之王;

(3)       GIT:分布式版本控制的伟大作品;

2.   GIT简介

1.

2.1.  简介:

GitLinux的第二个伟大作品。

2005年有余BitKeeper软件公司对Linux社区停止了免费使用权,Linus迫不得已自己开发了一个分布式版本控制工具,从而Git诞生了。

目前使用Git作为版本控制的开源软件:

LinuxKernel

Android

jQueyr

RubyOnRails

Debian

Eclipse上使用Git的数量已经超过了SVN

l Git的最大优点是“分布式”!

传统的SVN必须要链接服务器才能做提交代码等代码管理,比如在公司内部做开发,要连接公司内部的服务器,如果仅仅是内部开发,那么用SVN还是挺合适的。

         但是,使用Git就可以在任何地方做代码管理,这就是“分布式”。使用Git时,我们每个开发者都在本地有一个仓库,远程上的服务器的“仓库”和本地的“仓库”是一样的。在没有联网的情况下,我们仍然可以“提交代码”——即提交到本地仓库中,在可以联网的时候,再往服务器上push即可。

         从上可以看到,使用Git后我们就可以获取到完整的源代码——所以使用Git适合于开源软件开发,如果软件的安全级别很高,那么就不适合使用Git了。(相比SVNSVN就可以做权限控制)。

2.2.  使用Git的好处

(1)      分布式;

(2)      每日工作备份;

(3)      异地协同工作;

(4)      现场版本控制:

——比如客户发现了bug,工程师现场解决bug后,为了防止后续版本有此bug,可以从根目录生成代码,然后将当前bug打成补丁,带回公司即可(这里没看懂……)。

(5)      避免引入辅助目录(比如SVN中有很多的.svn目录)

——Git只在顶层目录有.Git目录

(6)      可以做“撤销”操作;(sbash

(7)      工作进度随时保存:

——可以随时停止当前的工作并保存,然后可以随时从上次保存的进度再随时开始(sbash)。

(8)      速度快(GitSVN速度快得多)

2.3.  Git的工作模型

Git的工作模型有两种:

1)集中式协同模型(类似SVN);

2)社交网络式协同模型。

1.  

2.3.1.   集中式协同模型:

SVN就是集中式协同模型)

(双向箭头表示可读可写)

2.3.2.   社交网络式协同模型

从图里可以看到,这里的箭头都是单向的,表示只读,写的话会有限制。

此图也是Linux的经典开发模型,只有核心开发人员才能提交代码,提交到核心仓库。

【注意:】

公司里,为了方便和简洁,一般都使用协同式开发模型,而不需要社交网络式协同模型(需要一级一级的审核)。

2.4.  Git的基本交互流程图

【图示说明:】

开发人员使用Git的步骤:

(1)       Clone:先从共享库中将代码复制(Clone)到本地;相当于svncheckout

(2)       本地修改代码后做提交(Commit),这里的提交是提交到本地仓库push操作是提交到远程服务器上)也就是书说,Git中要是提交代码要经过两步:1commit提交到本地;2push提交到服务器。

(3)       提交到本地后,就可以做push操作(将本地代码提交到共享库中)。

(4)       当有人向共享库中push代码,那么其他人就可以使用pull(相当于SVNupdate命令将代码拉到本地。

2.5.  开源项目工作流程图

3.   GITwindows上的安装与使用

(安装步骤参考文档)

1. 

2. 

3. 

3.1.  仓库的初始化(模拟中央仓库)

【步骤:】

(1)       新建一个文件夹,这里命名为Git_Repository

    // --bare 表示空的

    git init --bare publickShare.git

创建后文件夹中的目录:

【文件夹解释:】

hooks:该文件夹包含一些事件函数,如pre-commit.sample(提交前)、post-commit.sample(提交后),我们可以定制一些命令,比如提交后发邮件通知相关人士。

info:可以设置哪些文件不进行版本控制(要忽略的文件);

objects:记录提交的信息(比如提交时候的写的mssage

refs:记录头和分支,标志你的分支指向哪个提交;

config:系统配置,比如用户名、密码、邮箱等;

description:项目的描述信息

HEAD:指向当前分支的一个提交

3.2.  一些命令

Git中,check out是切换的意思。

【常用命令】

// --bare 表示空的

git init --bare publickShare.git

// 查看当前目录下文件的状态(比如是否有未提交的)

git status

// add文件(比如要add一个a.jsp的文件)

git add a.jsp

// push 操作:将本地的master推送到远程的UserManage

// 我们在config文件中可以看到远程服务地址有一个别名:origin

git push /reposistory/UserManage/ master

// 或者:

git push origin master

//git config命令有两个参数

//1--system:操作/etc/gitconfig文件包含了适用于系统所有用户和所有库的值

git config --system

//2--global:操作~/.gitconfig文件:具体到用户(这也是缺省值)

git config --gloabal

// 个人信息初始化

git config user.name="user1"

git config user.email="user1@163.com"

4.   客户端TortoiseGit的安装与使用

5.   GITEclipse整合

EGit:略

配置用户:PreferenceGitConfigurationnew Entry》通过配置key/Value设置用户名和密码。

uriclone项目后,在项目上右键》import成在javaEE视图能看到的项目。

Eclipse中编辑时候:

(1)       一个文件修改后会有一个>符号显示;

(2)       Add会显示灰色星号;

(3)      有的文件提交时有冲突:

1)  pull显示冲突符号,然后右键MergeTool 选择Use Head……那个选项;

2)  然后标示已经解决冲突:右键》TeamAdd to Index(加入到缓存区)

Team下面有两个菜单:】

CompareWith ->  Git Index:表示和暂存区中的内容(就是将文件add后)作对比。

                            ->  HeadReversion:表示最新版本

ReplacWith  -> 用指定的文件替换当前文件(可用来做恢复操作)。

6.   通过CopSSH搭建GIT服务器

7.   GIT经典协同模型/分支分类

(思考:团队如何协作、代码如何管理)

1. 

2. 

3. 

4. 

5. 

6. 

7. 

7.1.  Git经典协作模型

中心仓库:包含masterdevelop两个分支;

分支的分类:

1)  主要分支有:masterdevelop分支;

2)  支特性分支:特性分支、发布分支、热补丁分支

经典协作图:(见上面开始看的)

项目已经默认有一个master分支,但是在开发中一般不在master分支上做开发,而是新建一个develop分支,在develop分支上做开发。

项目的maser分支,只有有了提交动作后才有master分支

【实例:】(在Eclipse中开发)

发布1.0版本:

现在开发一个项目,我们发布第一个版本,即1.0版本,这时候,我们可以给我们的项目打一个“Tag”——注意,如果一个版本是一个Tag,那么说明这个版本就是一个稳定的成熟的版本,是一个里程碑式的版本。

Tag的方法:项目》右键》TeamAdvancedTag

开发2.0版本:

(1)       开始开发2.0版本:开发的时候不要直接在mastert分支上做开发,而应该新建一个分支(比如新建一个名为dev的分支),然后在该dev上开发,切换分支:项目》右键》Swritch To new branch

(2)       2.0版本正在开发过程中,突然1.0发现了一个很严重的Bug,需要立即修复。这时候领导找到正在开发2.0版本的员工1负责修复。所以此时,员工1结束当前2.0的开发:将代码做commit操作,对当前2.0开发的内容进行保存;

(3)       然后切换到1.0版本项目》右键》Teamswitch to》选择Tags/1.0版本,然后要基于这个1.0版本新建一个(比如名为v1.0_fixup)新的分支(即热补丁分支,也叫bug分支),在热补丁分支上做开发,然后做checkout,然后就可以在这个分支上修改代码了;

(4)       代码修复后,Add代码》提交代码(提交到本地分支上的),然后做一个1.1Tag;(最后做push操作<另外一个视频是提交和push一起做的>

(5)       将修复的bug整合到2.0版本中:将项目切换到dev分支,然后项目》右键》TeamMerge》选择Local/v1.0_fixup(视频中开始选Tags/1.1,有问题,后来就改从Local选了)

8.   Android源代码管理方式

9.   Git迁移

===教程二===

1.   使用tortoiseGit

【注意:】

同时使用TortoiseGitTortoiseSVN会有冲突,文件显示的图标会不正常。解决冲突方法是卸载其中一个。

【步骤<基本操作>:】

(1)       首先创建中央仓库:

在某个目录下创建文件夹,作为仓库名:比如publicShareTortoise.git然后在该文件夹中:右键 Git create Repository Here

(2)       然后在某个目录下右键使用Clone命令,将项目Clone下来,新建一个文件

新建文件的上面显示的图标会显示一个问号。

(3)       将新建文件先“add”,然后“commit”(这是提交到本地),然后push

注意:push的时候,在某个文件上右键push是不行的,push必须是对整个项目的push,所以在空白处右键》push

(4)       修改文件:修改文件后,再提交的时候,就不用Add这个 操作了,因为TortoiseGitcommit已经包含了add命令

【解决冲突】

(1)       如果有冲突push的时候,会提示“git did not exit cleanlyexit code 1

这时候,就可以做pull操作(这时候会自动合并,有的时候会自动合并,有的时候会提示“合并失败”);

(2)       如果“合并失败”,那么在合并失败的文件上,右键》TortoiseGitEdit Conflicts

这时候进入文件合并界面:黄色可以忽略,红色必须解决

(3)       解决冲突后,目录下会出现3个临时文件:冲突前基准文件、远程服务器上的文件、本地文件,右键》TortoiseGitResolve Finished,即标记为“已经解决”,此时就可以执行commit操作,同时临时文件自动删除。

【补丁】

(1)       用户1修改了本地文件,然后提交到本地仓库后(不要提交到远程服务器),然后在空白处右键》Create Pach Serialization,就会在当前目录生成一个补丁;

(2)       用户1将生成的补丁用邮件发送给用户2

(3)       用户2在项目中右键》应用补丁,然后提交,然后再生成补丁发送给主开发者。

(4)       注意:如果用户2在应用补丁的时候,如果冲突、应用补丁失败,不要点击“Abort”关闭那个对话框,然后在冲突的文件上右键》Edit Conflicts

 

转载于:https://my.oschina.net/u/1273559/blog/339835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值