Git在eclipse中的装备具体记载-Android-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:159回复:0

  Git在eclipse中的装备具体记载

楼主#
更多 发布于:2016-05-21 22:57


目录[-]
一_装置EGIT插件
二_运用EGIT前的装备
三_新建GIT库房
四_装备.gitignore
五_检查前史记载
六_长途GIT库房
七_推送长途库房
八_处理推送抵触
九_Rebase和Merge的差异
十_Rebase和Merge怎么挑选的简略解析
十一_Fetch和Rebase
十二_重置功用
一_装置EGIT插件

http://download.eclipse.org/egit/updates/
或许运用Eclipse Marketplace,搜索EGit

还有一个要阐明的是假如运用:http://download.eclipse.org/egit/updates.来装置,则要确保您的eclipse版别是最新的,否则会装置失败
低版别Eclipse装置EGit插件
自己的Eclipse是3.6版别的,恰好不能运用上述办法,处理办法如下
翻开http://wiki.eclipse.org/EGit/FAQ
挑选
http://download.eclipse.org/egit/updates-1.3(由于这个版别的发布时刻跟Eclipse3.6发布时刻附近,别的版别同理试试)

Next究竟就OK了。
二_运用EGIT前的装备
装备个人信息,最主要的是user.name和user.email
l  Preferences > Team > Git >
Configuration
l  New Entry

三_新建GIT库房
新建NC module project

l  File > Team > Share Project 挑选GIT

创立库房后,在$workspace\demo目录下的.git文件夹,即是git的库房地址。和CVS、SVN不相同,GIT不会在每一个目录下树立版别操控文件夹,仅在根目录下树立库房

一起,eclipse中的project也树立git版别操控,此刻未创立分支,处于NO-HEAD状况

文件夹中的符号”?”表明此文件夹处于untracked状况,这么就成功创立GIT库房。
四_装备.gitignore
此刻咱们测验做一次提交
l  Team -> Commit…

如上图所示,Author和Committer会默以为Git装备的用户信息。下面的Files窗口中能够看到这次提交的文件,其中有十分多带有NC_HOME的文件,此刻能够猜测出,在咱们的project中连接的NC_HOME也被GIT默许到版别操控中了,如下图:

明显NC_HOME和out是不需求进行版别操控的,咱们能够经过装备.gitignore来扫除这两个文件夹
翻开Navigator窗口,在project根目录中增加.gitignore文件,将需求扫除操控的目录写入.gitignore文件中

再次测验commit,需求提交的文件现已被过滤

首次提交后,会主动生成master分支

然后在public中新建一个文件,能够看到图标依然是问号,处于untracked状况,即git没有对此文件进行监控

经过Team -> Add to index能够将文件参加git索引,进行版别监控

能够看到图标显现也有了改动(EGIT中只需Commit就能够默许将untracked的文件增加到索引再提交更新,不需求分隔操作)

也能够经过Team -> Untrack将文件从索引操控中扫除。
将这次新增的文件commit到库房中,文件将处于unmodified状况,或许说,这即是一种staged状况

然后修正文件的内容,文件将处于modified状况

五_检查前史记载
Team -> Show in history能够检查版别前史提交记载

能够挑选比照模式

六_长途GIT库房
此小结的条件是现已树立GIT服务器,并经过SSH协议连接,可参看文档《RHEL下树立GIT服务器》《WindowsXP下树立GIT服务器》
《GIT服务器运用根底》。这篇文章运用RHEL5.5体系下的GIT-2012-01-11,用户root/password,GIT库房一致存放在
/app/gitspace目录下。
首要经过shell东西连接到服务器,树立空库房gitdemo,此刻的ssh拜访地址如下,别离由协议称号、用户名、IP、端口、git库房目录构成。
ssh://root@192.168.1.101:22/app/gitspace/gitdemo
翻开GIT资源库窗口,挑选克隆资源库
[img]http://static.oschina.net/uploads/img/201406/25113442_qqeN.gif[/img]

如今现已把长途的GIT库房克隆到本地,接下来需求将库房检出为NC模块项目。
[img]http://static.oschina.net/uploads/img/201406/25113442_WOy9.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113442_4XFU.gif[/img]

终究得到gitdemo模块项目,分支是mirror
[img]http://static.oschina.net/uploads/img/201406/25113443_VOAg.gif[/img]

七_推送长途库房
克隆服务器端库房后,会在本地树立一个相同的库房,称本地库房。在本地进行commit操作将把更新提交到本地库房,然后能够将服务器端的更新pull到本地库房进行兼并,终究将兼并好的本地库房push到服务器端,这么就进行了一次长途提交。
[img]http://static.oschina.net/uploads/img/201406/25113443_eNl9.gif[/img]

先提交一次到本地库房
[img]http://static.oschina.net/uploads/img/201406/25113443_fTSJ.gif[/img]

然后push到服务器端的mirror分支,Team -> remote ->
Push
[img]http://static.oschina.net/uploads/img/201406/25113444_Awpk.gif[/img]

完结推送后,能够在服务器端mirror镜像的log中检查到这次记载
[img]http://static.oschina.net/uploads/img/201406/25113444_NMfW.gif[/img]

八_处理推送抵触
多人协作开发的状况下,往服务器推送更新时不免呈现抵触,所以推送之前需求处理服务器端的最新版别和本地库房的抵触。Pull操作即是把服务器端的更新撮合到本地库房进行兼并,处理好兼并抵触后,就能够顺利push到服务器分支了。
假设如今Mairo兄弟在用GIT协作开发NewSuperMairoBro游戏,如今服务器端的mushroom.java文件的内容如下:
[img]http://static.oschina.net/uploads/img/201406/25113444_D1Rh.gif[/img]

MairoBro克隆出代码后,Mairo哥哥做了如下修正
[img]http://static.oschina.net/uploads/img/201406/25113444_2yIx.gif[/img]

Mairo弟弟做了如下修正
[img]http://static.oschina.net/uploads/img/201406/25113444_sFEZ.gif[/img]

然后Mairo弟弟先push代码,Mairo哥哥运用pull来兼并本地库房和长途库房,将发行文件呈现抵触,此刻GIT会主动兼并抵触的文件,如下图所示:
[img]http://static.oschina.net/uploads/img/201406/25113444_iUMd.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113445_ebM4.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113447_aoWT.gif[/img]

很明显主动兼并的抵触文件不能直接运用,咱们能够手动调整,右键发生抵触的文件,挑选Team ->
Merge Tool
[img]http://static.oschina.net/uploads/img/201406/25113448_3n7i.gif[/img]

第一项是将GIT主动兼并过的文件和服务器端文件进行比照
第二项是用本地最新版别的文件和服务器端文件进行比照,主张用此项
接下来即是了解的比照界面
[img]http://static.oschina.net/uploads/img/201406/25113448_32JJ.gif[/img]

Mairo哥哥将抵触文件修正如下
[img]http://static.oschina.net/uploads/img/201406/25113453_JM6H.gif[/img]

然后右键点击此抵触文件,挑选Team -> Add to
index再次将文件参加索引操控,此刻文件现已不是抵触状况,并且能够进行提交并push到服务器端
[img]http://static.oschina.net/uploads/img/201406/25113454_sOQu.gif[/img]

处理兼并抵触后,Mairo弟弟只需求将服务器中兼并后的版别pull到本地,就完结了一次协作开发的代码兼并。从前史记载中能够看到,从mushroom开端前史进入分支,先是mushroomA的记载,然后是mushroomB的记载,终究前史分支兼并。
[img]http://static.oschina.net/uploads/img/201406/25113454_4Dql.gif[/img]

九_Rebase和Merge的差异
Rebase和Merge操作终究的成果是相同的,可是完成原理不相同。
从上面的MairoBro比如能够知道pull大概对前史记载进行了怎么的兼并操作,本来默许pull的操作即是一个分支的merge操作,如下图重现一下:
Mairo弟弟的提交记载如下:
[img]http://static.oschina.net/uploads/img/201406/25113454_QPgG.gif[/img]

Mairo哥哥的提交记载如下:
[img]http://static.oschina.net/uploads/img/201406/25113455_KH3s.gif[/img]

首要是Mairo弟弟把更新push到服务器,这么服务器端的记载就和Mairo弟弟本地的记载是相同的,接着Mairo哥哥履行pull操作,如今剖析下pull是怎么操作的。
l  pull默许即是先把服务器端的最新记载更新到本地的Remote
Tracking中对应的mirror分支
l  接着对Local的mirror分支和Remote
Tracking的mirror分支进行merge操作
[img]http://static.oschina.net/uploads/img/201406/25113455_L5YO.gif[/img]

Merge操作后的成果即是会新增加一个merge记载节点,如下所示:
[img]http://static.oschina.net/uploads/img/201406/25113455_wWKY.gif[/img]

从上图能够看出,mushroomA是在mushroomB之前的,这个时刻关系不取决于谁先履行push,而取决于本地库房中谁先履行commit。所以merge会依照时刻次序严厉的记载每一次commit。
接下来看看rebase,本来rebase也是把两个分支进行兼并的操作,当Mairo弟弟push更新后,服务器端的mirror分支的前史如下:
[img]http://static.oschina.net/uploads/img/201406/25113454_QPgG.gif[/img]

Mairo哥哥本地的前史如下:
[img]http://static.oschina.net/uploads/img/201406/25113455_KH3s.gif[/img]

如今Mairo哥哥不是履行merge操作,而是履行rebase操作,终究成果如下:
[img]http://static.oschina.net/uploads/img/201406/25113455_DN1y.gif[/img]

很明显的差异是没有呈现分支的记载,并且注意到mushroomA*,请注意这个记载和mushroomA不是同一个记载,咱们先剖析下rebase操作下,Mairo哥哥的前史记载都做了哪些改动:
l  先将当时分支的更新有些保留光临时区域,而当时分支重置到上一次pull的记载
[img]http://static.oschina.net/uploads/img/201406/25113456_Hjli.gif[/img]

l  然后将服务器端的更新增加到当时分支,此刻当时分支和服务器端分支是相同的
[img]http://static.oschina.net/uploads/img/201406/25113456_PEV3.gif[/img]

l
 终究将原分支的更新有些mushroomA提交到当时分支的后边,即是要在mushroomB的后边增加mushroomA的更新,当然此刻更新记载现已不是之前的mushroomA了,假如呈现抵触则运用比照东西处理抵触,终究记载成为mushroomA*。
[img]http://static.oschina.net/uploads/img/201406/25113455_DN1y.gif[/img]

假如Mairo哥哥提交过mushroomA1、mushroomA2、mushroomA3,那么履行rebase后会对mushroomA1、
mushroomA2、mushroomA3别离次序履行上图所示的兼并,终究记载为mushroomA1*、mushroomA2*、
mushroomA3*。很明显rebase操作更杂乱,抵触的概率也更高,并且不是依照时刻次序记载。
十_Rebase和Merge怎么挑选的简略解析
此小结为何说是简略解析呢,由于rebase和merge的挑选疑问评论对比剧烈,笔者也没有一个结论,并且git也处于研讨发展阶段,许多理论还没有彻底的纯熟。
关于一个多人开发团队频频提交更新的状况,假如运用merge会使得前史线图十分杂乱,并且merge一次就会新增一个记载点,假如运用rebase即是彻底的线性开发。
[img]http://static.oschina.net/uploads/img/201406/25113456_Cj9m.gif[/img]

上图所示是Merge和Rebase的两个成果,明显你不想要merge的紊乱成果吧,你能告诉我merge图中那条线是master分支吗?
所以给出如下主张,假如同一文件重复修正或提交次数对比多,预期会呈现许多的conflict,那么能够运用merge兼并,仅需求处理一次抵触即
可(不过,大规模主题式的修正,是不是应当事先就新开一个分支呢?);假如修正规模小,预期conflict少,则主张运用rebase。
EGIT中默许的pull操作是Fetch+Merge,假如要用rebase,能够分隔操作。先履行Fetch更新remote
tracking,再履行rebase进行兼并(下一末节将介绍rebase操作)。或许修正pull的默许操作,在.git/config文件中装备:
[img]http://static.oschina.net/uploads/img/201406/25113456_vNHg.gif[/img]

上述装备只对mirror分支有用,也可做大局装备,在$HOME/.gitconfig中装备,windows体系假如没有装备HOME变量的话就默许在$documents
and settings/ USER目录下:
[img]http://static.oschina.net/uploads/img/201406/25113457_08dq.gif[/img]

十一_Fetch和Rebase
MairoBro来做fetch和rebase的测验,首要Mairo弟弟在client中增加文件OPQ别离提交,并push到服务器,如图:
[img]http://static.oschina.net/uploads/img/201406/25113457_sEEt.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113457_vBoS.gif[/img]

此刻服务器端的前史现已被更新,可是Mairo哥哥的remote
tracking中mirror分支并没有更新到最新的记载,如图:
[img]http://static.oschina.net/uploads/img/201406/25113457_XMua.gif[/img]

所以需求更新remote
tracking中的分支,使得它与服务器端的分支同步,右键点击资源库挑选Fetch
[img]http://static.oschina.net/uploads/img/201406/25113457_FYqw.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113458_X8zh.gif[/img]

这么就更新了本地的remote tracking中的分支,使得它和服务器端分支同步。
[img]http://static.oschina.net/uploads/img/201406/25113458_bdbu.gif[/img]

然后Mairo哥哥在本地的private中增加文件ABC,并别离提交到本地库房中。
[img]http://static.oschina.net/uploads/img/201406/25113458_PwNY.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113458_G32r.gif[/img]

然后将本地mirror分支和remote
tracking中的mirror分支进行rebase,先checkout本地mirror分支 ,然后右键点击挑选Rebase
[img]http://static.oschina.net/uploads/img/201406/25113458_V4GE.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113459_3I3v.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113459_oIta.gif[/img]
[img]http://static.oschina.net/uploads/img/201406/25113459_LxYO.gif[/img]

如上图能够看到前史记载的次序是OPQABC,现已rebase成功,接着push到服务器即可。
十二_重置功用
GIT中有三种重置功用,别离是soft、mixed、hard,差异如下:
l  Soft - 当时分支重置到指定commit记载方位,索引和作业树不变;
l  Mixed - 当时分支重置到指定commit记载方位,索引被更新,作业树不变;
l  Hard - 当时分支重置到指定commit记载方位,索引和作业树都更新。
形似不好了解,首要要了解GIT的三个区域(作业树、索引区、库房),能够参阅文档《GIT简介》。
先做soft的测验,新建Soft.java文件,能够看到此文件未增加到索引操控
[img]http://static.oschina.net/uploads/img/201406/25113500_pxGK.gif[/img]

先进行一次提交,提交后在History窗口中重置这次提交,如图:
[img]http://static.oschina.net/uploads/img/201406/25113500_cpon.gif[/img]

重置后检查作业树,如图
[img]http://static.oschina.net/uploads/img/201406/25113500_bR8V.gif[/img]

从上图能够看出,soft文件还存在,阐明重置没有改动作业树,并且soft文件不是“问号”图标,阐明现已增加到索引,阐明索引也没有变。仅有重置的是前史记载。
然后新建Mixed.java文件,此刻Mixed.java也没有增加到索引操控,然后提交。
[img]http://static.oschina.net/uploads/img/201406/25113501_YNpZ.gif[/img]

在History窗口中重置
[img]http://static.oschina.net/uploads/img/201406/25113502_ymf0.gif[/img]

重置后检查作业树成果如下:
[img]http://static.oschina.net/uploads/img/201406/25113502_BhEX.gif[/img]

从上图能够看出,Mixed.java文件还存在,阐明作业树没有改动,可是文件状况是untracked,阐明索引被更新,此刻文件没有增加索引操控。
终究来看hard重置,新建Hard.java文件,此刻文件没有增加索引,然后提交。
[img]http://static.oschina.net/uploads/img/201406/25113502_u4TQ.gif[/img]

在History界面重置这次提交,如图:
[img]http://static.oschina.net/uploads/img/201406/25113502_CFl7.gif[/img]

重置后再检查作业树,成果如下:
[img]http://static.oschina.net/uploads/img/201406/25113503_FoDb.gif[/img]

能够看到Hard.java文件现已不存在了,阐明索引和作业树都被更新。







[img]https://img.alicdn.com/imgextra/i2/2223466637/TB2PnMukXXXXXcvXpXXXXXXXXXX_!!2223466637.png[/img]

优质IT资源分享社区[font=Tahoma  ]为你提供此文。 [font=Tahoma  ]
[font=Tahoma  ]本站有大量优质android教程视频,资料等资源,包含android基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。[font=Tahoma  ]

android教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客